I was trying to build a new app using openCV but my app is crashing with not even a single log statement. Then I integrated Crashlytics into my application and it shows the following issue
Fatal Exception: java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.imgproc.Imgproc.Canny_3(long, long, double, double) (tried Java_org_opencv_imgproc_Imgproc_Canny_13 and Java_org_opencv_imgproc_Imgproc_Canny_13__JJDD)
at org.opencv.imgproc.Imgproc.Canny_3(Imgproc.java)
at org.opencv.imgproc.Imgproc.Canny(Imgproc.java:1038)
at aac.scanner.MainActivity.onCameraFrame(MainActivity.java:72)
at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:392)
at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:352)
at java.lang.Thread.run(Thread.java:818)
I have also checked other answers on SO like Android UnsatisfiedLinkError with OpenCV 2.4.2 or Unsatisfied Link Error - OpenCV for Android Non-native for this problem and but none of them are working for me.
Since my application project doesn’t have a JNI part, so I had copied the corresponding OpenCV native libs from /sdk/native/libs/ to my project directory to folder main/jniLibs as shown in this tutorial
onResume method
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, baseLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
baseLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
onCameraFrame method
rgba = inputFrame.rgba();
Imgproc.GaussianBlur(rgba,gray,new Size(5,5),0);
Imgproc.Canny(gray,canny,75,200);
return canny;
BaseLoaderCallback
private BaseLoaderCallback baseLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status){
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG,"onManagerConnected");
javaCameraView.enableView();
break;
default:
super.onManagerConnected(status);
break;
}
}
};
UPDATE
Since I was getting UnsatisfiedLinkError
from running non Native openCV code and none of the solutions of similar posts on SO was working for me. I have wrote all that code in Native openCV code and now my code is running without any error.