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

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 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器