我正在准备一个关于人脸识别的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”的路径
我不知道我在做什么。
答案 0 :(得分:1)
如何解决java.lang.UnsatisfiedLinkError
用户应检查 -
System.loadLibrary传递的参数不正确:
Windows:要加载Name.dll,将Name传递给loadLibrary方法。
AIX,HP-UX,Solaris,Linux:要加载libName.so或libName.a,请传递libName 到loadLibrary方法
已加载本机库 -
如果本机库已由应用程序加载并且相同 应用程序尝试再次加载它,这可能会导致此错误。
参考:Debugging java.lang.UnsatisfiedLinkError
在你的情况下, 1)检查你的servlet(可能在不同的包中)是否可以访问\ TrendFaceRecognizer \ src \ java \ data
中的dll2)而不是System.loadLibrary(“opencv_java247”)尝试使用System.load(“opencv_java247”)。看来loadLibrary使用默认路径并且load将使用绝对路径