Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
02170a0a
Commit
02170a0a
authored
Jun 22, 2012
by
Alexander Smorkalov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Sample updated due to new DetectionBasedTracker interface.
parent
0c65ea97
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
68 additions
and
40 deletions
+68
-40
DetectionBasedTracker_jni.cpp
.../android/face-detection/jni/DetectionBasedTracker_jni.cpp
+61
-22
DetectionBasedTracker.java
...tion/src/org/opencv/samples/fd/DetectionBasedTracker.java
+7
-18
No files found.
samples/android/face-detection/jni/DetectionBasedTracker_jni.cpp
View file @
02170a0a
...
@@ -25,22 +25,46 @@ public:
...
@@ -25,22 +25,46 @@ public:
IDetector
(),
IDetector
(),
Detector
(
detector
)
Detector
(
detector
)
{
{
LOGD
(
"CascadeDetectorAdapter::Detect::Detect"
);
CV_Assert
(
!
detector
.
empty
());
CV_Assert
(
!
detector
.
empty
());
}
}
void
detect
(
const
cv
::
Mat
&
Image
,
std
::
vector
<
cv
::
Rect
>
&
objects
)
void
detect
(
const
cv
::
Mat
&
Image
,
std
::
vector
<
cv
::
Rect
>
&
objects
)
{
{
LOGD
(
"CascadeDetectorAdapter::Detect: begin"
);
LOGD
(
"CascadeDetectorAdapter::Detect: scaleFactor=%.2f, minNeighbours=%d, minObjSize=(%dx%d), maxObjSize=(%dx%d)"
,
scaleFactor
,
minNeighbours
,
minObjSize
.
width
,
minObjSize
.
height
,
maxObjSize
.
width
,
maxObjSize
.
height
);
Detector
->
detectMultiScale
(
Image
,
objects
,
scaleFactor
,
minNeighbours
,
0
,
minObjSize
,
maxObjSize
);
Detector
->
detectMultiScale
(
Image
,
objects
,
scaleFactor
,
minNeighbours
,
0
,
minObjSize
,
maxObjSize
);
LOGD
(
"CascadeDetectorAdapter::Detect: end"
);
}
}
virtual
~
CascadeDetectorAdapter
()
virtual
~
CascadeDetectorAdapter
()
{}
{
LOGD
(
"CascadeDetectorAdapter::Detect::~Detect"
);
}
private
:
private
:
CascadeDetectorAdapter
();
CascadeDetectorAdapter
();
cv
::
Ptr
<
cv
::
CascadeClassifier
>
Detector
;
cv
::
Ptr
<
cv
::
CascadeClassifier
>
Detector
;
};
};
struct
DetectorAgregator
{
cv
::
Ptr
<
CascadeDetectorAdapter
>
mainDetector
;
cv
::
Ptr
<
CascadeDetectorAdapter
>
trackingDetector
;
cv
::
Ptr
<
DetectionBasedTracker
>
tracker
;
DetectorAgregator
(
cv
::
Ptr
<
CascadeDetectorAdapter
>&
_mainDetector
,
cv
::
Ptr
<
CascadeDetectorAdapter
>&
_trackingDetector
)
:
mainDetector
(
_mainDetector
),
trackingDetector
(
_trackingDetector
)
{
CV_Assert
(
!
_mainDetector
.
empty
());
CV_Assert
(
!
_trackingDetector
.
empty
());
DetectionBasedTracker
::
Parameters
DetectorParams
;
tracker
=
new
DetectionBasedTracker
(
mainDetector
.
ptr
<
DetectionBasedTracker
::
IDetector
>
(),
trackingDetector
.
ptr
<
DetectionBasedTracker
::
IDetector
>
(),
DetectorParams
);
}
};
JNIEXPORT
jlong
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject
JNIEXPORT
jlong
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject
(
JNIEnv
*
jenv
,
jclass
,
jstring
jFileName
,
jint
faceSize
)
(
JNIEnv
*
jenv
,
jclass
,
jstring
jFileName
,
jint
faceSize
)
{
{
...
@@ -48,13 +72,18 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
...
@@ -48,13 +72,18 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
string
stdFileName
(
jnamestr
);
string
stdFileName
(
jnamestr
);
jlong
result
=
0
;
jlong
result
=
0
;
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject"
);
try
try
{
{
// TODO: Reimplement using adapter
cv
::
Ptr
<
CascadeDetectorAdapter
>
mainDetector
=
new
CascadeDetectorAdapter
(
new
CascadeClassifier
(
stdFileName
));
// DetectionBasedTracker::Parameters DetectorParams;
cv
::
Ptr
<
CascadeDetectorAdapter
>
trackingDetector
=
new
CascadeDetectorAdapter
(
new
CascadeClassifier
(
stdFileName
));
// if (faceSize > 0)
result
=
(
jlong
)
new
DetectorAgregator
(
mainDetector
,
trackingDetector
);
// DetectorParams.minObjectSize = faceSize;
if
(
faceSize
>
0
)
// result = (jlong)new DetectionBasedTracker(stdFileName, DetectorParams);
{
mainDetector
->
setMinObjectSize
(
Size
(
faceSize
,
faceSize
));
//trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
}
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
{
{
...
@@ -68,7 +97,7 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
...
@@ -68,7 +97,7 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
{
{
LOGD
(
"nativeCreateObject catched unknown exception"
);
LOGD
(
"nativeCreateObject catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject(...
)}"
);
return
0
;
return
0
;
}
}
...
@@ -78,10 +107,12 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
...
@@ -78,10 +107,12 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject"
);
try
try
{
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
stop
();
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
stop
();
delete
(
Detect
ionBasedTracke
r
*
)
thiz
;
delete
(
Detect
orAgregato
r
*
)
thiz
;
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
{
{
...
@@ -95,16 +126,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
...
@@ -95,16 +126,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
{
{
LOGD
(
"nativeDestroyObject catched unknown exception"
);
LOGD
(
"nativeDestroyObject catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject(...
)}"
);
}
}
}
}
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart"
);
try
try
{
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
run
();
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
run
();
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
{
{
...
@@ -118,16 +151,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
...
@@ -118,16 +151,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
{
{
LOGD
(
"nativeStart catched unknown exception"
);
LOGD
(
"nativeStart catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart(...
)}"
);
}
}
}
}
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop"
);
try
try
{
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
stop
();
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
stop
();
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
{
{
...
@@ -141,21 +176,21 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
...
@@ -141,21 +176,21 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
{
{
LOGD
(
"nativeStop catched unknown exception"
);
LOGD
(
"nativeStop catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop(...
)}"
);
}
}
}
}
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jint
faceSize
)
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jint
faceSize
)
{
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize -- BEGIN"
);
try
try
{
{
if
(
faceSize
>
0
)
if
(
faceSize
>
0
)
{
{
// TODO: Reimplement using adapter
((
DetectorAgregator
*
)
thiz
)
->
mainDetector
->
setMinObjectSize
(
Size
(
faceSize
,
faceSize
));
// DetectionBasedTracker::Parameters DetectorParams = ((DetectionBasedTracker*)thiz)->getParameters();
//((DetectorAgregator*)thiz)->trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
// DetectorParams.minObjectSize = faceSize;
// ((DetectionBasedTracker*)thiz)->setParameters(DetectorParams);
}
}
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
...
@@ -170,19 +205,22 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSe
...
@@ -170,19 +205,22 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSe
{
{
LOGD
(
"nativeSetFaceSize catched unknown exception"
);
LOGD
(
"nativeSetFaceSize catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize(...
)}"
);
}
}
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize -- END"
);
}
}
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jlong
imageGray
,
jlong
faces
)
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jlong
imageGray
,
jlong
faces
)
{
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect"
);
try
try
{
{
vector
<
Rect
>
RectFaces
;
vector
<
Rect
>
RectFaces
;
((
Detect
ionBasedTracker
*
)
thiz
)
->
process
(
*
((
Mat
*
)
imageGray
));
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
process
(
*
((
Mat
*
)
imageGray
));
((
Detect
ionBasedTracker
*
)
thiz
)
->
getObjects
(
RectFaces
);
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
getObjects
(
RectFaces
);
*
((
Mat
*
)
faces
)
=
Mat
(
RectFaces
,
true
);
*
((
Mat
*
)
faces
)
=
Mat
(
RectFaces
,
true
);
}
}
catch
(
cv
::
Exception
e
)
catch
(
cv
::
Exception
e
)
...
@@ -197,6 +235,7 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
...
@@ -197,6 +235,7 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
{
{
LOGD
(
"nativeDetect catched unknown exception"
);
LOGD
(
"nativeDetect catched unknown exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jclass
je
=
jenv
->
FindClass
(
"java/lang/Exception"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
highgui::VideoCapture_n_1VideoCapture__(
)}"
);
jenv
->
ThrowNew
(
je
,
"Unknown exception in JNI code {
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect(...
)}"
);
}
}
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect END"
);
}
}
samples/android/face-detection/src/org/opencv/samples/fd/DetectionBasedTracker.java
View file @
02170a0a
...
@@ -7,9 +7,7 @@ public class DetectionBasedTracker
...
@@ -7,9 +7,7 @@ public class DetectionBasedTracker
{
{
public
DetectionBasedTracker
(
String
cascadeName
,
int
minFaceSize
)
public
DetectionBasedTracker
(
String
cascadeName
,
int
minFaceSize
)
{
{
mMainDetector
=
nativeCreateDetector
(
cascadeName
,
minFaceSize
);
mNativeObj
=
nativeCreateObject
(
cascadeName
,
minFaceSize
);
mTrackingDetector
=
nativeCreateDetector
(
cascadeName
,
minFaceSize
);
mNativeObj
=
nativeCreateTracker
(
mMainDetector
,
mTrackingDetector
);
}
}
public
void
start
()
public
void
start
()
...
@@ -24,8 +22,7 @@ public class DetectionBasedTracker
...
@@ -24,8 +22,7 @@ public class DetectionBasedTracker
public
void
setMinFaceSize
(
int
size
)
public
void
setMinFaceSize
(
int
size
)
{
{
nativeSetFaceSize
(
mMainDetector
,
size
);
nativeSetFaceSize
(
mNativeObj
,
size
);
nativeSetFaceSize
(
mTrackingDetector
,
size
);
}
}
public
void
detect
(
Mat
imageGray
,
MatOfRect
faces
)
public
void
detect
(
Mat
imageGray
,
MatOfRect
faces
)
...
@@ -35,29 +32,21 @@ public class DetectionBasedTracker
...
@@ -35,29 +32,21 @@ public class DetectionBasedTracker
public
void
release
()
public
void
release
()
{
{
nativeDestroyTracker
(
mNativeObj
);
nativeDestroyObject
(
mNativeObj
);
nativeDestroyDetector
(
mMainDetector
);
nativeDestroyDetector
(
mTrackingDetector
);
mNativeObj
=
0
;
mNativeObj
=
0
;
mMainDetector
=
0
;
mTrackingDetector
=
0
;
}
}
private
long
mNativeObj
=
0
;
private
long
mNativeObj
=
0
;
private
long
mMainDetector
=
0
;
private
long
mTrackingDetector
=
0
;
private
static
native
long
nativeCreateDetector
(
String
cascadeName
,
int
minFaceSize
);
private
static
native
long
nativeCreateObject
(
String
cascadeName
,
int
minFaceSize
);
private
static
native
long
nativeCreateTracker
(
long
mainDetector
,
long
trackingDetector
);
private
static
native
void
nativeDestroyObject
(
long
thiz
);
private
static
native
void
nativeDestroyTracker
(
long
tracker
);
private
static
native
void
nativeDestroyDetector
(
long
detector
);
private
static
native
void
nativeStart
(
long
thiz
);
private
static
native
void
nativeStart
(
long
thiz
);
private
static
native
void
nativeStop
(
long
thiz
);
private
static
native
void
nativeStop
(
long
thiz
);
private
static
native
void
nativeSetFaceSize
(
long
detector
,
int
size
);
private
static
native
void
nativeSetFaceSize
(
long
thiz
,
int
size
);
private
static
native
void
nativeDetect
(
long
thiz
,
long
inputImage
,
long
faces
);
private
static
native
void
nativeDetect
(
long
thiz
,
long
inputImage
,
long
faces
);
static
static
{
{
System
.
loadLibrary
(
"detection_based_tacker"
);
System
.
loadLibrary
(
"detection_based_t
r
acker"
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment