700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java 人脸比对_java ArcFace 2.0 java SDK使用 人脸识别-抽取人脸特征并做比对

java 人脸比对_java ArcFace 2.0 java SDK使用 人脸识别-抽取人脸特征并做比对

时间:2018-08-27 01:35:18

相关推荐

java 人脸比对_java  ArcFace 2.0 java SDK使用 人脸识别-抽取人脸特征并做比对

java人脸识别 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对

人脸检测

人脸跟踪

人脸属性检测(性别、年龄)

人脸三维角度检测

人脸对比

本文使用到的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,应该确定是一个人!!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。