4

我正在尝试通过网络摄像头进行人脸检测,但出现错误,级联分类器错误。

经过一些测试,我发现这行代码会产生错误

CascadeClassifier face_cascade = new CascadeClassifier();

我得到的错误是

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0()J
    at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0(Native Method)
    at org.opencv.objdetect.CascadeClassifier.<init>(CascadeClassifier.java:38)
    at CamCapture.main(CamCapture.java:24)

有人知道如何解决这个问题吗?


4

2 回答 2

9

终于找到答案了

我应该在使用级联分类器之前加载库。所以只要把这段代码

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

在级联分类器之前。

于 2013-05-11T22:58:56.517 回答
1

尝试在 BaseLoaderCallBack 中初始化 CascadeClassifier 对象。OpenCV 需要在初始化 CasCadeClassifier 对象之前完全加载。

将其放在 onCreate() 或 onResume() 中:

if (!OpenCVLoader.initDebug())
    OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, baseCallBack);
else
    baseCallBack.onManagerConnected(LoaderCallbackInterface.SUCCESS);

将 baseCallBack 定义为:

private BaseLoaderCallback baseCallBack = new BaseLoaderCallback(this) {
    @Override
    public void onManagerConnected(int status) {
        if (status == SUCCESS) {
            try {
                initClassifiers(); // initialise here
            } catch (IOException e) {
                e.printStackTrace();
            }
            Log.d("OpenCVLoad", "OpenCV Loaded");
        } else {
            super.onManagerConnected(status);
        }
    }
};
于 2020-12-17T17:30:09.840 回答