4

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.

Community
  • 1
  • 1
Ayush Chauhan
  • 441
  • 7
  • 25

0 Answers0