虹软ArcFace人脸识别 与 Dlib 人脸识别对比

摘要:
目前,初步认为虹软ArcFace和Dlib=空)rotImage。release();returndstMat;}Dlib和虹软ArcFace都需要在人脸识别之前检测人脸。否则,如果后续无法提取面部特征,建议将要识别的面部特征库预加载到存储器中,这可以加快速度。使用Dlib进行人脸检测时,应注意。如果面部方向与屏幕方向不一致,则无法检测面部。如果面部方向不一致,当您需要将图片的面部方向与屏幕方向一致时,请进行面部检测。使用Iris ArcFace进行人脸识别时,请注意您下载的滑动SDK和APP _Id、SDK_密钥必须一致。与Dlib相比,虹软ArcFace更适合移动平台。

我司最近要做和人脸识别相关的产品,原来使用的是某在线人脸识别平台,识别率和识别速度很满意,但是随着量起来的话,成本也是越来越不能接受(目前该功能我们是免费给用户使用的),而且一旦我们的设备掉线了就无法使用人脸识别功能。基于这些考虑,我司需要寻找其他的方案。

通过搜索,目前发现,开源或免费支持离线的方案也有不少。目前初步考虑虹软 ArcFace和Dlib。通过官方的demo 和 网上的资料,写了个工程,也可以在这里看。

这里说一下要注意的

摄像头是使用了 OpenCV 来处理的,这里可能会涉及到预览图和屏幕方向不一致的情况,我主要是通过一下代码处理

// 转换图片矩阵 这个也是主要使用 <span style="background-color: rgb(255, 255, 255);">OpenCV 来处理的</span>
private Mat rotateMat(Mat srcMat){
    int _cameraDisplayRotation = cameraDisplayRotation;
    if(mCameraIndex == CAMERA_ID_BACK){ // 后置摄像头
        _cameraDisplayRotation = 180 + _cameraDisplayRotation;
    }
    Point center = new Point(srcMat.cols()/2,srcMat.rows()/2);
    Mat dstMat = srcMat;
    Mat rotImage = Imgproc.getRotationMatrix2D(center, _cameraDisplayRotation, 1); // 获取旋转矩阵 逆时针旋转。参数说明 center:表示旋转的中心点;angle:表示旋转的角度 ;scale:图像缩放因子
    Imgproc.warpAffine(srcMat, dstMat, rotImage, dstMat.size()); // 实现坐标系仿射变换。参数说明 src: 输入源图像;dst: 输出图像;M: 仿射变换矩阵;dsize: 输出图像的尺寸
    if(mCameraIndex == CAMERA_ID_FRONT){
        Core.flip(dstMat,dstMat,1);//整理表示水平翻转,0表示垂直翻转,负数表示既有水平也有垂直翻转
    }
    if(rotImage!=null)rotImage.release();
    return dstMat;
}

Dlib 和虹软 ArcFace要做人脸识别前都需要先检测人脸,要不然后续提取不到人脸特征
人脸特征比对时,建议将需要识别的人脸特征库预先加载到内存,这样可以加快速度(当然也占用比较大的内存)
在使用 Dlib 做人脸检测时要注意,人脸方向和屏幕方向不一致时检测不到人脸(虹软 ArcFace 不存在这个问题),如果不一致,需要将图片的人脸方向转为和屏幕方向一致时再来做人脸检测
虹软 ArcFace 做人脸识别时,要注意你下载的凭条 SDK 与 APP_Id、SDK_key 要一致(这个是没懂要搞这么多验证数据)。库的引用直接安装文档操作即可。
虹软 ArcFace 做人脸识别时,要使用人脸检测时的人脸角度,要不然提取不到人脸特征,可以参考一下代码说明

// data 图片数据 注意数据格式是NV21的,目前虹软只支持这种格式,可以通过摄像头参数设置,也可以通过相关工具转换得到
// width 图片宽
// height 图片高
// AFD_FSDKEngine.CP_PAF_NV21 图片数据格式 目前虹软只支持这种格式
// faceDB 我的人脸特征库
List<AFD_FSDKFace> result_FD = new ArrayList<>(); // 用来存放检测到的人脸信息列表
AFD_FSDKError error_FD = engine_detection.AFD_FSDK_StillImageFaceDetection(data, width, height, AFD_FSDKEngine.CP_PAF_NV21, result_FD); // 检测人脸
AFR_FSDKFace face = new AFR_FSDKFace(); // 用来存放提取到的人脸信息
AFR_FSDKMatching score = new AFR_FSDKMatching(); //score用于存放人脸对比的相似度值
for(int i=0; i < result_FD.size(); i++){
    AFD_FSDKFace item = result_FD.get(i);
    Rect itemRect = item.getRect(); // 人脸位置
    int degree = item.getDegree(); // 人脸方向 这个比 Dlib 好的地方
    AFR_FSDKError error_FR = engine_recognition.AFR_FSDK_ExtractFRFeature(data, width, height, AFR_FSDKEngine.CP_PAF_NV21, itemRect, degree, face); // 提取人脸信息
    error_FR = engine_recognition.AFR_FSDK_FacePairMatching(face, item, score);
    for(int j=0; j<faceDB.getFaceList().size(); j++ ){
        AFR_FSDKFace itemFace = faceDB.getFaceList().get(j);
        error_FR = engine_recognition.AFR_FSDK_FacePairMatching(face, itemFace, score); // 人脸对比
        if(score.getScore() > myThreshold){ // 找到相似的人脸
            。。。
        }
    }
}

