未解决的FaceRecognizer类的java.lang.UnsatisfiedLinkError

时间:2017-03-29 06:24:16

标签: java opencv face-recognition

早上好!

我正在使用java进行人脸识别项目,但我在FaceRecognizer类上遇到了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.compa.opencv.nativec.FisherFaceRecognizerID.createFisherFaceRecognizer_1()J
    at com.compa.opencv.nativec.FisherFaceRecognizerID.createFisherFaceRecognizer_1(Native Method)
    at com.compa.opencv.nativec.FisherFaceRecognizerID.<init>(FisherFaceRecognizerID.java:15)
    at com.compa.opencv.PlayMain.createRecognizer(PlayMain.java:128)
    at com.compa.opencv.PlayMain.cameraRecognize(PlayMain.java:88)
    at com.compa.opencv.PlayMain.main(PlayMain.java:33)

我已尝试过以下链接中的解决方案,但它不起作用:s

Getting 'java.lang.UnsatisfiedLinkError': no lwjgl in java.library.path

Exception in thread "main" java.lang.UnsatisfiedLinkError: no openalprjni in java.library.path

Exception in thread "main" java.lang.UnsatisfiedLinkError"

以下是包含错误的代码部分:

package com.compa.opencv.nativec;

import org.opencv.contrib.FaceRecognizer;

public class FisherFaceRecognizerID extends FaceRecognizer{

    private static native long createFisherFaceRecognizer_1();

    private static native long createFisherFaceRecognizer_1(int num_components);

    private static native long createFisherFaceRecognizer_2(int num_components,
            double threshold);

    public FisherFaceRecognizerID() {
        super(createFisherFaceRecognizer_1());
    }

    public FisherFaceRecognizerID(int num_components) {
        super(createFisherFaceRecognizer_1(num_components));
    }

    public FisherFaceRecognizerID(int num_components, double threshold) {
        super(createFisherFaceRecognizer_2(num_components, threshold));
    }

}

此处的完整代码:https://www.dropbox.com/s/pa415f6lz3zbco7/DemoFaceRecognize-master%20%282%29.zip?dl=0

如果有任何帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

在我看来,您正在使用依赖于原生二进制文件的第三方人脸识别库。

您必须在类路径中添加这些原生二进制文件,例如(* .dll文件在windows中,或* .so在unix或linux中)

UnsatisfiedLinkError - 通常表示无法找到本机二进制文件的Java本机接口(JNI)调用。

以下是eclipse的截图,您可以在其中看到源中的本机库,您可以单击“编辑”并选择DLL或其他文件所在的文件夹。 Here is a screen on eclipse project properties

答案 1 :(得分:0)

这是我找到的临时解决方案:

在主java文件中右键单击 - &gt;属性 - &gt;运行/调试设置 - &gt;选择主java文件,然后单击编辑 - &gt;参数 - &gt;在VM参数字段中输入以下内容:

-Djava.library.path="C:\Program Files\Java\opencv2.4.13\build\java\x64; C:\Program Files\Java\opencv2.4.13\build\x64\vc12\bin" 

这将指向dll文件的路径,但不幸的是它并没有与我合作:(

有没有人有任何不同的建议?