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:
IDetector
(),
Detector
(
detector
)
{
LOGD
(
"CascadeDetectorAdapter::Detect::Detect"
);
CV_Assert
(
!
detector
.
empty
());
}
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
);
LOGD
(
"CascadeDetectorAdapter::Detect: end"
);
}
virtual
~
CascadeDetectorAdapter
()
{}
{
LOGD
(
"CascadeDetectorAdapter::Detect::~Detect"
);
}
private
:
CascadeDetectorAdapter
();
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
(
JNIEnv
*
jenv
,
jclass
,
jstring
jFileName
,
jint
faceSize
)
{
...
...
@@ -48,13 +72,18 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
string
stdFileName
(
jnamestr
);
jlong
result
=
0
;
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeCreateObject"
);
try
{
// TODO: Reimplement using adapter
// DetectionBasedTracker::Parameters DetectorParams;
// if (faceSize > 0)
// DetectorParams.minObjectSize = faceSize;
// result = (jlong)new DetectionBasedTracker(stdFileName, DetectorParams);
cv
::
Ptr
<
CascadeDetectorAdapter
>
mainDetector
=
new
CascadeDetectorAdapter
(
new
CascadeClassifier
(
stdFileName
));
cv
::
Ptr
<
CascadeDetectorAdapter
>
trackingDetector
=
new
CascadeDetectorAdapter
(
new
CascadeClassifier
(
stdFileName
));
result
=
(
jlong
)
new
DetectorAgregator
(
mainDetector
,
trackingDetector
);
if
(
faceSize
>
0
)
{
mainDetector
->
setMinObjectSize
(
Size
(
faceSize
,
faceSize
));
//trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
}
}
catch
(
cv
::
Exception
e
)
{
...
...
@@ -68,7 +97,7 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
{
LOGD
(
"nativeCreateObject catched unknown 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
;
}
...
...
@@ -78,10 +107,12 @@ JNIEXPORT jlong JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeC
JNIEXPORT
void
JNICALL
Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDestroyObject"
);
try
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
stop
();
delete
(
Detect
ionBasedTracke
r
*
)
thiz
;
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
stop
();
delete
(
Detect
orAgregato
r
*
)
thiz
;
}
catch
(
cv
::
Exception
e
)
{
...
...
@@ -95,16 +126,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
{
LOGD
(
"nativeDestroyObject catched unknown 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
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStart"
);
try
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
run
();
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
run
();
}
catch
(
cv
::
Exception
e
)
{
...
...
@@ -118,16 +151,18 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
{
LOGD
(
"nativeStart catched unknown 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
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
)
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeStop"
);
try
{
((
Detect
ionBasedTracker
*
)
thiz
)
->
stop
();
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
stop
();
}
catch
(
cv
::
Exception
e
)
{
...
...
@@ -141,21 +176,21 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSt
{
LOGD
(
"nativeStop catched unknown 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
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jint
faceSize
)
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSetFaceSize -- BEGIN"
);
try
{
if
(
faceSize
>
0
)
{
// TODO: Reimplement using adapter
// DetectionBasedTracker::Parameters DetectorParams = ((DetectionBasedTracker*)thiz)->getParameters();
// DetectorParams.minObjectSize = faceSize;
// ((DetectionBasedTracker*)thiz)->setParameters(DetectorParams);
((
DetectorAgregator
*
)
thiz
)
->
mainDetector
->
setMinObjectSize
(
Size
(
faceSize
,
faceSize
));
//((DetectorAgregator*)thiz)->trackingDetector->setMinObjectSize(Size(faceSize, faceSize));
}
}
catch
(
cv
::
Exception
e
)
...
...
@@ -170,19 +205,22 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeSe
{
LOGD
(
"nativeSetFaceSize catched unknown 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
(
JNIEnv
*
jenv
,
jclass
,
jlong
thiz
,
jlong
imageGray
,
jlong
faces
)
{
LOGD
(
"Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDetect"
);
try
{
vector
<
Rect
>
RectFaces
;
((
Detect
ionBasedTracker
*
)
thiz
)
->
process
(
*
((
Mat
*
)
imageGray
));
((
Detect
ionBasedTracker
*
)
thiz
)
->
getObjects
(
RectFaces
);
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
process
(
*
((
Mat
*
)
imageGray
));
((
Detect
orAgregator
*
)
thiz
)
->
tracker
->
getObjects
(
RectFaces
);
*
((
Mat
*
)
faces
)
=
Mat
(
RectFaces
,
true
);
}
catch
(
cv
::
Exception
e
)
...
...
@@ -197,6 +235,7 @@ JNIEXPORT void JNICALL Java_org_opencv_samples_fd_DetectionBasedTracker_nativeDe
{
LOGD
(
"nativeDetect catched unknown 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
{
public
DetectionBasedTracker
(
String
cascadeName
,
int
minFaceSize
)
{
mMainDetector
=
nativeCreateDetector
(
cascadeName
,
minFaceSize
);
mTrackingDetector
=
nativeCreateDetector
(
cascadeName
,
minFaceSize
);
mNativeObj
=
nativeCreateTracker
(
mMainDetector
,
mTrackingDetector
);
mNativeObj
=
nativeCreateObject
(
cascadeName
,
minFaceSize
);
}
public
void
start
()
...
...
@@ -24,8 +22,7 @@ public class DetectionBasedTracker
public
void
setMinFaceSize
(
int
size
)
{
nativeSetFaceSize
(
mMainDetector
,
size
);
nativeSetFaceSize
(
mTrackingDetector
,
size
);
nativeSetFaceSize
(
mNativeObj
,
size
);
}
public
void
detect
(
Mat
imageGray
,
MatOfRect
faces
)
...
...
@@ -35,29 +32,21 @@ public class DetectionBasedTracker
public
void
release
()
{
nativeDestroyTracker
(
mNativeObj
);
nativeDestroyDetector
(
mMainDetector
);
nativeDestroyDetector
(
mTrackingDetector
);
nativeDestroyObject
(
mNativeObj
);
mNativeObj
=
0
;
mMainDetector
=
0
;
mTrackingDetector
=
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
nativeCreateTracker
(
long
mainDetector
,
long
trackingDetector
);
private
static
native
void
nativeDestroyTracker
(
long
tracker
);
private
static
native
void
nativeDestroyDetector
(
long
detector
);
private
static
native
long
nativeCreateObject
(
String
cascadeName
,
int
minFaceSize
);
private
static
native
void
nativeDestroyObject
(
long
thiz
);
private
static
native
void
nativeStart
(
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
);
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