我目前正在开发面部识别的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并且它是一个错误,所以我已经将它改为基于互联网的Imgproc,我已经发现修复了该代码行。
开(CameraBridgeViewBase.java:393)指出:
(line392) if (mListener != null) {
(line393) modified = mListener.onCameraFrame(frame);
On(JavaCameraView.java:346)指出:
(line345) if (!mFrameChain[1 - mChainIdx].empty())
(line346) deliverAndDrawFrame(mCameraFrame[1 - mChainIdx]);
我是Android开发的新手,也是OpenCV的新手:/我感谢您的时间并帮助我考虑帮助我。
提前致谢:)
答案 0 :(得分:5)
昨天我在寻找同一答案的解决方案时看到了这个悬而未决的问题。我找不到符合我情况的答案。事实证明我的解决方案非常简单。我使用的是为OpenCV 2.4编写的示例代码,当我使用OpenCV 3.1时,我不得不从Core.rectangle更改为ImgProc.rectanle。我的代码和包含很好,但我错过了我的异步初始化有错误的版本。我需要将我的初始化更新为正确的版本。
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0,this,mLoaderCallback);
纠正了这个问题。由于您的问题是5个月大,您可能会继续前进,但其他人可能会看到这一点。