OpenCV无法为动态Web项目加载库

时间:2013-12-31 07:20:43

标签: java opencv servlets

我正在准备一个关于人脸识别的java web项目。我正在使用opencv 2.4.7的java库。当我从servlet调用FaceDetector类时,它会给出错误 -

  

java.lang.UnsatisfiedLinkError:java.library.path中没有opencv_java247       java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)       java.lang.Runtime.loadLibrary0(Runtime.java:849)       java.lang.System.loadLibrary(System.java:1088)       Models.NewFaceDetector(NewFaceDetector.java:24)       Servlets.helloServlet.doPost(helloServlet.java:108)       javax.servlet.http.HttpServlet.service(HttpServlet.java:647)       javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

此代码在控制台java项目中完美运行。 Servlet代码是 -

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    PrintWriter out=response.getWriter();
    Part name=request.getPart("NameBox");
    Part img=request.getPart("Img");
    String filename=getFileName(img);
    InputStream is=img.getInputStream();
    int i=is.available();
    byte[] b=new byte[i];
    is.read(b);
    String path="E:/temp/"+filename;
    FileOutputStream os=new FileOutputStream(path);
     os.write(b);
    os.close();
    is.close();
   FaceDetector fd=new FaceDetector();
    fd.getFaces(path);  
}

我的面部检测器类是 -

public class FaceDetector {

static{ System.loadLibrary("opencv_java247"); }
public List<Mat> getFaces(String url) throws MalformedURLException, IOException
{
    List<Mat>faces=new ArrayList();
    Mat image = Highgui.imread(url);
    //code...
}

我给了打开cv dll- -Djava.library.path =“C:\ Users \ vivek \ Documents \ NetBeansProjects \ TrendFaceRecognizer \ src \ java \ data”的路径

我不知道我在做什么。

1 个答案:

答案 0 :(得分:1)

如何解决java.lang.UnsatisfiedLinkError
用户应检查 -

  • System.loadLibrary传递的参数不正确:

    • Windows:要加载Name.dll,将Name传递给loadLibrary方法。

      AIX,HP-UX,Solaris,Linux:要加载libName.so或libName.a,请传递libName  到loadLibrary方法

  • 已加载本机库 -

    如果本机库已由应用程序加载并且相同   应用程序尝试再次加载它,这可能会导致此错误。

  • java.library.path或
    中不存在本机库 LD_LIBRARY_PATH

参考:Debugging java.lang.UnsatisfiedLinkError

在你的情况下, 1)检查你的servlet(可能在不同的包中)是否可以访问\ TrendFaceRecognizer \ src \ java \ data

中的dll

2)而不是System.loadLibrary(“opencv_java247”)尝试使用System.load(“opencv_java247”)。看来loadLibrary使用默认路径并且load将使用绝对路径