1414using namespace std ;
1515using namespace cv ;
1616
17- #define AppTag " OCV-FD::Activity"
17+
18+ #define LOG_TAG " OCV-Native"
19+ #define LOGI (...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
20+ #define LOGE (...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)
21+
22+
1823
1924extern " C"
2025{
2126
27+ /*
28+ inline void vector_Rect_to_Mat(vector<Rect>& v_rect, Mat& mat)
29+ {
30+ mat = Mat(v_rect, true);
31+ }
32+ */
2233
23- void detect (Mat &gray) {
34+ inline void vector_Rect_to_Mat (std::vector<Rect>& v_rect, Mat& mat)
35+ {
36+ mat = Mat (v_rect, true );
37+ }
2438
25- String face_cascade_name = " /sdcard/Download/haarcascade_frontalface_default.xml" ;
2639
27- CascadeClassifier face_cascade;
28- std::vector<Rect> faces;
40+ CascadeClassifier face_cascade;
2941
30- if ( !face_cascade.load ( face_cascade_name ) ){
31- printf (" --(!)Error loading\n " );
32- __android_log_print (ANDROID_LOG_DEBUG, AppTag, " Resources NOT found: exiting" );
33- return ;
34- }
42+ vector<Rect> detect (Mat &gray) {
3543
36- face_cascade.detectMultiScale (gray,faces,1.1 ,3 ,0 ,Size (20 ,20 ),Size (1000 ,1000 ));
44+ std::vector<Rect> faces = {};
45+ face_cascade.detectMultiScale (gray, faces, 1.1 , 3 , 0 , Size (20 , 20 ), Size (1000 , 1000 ));
3746
38- for ( size_t i= 0 ; i<faces. size (); i++)
39- {
40- rectangle (gray,faces[i],cv::Scalar (255 , 255 , 255 ), 2 , 8 , 0 );
47+ /*
48+ for (size_t i = 0; i < faces.size(); i++) {
49+ rectangle(gray, faces[i], cv::Scalar(255, 255, 255), 2, 8, 0);
4150 }
51+ */
52+ return faces;
4253}
4354
4455
45- void JNICALL
46- Java_ch_hepia_iti_opencvnativeandroidstudio_MainActivity_imgProcess (JNIEnv *env, jclass,
47- jlong inputAddrMat,
48- jlong imageAddrGray) {
49- Mat &mRgb = *(Mat *)inputAddrMat;
50- Mat &mGray = *(Mat *)imageAddrGray;
5156
52- detect (mGray );
57+ JNIEXPORT void JNICALL
58+ Java_org_opencv_android_facetracker_HaarDetector_loadResources (
59+ JNIEnv *env, jobject instance)
60+ {
61+ String face_cascade_name = " /sdcard/Download/haarcascade_frontalface_default.xml" ;
62+
63+ if (!face_cascade.load (face_cascade_name)) {
64+ LOGE (" OCV resources NOT loaded" );
65+ return ;
66+ } else {
67+ LOGI (" OCV resources loaded" );
68+ }
5369}
5470
71+
72+ JNIEXPORT void JNICALL
73+ Java_org_opencv_android_facetracker_HaarDetector_OpenCVdetector (JNIEnv *env, jclass instance,
74+ jlong inputAddrMat, jlong matRects) {
75+
76+ vector<Rect> faces;
77+
78+
79+ Mat &origImg = *((Mat *)inputAddrMat);
80+ Mat mGray ;
81+ cv::cvtColor (origImg, mGray , CV_BGR2GRAY);
82+
83+ faces = detect (mGray );
84+ // faces = detect(origImg);
85+
86+ vector_Rect_to_Mat (faces, *((Mat*)matRects));
5587}
88+ }
89+
90+ // inline void Mat_to_vector_Rect (Mat &mat, vector <Rect> &v_rect);
91+ // ((Mat*)matRect) = Mat(faces, true);
0 commit comments