diff --git a/samples/android/face-detection/jni/Android.mk b/samples/android/face-detection/jni/Android.mk index 9f484666f..190baf305 100644 --- a/samples/android/face-detection/jni/Android.mk +++ b/samples/android/face-detection/jni/Android.mk @@ -16,6 +16,6 @@ LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp LOCAL_C_INCLUDES += $(LOCAL_PATH) LOCAL_LDLIBS += -llog -ldl -LOCAL_MODULE := detection_based_tacker +LOCAL_MODULE := detection_based_tracker include $(BUILD_SHARED_LIBRARY) \ No newline at end of file diff --git a/samples/android/face-detection/src/org/opencv/samples/fd/FdActivity.java b/samples/android/face-detection/src/org/opencv/samples/fd/FdActivity.java index efe5daa98..5494000bb 100644 --- a/samples/android/face-detection/src/org/opencv/samples/fd/FdActivity.java +++ b/samples/android/face-detection/src/org/opencv/samples/fd/FdActivity.java @@ -1,5 +1,9 @@ package org.opencv.samples.fd; +import org.opencv.android.BaseLoaderCallback; +import org.opencv.android.LoaderCallbackInterface; +import org.opencv.android.OpenCVLoader; + import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; @@ -18,8 +22,47 @@ public class FdActivity extends Activity { private MenuItem mItemFace20; private MenuItem mItemType; - private FdView mView; + private FdView mView; + private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) { + @Override + public void onManagerConnected(int status) { + switch (status) { + case LoaderCallbackInterface.SUCCESS: + { + Log.i(TAG, "OpenCV loaded successfully"); + + // Load native libs after OpenCV initialization + System.loadLibrary("detection_based_tracker"); + + // Create and set View + mView = new FdView(mAppContext); + mView.setDetectorType(mDetectorType); + mView.setMinFaceSize(0.2f); + setContentView(mView); + // Check native OpenCV camera + if( !mView.openCamera() ) { + AlertDialog ad = new AlertDialog.Builder(mAppContext).create(); + ad.setCancelable(false); // This blocks the 'BACK' button + ad.setMessage("Fatal error: can't open camera!"); + ad.setButton("OK", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + finish(); + } + }); + ad.show(); + } + } break; + default: + { + super.onManagerConnected(status); + } break; + } + } + }; + + private int mDetectorType = 0; private String[] mDetectorName; @@ -30,18 +73,19 @@ public class FdActivity extends Activity { mDetectorName[FdView.NATIVE_DETECTOR] = "Native (tracking)"; } - @Override + @Override protected void onPause() { Log.i(TAG, "onPause"); super.onPause(); - mView.releaseCamera(); + if (mView != null) + mView.releaseCamera(); } @Override protected void onResume() { Log.i(TAG, "onResume"); super.onResume(); - if( !mView.openCamera() ) { + if( mView != null && !mView.openCamera() ) { AlertDialog ad = new AlertDialog.Builder(this).create(); ad.setCancelable(false); // This blocks the 'BACK' button ad.setMessage("Fatal error: can't open camera!"); @@ -61,10 +105,13 @@ public class FdActivity extends Activity { Log.i(TAG, "onCreate"); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); - mView = new FdView(this); - mView.setDetectorType(mDetectorType); - mView.setMinFaceSize(0.2f); - setContentView(mView); + + Log.i(TAG, "Trying to load OpenCV library"); + if (!OpenCVLoader.initAsync(OpenCVLoader.OPEN_CV_VERSION_2_4_0, this, mOpenCVCallBack)) + { + Log.e(TAG, "Cannot connect to OpenCV Manager"); + finish(); + } } @Override