测试结果
原图是1280x960,经压缩处理是320x240,经测试发现虹软的压缩和不压缩图片,效果是差不多的

Dlib测试结果
机型 一次人脸检测耗时 一次一个人脸特征提取耗时 一次人脸特征比对耗时
坚果 U1 280毫秒左右 6800毫秒左右 0.03毫秒左右
坚果 pro2 93毫秒左右 1060毫秒左右 0.002毫秒左右

虹软测试结果
机型 一次人脸检测耗时 一次一个人脸特征提取耗时 一次人脸特征比对耗时
坚果 U1 43毫秒左右 943毫秒左右 0.883毫秒左右
坚果 pro2 20毫秒左右 314毫秒左右 0.308毫秒左右

从该测试可以看出 Dlib 和 虹软 ArcFace 的优缺点,两个的性能瓶颈都在人脸特征提取,Dlib尤为突出。相对比Dlib,虹软 ArcFace更适合于手机端平台。

免责声明:文章转载自《虹软ArcFace人脸识别 与 Dlib 人脸识别对比》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux c libcurl的简单使用(转)被hao123劫持主页最佳解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第九节、人脸检测之Haar分类器

人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的研究方向发展起来。 目前人脸检测的方法主要有两大类:基于知识和基于统计。 基于知识的方法:主要利用先验知识将人脸看作器官特征的组合,根据眼睛、眉毛、嘴巴、鼻子等器官的特征以及相互之间的几何位置关系来...

【新品】Face X2人脸识别一体机:新增刷卡、扫码、测温、语音播报等功能

采用高性能硬件配置,高效人脸识别算法,支持身份证、IC卡、二维码、条形码快速识别,内置双声道喇叭,实现语音播报、语音提醒;支持非接触快速测温,减少近距离接触传染,配套完善的后台管理系统,可应用于各种人脸识别智能场景中。 智能芯片,性能强劲 采用六核64位“服务器级”处理器RK3399,芯片性能强悍,主频高达1.8GHz,集成四核Mali-T860 GPU...

基于图像的三维物体重建:在深度学习时代的最新技术和趋势之人脸重建和场景分析

作者:Longway 来源:公众号@3D视觉工坊 链接: 基于图像的三维物体重建:在深度学习时代的最新技术和趋势之人脸重建和场景分析 1.三维人脸重建 基于精细密集图像的人脸三维重建是计算机视觉和计算机图形学中一个长期存在的问题,其目标是恢复人脸的形状、姿态、表情、皮肤反射率和更精细的表面细节。最近,这个问题被描述为一个回归问题,并用卷积神经网络来解决...

虹软Arcface人脸识别demo[Windows]分享

Demo_for_Windows https://github.com/ArcJonSnow/Demo_for_Windows Arcsoft ArcfaceDemo for Windows, VS2013 C++ 使用步骤: 下载SDK包,32位Windows平台将五个SDK包里lib中的文件到 DemolibWin32下;64位Windows平台将五个...

【论文笔记】深度人脸识别综述

论文题目:《Deep Face Recognition: A Survey》 论文作者:Mei Wang, Weihong Deng 论文链接:http://cn.arxiv.org/pdf/1804.06655.pdf 随着2012年AlexNet赢得了ImageNet挑战赛的冠军后,深度学习技术在各个领域都发挥着重要的作用,极大地提升了许多任务的S...

基于Emgu CV+百度人脸识别,实现视频动态 人脸抓取与识别

总目录地址:AI 系列 总目录  需要最新源码,或技术提问,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 背景 目前AI 处于风口浪尖,作为 公司的CTO,也作为自己的技术专研,开始了AI之旅,在朋友圈中也咨询 一些大牛对于AI 机器学习框架的看法,目前自己的研究方向主要开源...