XiMenChuiXuengls 2020-02-19 17:58 采纳率: 0%
浏览 855

opencv+java项目main方法能够成功运行但是监听文件夹服务调用opencv方法却无法加载CascadeClassifier的问题

在类的最前面添加了引入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的检测人脸服务不通过,有大神能帮忙解答一下吗?

  • 写回答

3条回答

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示