194 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include <DetectionBasedTracker_jni.h>
 | |
| #include <opencv2/core/core.hpp>
 | |
| #include <opencv2/contrib/detection_based_tracker.hpp>
 | |
| 
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| #include <android/log.h>
 | |
| 
 | |
| #define LOG_TAG "FaceDetection/DetectionBasedTracker"
 | |
| #define LOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__))
 | |
| 
 | |
| using namespace std;
 | |
| using namespace cv;
 | |
| 
 | |
| inline void vector_Rect_to_Mat(vector<Rect>& v_rect, Mat& mat)
 | |
| {
 | |
|     mat = Mat(v_rect, true);
 | |
| }
 | |
| 
 | |
| JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
 | |
| (JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject enter");
 | |
|     const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL);
 | |
|     string stdFileName(jnamestr);
 | |
|     jlong result = 0;
 | |
| 
 | |
|     try
 | |
|     {
 | |
|         DetectionBasedTracker::Parameters DetectorParams;
 | |
|         if (faceSize > 0)
 | |
|             DetectorParams.minObjectSize = faceSize;
 | |
|         result = (jlong)new DetectionBasedTracker(stdFileName, DetectorParams);
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeCreateObject caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeCreateObject caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code of DetectionBasedTracker.nativeCreateObject()");
 | |
|         return 0;
 | |
|     }
 | |
| 
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject exit");
 | |
|     return result;
 | |
| }
 | |
| 
 | |
| JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject
 | |
| (JNIEnv * jenv, jclass, jlong thiz)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject enter");
 | |
|     try
 | |
|     {
 | |
|         if(thiz != 0)
 | |
|         {
 | |
|             ((DetectionBasedTracker*)thiz)->stop();
 | |
|             delete (DetectionBasedTracker*)thiz;
 | |
|         }
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeestroyObject caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeDestroyObject caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code of DetectionBasedTracker.nativeDestroyObject()");
 | |
|     }
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDestroyObject exit");
 | |
| }
 | |
| 
 | |
| JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart
 | |
| (JNIEnv * jenv, jclass, jlong thiz)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart enter");
 | |
|     try
 | |
|     {
 | |
|         ((DetectionBasedTracker*)thiz)->run();
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeStart caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeStart caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code of DetectionBasedTracker.nativeStart()");
 | |
|     }
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStart exit");
 | |
| }
 | |
| 
 | |
| JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop
 | |
| (JNIEnv * jenv, jclass, jlong thiz)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop enter");
 | |
|     try
 | |
|     {
 | |
|         ((DetectionBasedTracker*)thiz)->stop();
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeStop caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeStop caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code of DetectionBasedTracker.nativeStop()");
 | |
|     }
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeStop exit");
 | |
| }
 | |
| 
 | |
| JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize
 | |
| (JNIEnv * jenv, jclass, jlong thiz, jint faceSize)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize enter");
 | |
|     try
 | |
|     {
 | |
|         if (faceSize > 0)
 | |
|         {
 | |
|             DetectionBasedTracker::Parameters DetectorParams = \
 | |
|             ((DetectionBasedTracker*)thiz)->getParameters();
 | |
|             DetectorParams.minObjectSize = faceSize;
 | |
|             ((DetectionBasedTracker*)thiz)->setParameters(DetectorParams);
 | |
|         }
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeStop caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeSetFaceSize caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code of DetectionBasedTracker.nativeSetFaceSize()");
 | |
|     }
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeSetFaceSize exit");
 | |
| }
 | |
| 
 | |
| 
 | |
| JNIEXPORT void JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect
 | |
| (JNIEnv * jenv, jclass, jlong thiz, jlong imageGray, jlong faces)
 | |
| {
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect enter");
 | |
|     try
 | |
|     {
 | |
|         vector<Rect> RectFaces;
 | |
|         ((DetectionBasedTracker*)thiz)->process(*((Mat*)imageGray));
 | |
|         ((DetectionBasedTracker*)thiz)->getObjects(RectFaces);
 | |
|         vector_Rect_to_Mat(RectFaces, *((Mat*)faces));
 | |
|     }
 | |
|     catch(cv::Exception& e)
 | |
|     {
 | |
|         LOGD("nativeCreateObject caught cv::Exception: %s", e.what());
 | |
|         jclass je = jenv->FindClass("org/opencv/core/CvException");
 | |
|         if(!je)
 | |
|             je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, e.what());
 | |
|     }
 | |
|     catch (...)
 | |
|     {
 | |
|         LOGD("nativeDetect caught unknown exception");
 | |
|         jclass je = jenv->FindClass("java/lang/Exception");
 | |
|         jenv->ThrowNew(je, "Unknown exception in JNI code DetectionBasedTracker.nativeDetect()");
 | |
|     }
 | |
|     LOGD("Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeDetect exit");
 | |
| }
 | 
