使用虹软ArcFoft人脸1:N的检索 java版

1 篇文章 0 订阅
1 篇文章 0 订阅

欢迎大佬提意见

V2版本,把特征值,存到缓存中,然后获取缓存中的数据进行对比,速度超级快,200张对比 毫秒级别

 byte[] b = (byte[]) redisTemplate.opsForValue().get(s);
                if (b != null) {
                    FaceSimilar faceSimilar = new FaceSimilar();
                    FaceFeature faceFeature2 = new FaceFeature();
                    faceFeature2.setFeatureData(b);
                    int compareCode = faceEngine.compareFaceFeature(faceFeature, faceFeature2, faceSimilar);
                    log.info("相似度缓存中对比:" + faceSimilar.getScore() + "图片路径1" + facePath + "图片路径2" + s);
                    if (faceSimilar.getScore() > SCORE) {
                        obj.add(path.get(s));
                    }
                } else {
					//代码省略
					redisTemplate.opsForValue().set(s, faceFeature2.getFeatureData());
				}
/**
     * 对比两个人脸是否为同一人1:N
     *
     * @param facePath 人脸1 路径
     * @param path     人脸N 文件路径:身份证号码
     * @return 相似度大于SCORE就返回True
     */
    public static Object comparisonList(String facePath, Map<String, Object> path) throws Exception {
        FaceEngine faceEngine = faceEngine();
        FaceFeature faceFeature = new FaceFeature();
        ImageInfo imageInfo = null;
        List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
        try {
            if (Base64.isBase64(facePath)) {
                //人脸检测
                imageInfo = getRGBData(Base64.decodeBase64(facePath));
            } else {
                facePath = Global.getDir() + facePath;
                //人脸检测
                imageInfo = getRGBData(new File(facePath));
            }
            faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList);
            System.out.println(faceInfoList);
            //特征提取
            faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList.get(0), faceFeature);
            System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
            faceInfoList.clear();
            imageInfo = null;
        } catch (Exception e) {
            e.printStackTrace();
            throw new Exception("头像解析错误");
        }
        try {
            for (String s : path.keySet()) {
                try {
                    //人脸检测2
                    imageInfo = getRGBData(new File(s));
                } catch (Exception e) {
                    System.out.println("头像不存在");
                    continue;
                }
                if (null != imageInfo) {
                    int detectCode2 = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList);
                    System.out.println(faceInfoList);
                    if (faceInfoList.size() == 0)
                        continue;
                    //特征提取2
                    FaceFeature faceFeature2 = new FaceFeature();
                    int extractCode2 = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList.get(0), faceFeature2);
                    System.out.println("特征值2大小:" + faceFeature2.getFeatureData());
                    //特征比对
                    faceFeature.setFeatureData(faceFeature.getFeatureData());
                    faceFeature2.setFeatureData(faceFeature2.getFeatureData());
                    FaceSimilar faceSimilar = new FaceSimilar();
                    int compareCode = faceEngine.compareFaceFeature(faceFeature, faceFeature2, faceSimilar);
                    System.out.println("相似度:" + faceSimilar.getScore());
                    if (faceSimilar.getScore() > SCORE) {
                        return path.get(s);
                    }
                    faceInfoList.clear();
                    imageInfo = null;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (faceEngine != null) {
                //引擎卸载
                faceEngine.unInit();
            }
        }
        return null;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值