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

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

通过搜索,目前发现,开源或免费支持离线的方案也有不少。目前初步考虑虹软 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更适合于手机端平台。

转载于:https://my.oschina.net/u/4086500/blog/3028110

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目介绍】 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如人工智能、通信工程、自动化、件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。如果基础还行,可以在此代码基础之上做改动以实现更多功能。 人脸识别考勤系统 本项目是一个基于 Python 的人脸识别考勤系统,主要使用了 `dlib`、`opencv`、`tkinter`、`PIL`、`pymysql` 等库,并使用了 KNN 算法进行人脸识别。 环境安装 在运行本项目之前,请确保已经安装了以下环境和库: - Python - PyCharm - dlib(需要 Cmake、Visual Basic、C++ 依赖环境) - opencv 库 - tkinter 库 - pymysql - PIL - threading - time 功能介绍 本项目具有以下功能: - 打开系统按钮:打开摄像头捕获人脸。 - 注册按钮:将人脸、学号、姓名信息存储到数据库中。 - 查看缺勤名单:将没有识别签到的学生学号和姓名导出到打开的名单界面。 - 是否开始训练:点击“是”按钮进行人脸模型的训练。 - 帮助按钮:查看使用件的注意事项。 注意事项 在使用本项目之前,请注意以下事项: 1. 请先打开系统。 2. 注册时请对准人脸,光线充足。 3. 训练时禁止进行其他操作。 文件说明 本项目包含以下文件: - `recognition.py`:主文件。 - `db.py`:数据库文件。 - `help_tip.py`:帮助窗口文件。 - `precamera.py`:预处理文件。 - `late_name.py`:缺勤名单文件。 - `trained_knn_model.clf`:KNN 算法模型文件。 - `knn_examples` 文件夹:包含了训练集和测试集,仅供学习交流探讨使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值