在类的最前面添加了引入opencv库的代码
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
detect方法
public static void detect(String imagePath,String savePath,int length){
System.out.println("libraryName:"+Core.NATIVE_LIBRARY_NAME);
// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中
CascadeClassifier faceDetector = new CascadeClassifier("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt2.xml");
Mat image = Imgcodecs.imread(imagePath);
// 在图片中检测人脸
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
Rect[] rects = faceDetections.toArray();
for(int i = 0 ; i < rects.length ; i++){
Rect rect = rects[i];
Mat sub = image.submat(rect);//Mat sub = new Mat(image,rect);
Mat mat = new Mat();
Size size = new Size(300, 300);
Imgproc.resize(sub, mat, size);//将人脸进行截图并保存
//截图
File tempFile =new File( imagePath.trim());
String fileName = tempFile.getName();
System.out.println("filename:"+fileName);
Imgcodecs.imwrite(savePath+"//"+fileName+length+".jpg", mat);
++length;
}
}
main方法中调用detect方法运行ok
``` public static void main(String[] args) {
ArrayList<File> file = null; //源文件
try {
file = FileUtil.getFiles("C:\\image");
for(File files:file){
ArrayList<File> filess = FileUtil.getFiles("C:\\imageTemp") ;//保存路径
detect(files.getPath(), "C:\\imageTemp", filess.size());
}
} catch (Exception e) {
e.printStackTrace();
}
}
监听文件夹服务调用报错
ArrayList<File> filess = FileUtil.getFiles("C:\\imageTemp") ;//保存路径
detect(path, "C:\\imageTemp", filess.size());
ArrayList<File> files = FileUtil.getFiles("C:\\imageTemp");
ArrayList<String> tempFaceList=new ArrayList<>();
报错内容:
Exception in thread "Thread-38" java.lang.UnsatisfiedLinkError: org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0(Ljava/lang/String;)J
at org.opencv.objdetect.CascadeClassifier.CascadeClassifier_0(Native Method)
at org.opencv.objdetect.CascadeClassifier.<init>(CascadeClassifier.java:39)
at com.kefo.receive.facerecognize.adaptor.FileListener.detect(FileListener.java:54)
at com.kefo.receive.facerecognize.adaptor.FileListener.onFileCreate(FileListener.java:120)
at org.apache.commons.io.monitor.FileAlterationObserver.doCreate(FileAlterationObserver.java:389)
at org.apache.commons.io.monitor.FileAlterationObserver.checkAndNotify(FileAlterationObserver.java:329)
at org.apache.commons.io.monitor.FileAlterationObserver.checkAndNotify(FileAlterationObserver.java:303)
at org.apache.commons.io.monitor.FileAlterationMonitor.run(FileAlterationMonitor.java:183)
at java.lang.Thread.run(Thread.java:748)
控制台一直都可以输出libraryName:opencv_java349,library中已经导入opencv的jar包,dll文件调用也没问题,但是在文件监听的方法里调用opencv的检测人脸服务不通过,有大神能帮忙解答一下吗?