我目前正在开发有关人脸识别的Android应用程序。因此,我从github获得了源代码。它使用OpenCv,但是源代码使用OpenCv的旧版本,而我使用的是3.0.0的最新版本。代码上没有错误,并且可以成功打开应用程序,但是当我指向某人的脸时,它突然停止工作。

它给了我这样的错误:

 Process: com.example.syafiq.test, PID: 3249
 java.lang.UnsatisfiedLinkError: Native method not found: org.opencv.imgproc.Imgproc.rectangle_1:(JDDDDDDDDI)V
     at org.opencv.imgproc.Imgproc.rectangle_1(Native Method)
     at org.opencv.imgproc.Imgproc.rectangle(Imgproc.java:2779)
     at com.example.syafiq.test.FdActivity.onCameraFrame(FdActivity.java:431)
     at org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:393)
     at org.opencv.android.JavaCameraView$CameraWorker.run(JavaCameraView.java:346)
     at java.lang.Thread.run(Thread.java:841)

(Imgproc.java:2779)指向此处:
rectangle_1(img.nativeObj, pt1.x, pt1.y, pt2.x, pt2.y, color.val[0], color.val[1], color.val[2], color.val[3], thickness);

(FdActivity.java:431)指向此处:
 (line430) for (int i = 0; i < facesArray.length; i++)
 (line431) Imgproc.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3);

在此之前,(FdActivity.java:431)上的源代码是Core.rectangle,这是一个错误,因此我已根据我发现的用于修复该代码行的Internet将其更改为Imgproc。

在(CameraBridgeViewBase.java:393)上指向此处:
(line392) if (mListener != null) {
(line393) modified = mListener.onCameraFrame(frame);

在(JavaCameraView.java:346)上指向此处:
(line345) if (!mFrameChain[1 - mChainIdx].empty())
(line346) deliverAndDrawFrame(mCameraFrame[1 - mChainIdx]);

我是android开发的新手,也是OpenCV的新手:/感谢您的宝贵时间,并考虑帮助我。

提前致谢 :)

最佳答案

昨天,我在寻找相同答案的解决方案时看到了这个未解决的问题。我找不到适合我情况的答案。事实证明,我的解决方案非常简单。我使用的是为OpenCV 2.4编写的示例代码,当我使用OpenCV 3.1时,必须从Core.rectangle更改为ImgProc.rectanle。我的代码和包含的代码很好,但是我错过的是我的异步初始化版本错误。我需要将初始化版本更新为正确的版本。

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0,this,mLoaderCallback);

那解决了问题。由于您的问题已有5个月了,您可能会继续前进,但其他人可能会看到这一点。

关于android - java.lang.UnsatisfiedLinkError:找不到 native 方法:org.opencv.imgproc.Imgproc.rectangle_1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34452708/

10-09 10:05