zoukankan      html  css  js  c++  java
  • 【java】人脸识别 虹软ArcFace 2.0-抽取人脸特征并做比对

    虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html
    虹软ArcFace功能简介

    人脸检测
    人脸跟踪
    人脸属性检测(性别、年龄)
    人脸三维角度检测
    人脸对比
    本文使用到的SDK为本人自己使用JNA做的封装,2.0的使用比1.x的版本使用更方便,api更集中更科学

    人脸识别:

    人脸特征值抽取
    人脸特征值比对获得相似度介于 0.0~1.0之间
    【相似度越接近1.0两个人脸特征数据越有可能是一个人】
    
    

    人脸特征值抽取的步骤:

    1,对图片或者视频流中的人脸位置进行识别
    2,对人脸特征值进行抽取(里面算法比较专业,我们就知道有这么回事就行)
    3,保存人脸特征值入特征库
    
    

    此处的demo,仅仅为了演示,直接进行两张图的特征抽取,并进行比对
    素材,两张“朱莉”的照片

    首先,编写抽取人脸特征值的代码,此处需要注意最后一行代码,返回的时候去new 了一个新的FaceFeature,此处的目的是对FaceFeature做深度copy,因为虹软对内存做了一些优化,FaceFeature的内存会被重复使用,如果不做深度copy,反复调用该方法,FaceFeature中的特征数据会被覆盖

    	/**
    	 * 
    	 * @param ins  FaceEngine ins = FaceEngine.INSTANCE
    	 * @param hEngine  初始化之後的引擎實例
    	 * @param imgPath  圖片路徑
    	 * @return 人臉特征
    	 */
    	public static FaceFeature getFeature(FaceEngine ins,Pointer hEngine,String imgPath) {
    		IplImage img = cvLoadImage(imgPath);
    		MultiFaceInfo  detectedFaces = new MultiFaceInfo();
    		BytePointer bp = img.arrayData();
    		 byte[] imgData = new byte[img.arraySize()];
    		 bp.get(imgData);
    		 ins.ASFDetectFaces(hEngine, img.width(), img.height(), ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8,imgData, detectedFaces);
    		 SingleFaceInfo faceInfo = new SingleFaceInfo();
    		 faceInfo.faceRect = detectedFaces.getFaceRects()[0];
    		 faceInfo.faceOrient = detectedFaces.getFaceOriends()[0];
    		 FaceFeature feature = new FaceFeature();
    		 ins.ASFFaceFeatureExtract(hEngine, img.width(), img.height(), ASVL_COLOR_FORMAT.ASVL_PAF_RGB24_B8G8R8, imgData, faceInfo, feature);
    		 
    		 return new FaceFeature(feature.getFeatureData());
    	}
    
    

    有了人脸特征抽取的方法,我们再做人脸比对就很容易了,代码就几行:

    FaceFeature feature1 = FeatureExtractTest.getFeature(ins,hEngine, "zl1.jpg"); FaceFeature feature2 = FeatureExtractTest.getFeature(ins,hEngine, "zl3.jpg");
    		 
    FloatByReference confidenceLevel = new FloatByReference();
    ins.ASFFaceFeatureCompare(hEngine, feature1, feature2, confidenceLevel);
    System.out.println(confidenceLevel.getValue());
    
    

    执行后,获得两张图片的人脸相似度值为

    0.9412362
    
    

    一般只要相似度超过0.8,就可以认为是一个人。这两张照片中人脸的相似度高达0.94,应该确定是一个人!!!!

    使用已经封装好的SDK进行人脸识别

    https://www.jianshu.com/p/96636db03792

    使用已经封装好的SDK进行人脸识别【人脸特征提取比对】

    https://www.jianshu.com/p/ab64464571da

    虹软ArcFace 2.0,java SDK使用、人脸信息识别(年龄、性别)

    https://www.jianshu.com/p/cfe90f82be97

  • 相关阅读:
    IDEA git 切换分支
    java: Compilation failed: internal java compiler error
    平衡二叉树的定义
    flask的session问题以及闪现
    flask的自定义转换器,模板渲染以及请求与响应
    flask的简介:如何启动一个flask项目,flask(返回字符串,返回html,跳转路由,返回json),flask的配置文件,路由本质以及参数
    小程序的支付流程
    小程序后端如何解析wx.getUserInfo中的用户信息
    python3.6下载Crypto问题(转载)
    小程序的登入问题,普通权限认证和特殊权限的问题
  • 原文地址:https://www.cnblogs.com/KEAIILINN/p/10761921.html
Copyright © 2011-2022 走看看