Y0220Y 2023-06-28 14:22
浏览 11
已结题

java+sface进行人脸特征提取

请问有人用java实现过opencv的sface的人脸检测功能吗,java中的alignCrop应该怎样使用。
我本地启动报错如下

img

  • 写回答

1条回答 默认 最新

  • Y0220Y 2023-06-28 14:28
    关注
    
     public static void main(String[] args) {
            // 1.初始化opencv
            initOpenCV();
    
            // 3.读取图片
            Mat imageA = Imgcodecs.imread("C:/Users/y1793/Desktop/1f48e0d3dbb39e3d7e063b321df6c3c.jpg");
            Mat imageB = Imgcodecs.imread("C:/Users/y1793/Desktop/1f48e0d3dbb39e3d7e063b321df6c3c.jpg");
    
            // 人脸识别
            FaceDetectorYN faceDetectorYN = FaceDetectorYN.create("C:/Users/y1793/Downloads/face_detection_yunet_2022mar.onnx", "", new Size(), score_thresh, nms_thresh, top_k);
            Mat faceA = new Mat();
            faceDetectorYN.setInputSize(new Size(imageA.width(), imageA.height()));
            faceDetectorYN.detect(imageA, faceA);
            Mat faceB = new Mat();
            faceDetectorYN.setInputSize(new Size(imageB.width(), imageB.height()));
            faceDetectorYN.detect(imageB, faceB);
    
            // 人脸预处理
            FaceRecognizerSF faceRecognizerSF = FaceRecognizerSF.create("C:/Users/y1793/Downloads/face_recognition_sface_2021dec.onnx", "");
            Mat alignFaceA = new Mat();
            faceRecognizerSF.alignCrop(imageA, faceA, alignFaceA);
            Mat alignFaceB = new Mat();
            faceRecognizerSF.alignCrop(imageB, faceB, alignFaceB);
    
            // 人脸特征提取
            Mat featureA = new Mat();
            faceRecognizerSF.feature(alignFaceA, featureA);
            Mat featureB = new Mat();
            faceRecognizerSF.feature(alignFaceB, featureB);
    
            // 人脸识别
            double match1 = faceRecognizerSF.match(featureA, featureB, FaceRecognizerSF.FR_COSINE);
            double match2 = faceRecognizerSF.match(featureA, featureB, FaceRecognizerSF.FR_NORM_L2);
    
            System.out.println(match1);
            System.out.println(match2);
        }
    
    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 创建了问题 6月28日