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毫秒左右 |
ArcFace虹软与Dlib人脸识别对比的更多相关文章
- [深度应用]·实战掌握Dlib人脸识别开发教程
[深度应用]·实战掌握Dlib人脸识别开发教程 个人网站--> http://www.yansongsong.cn/ 项目GitHub地址--> https://github.com/xi ...
- [深度学习工具]·极简安装Dlib人脸识别库
[深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包 ...
- arcface和Dlib人脸识别算法对比
我司最近要做和人脸识别相关的产品,原来使用的是其他的在线平台,识别率和识别速度很满意,但是随着量起来的话,成本也是越来越不能接受(目前该功能我们是免费给用户使用的),而且一旦我们的设备掉线了就无法使用 ...
- 基于Arcface Android平台的人脸识别实现
效果图 先上效果,让大家看看如何 现在有很多人脸识别的技术我们可以拿来使用:但是个人认为还是离线端的SDK比较实用:所以个人一直在搜集人脸识别的SDK:原来使用开源的OpenCV:最近有个好友推荐虹软 ...
- Android 用虹软SDK做人脸识别
人脸识别第三方sdk比较多,但是大多都是收费的或者限制次数什么的,虹软的效果还不错,全免费也不需要联网 V1.2版本使用和快速集成:https://www.jianshu.com/p/8dee89ec ...
- 【C#】 基于ArcFace 2.0—视频人脸识别Demo
使用的虹软人脸识别技术 啥话不说,不用跪求,直接给下载地址:http://common.tenzont.com/comdll/arcface2demo.zip(话说附件的大小不限制,还是说我的文件太大 ...
- OpenCV 和 Dlib 人脸识别基础
00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...
- python3+dlib人脸识别及情绪分析
一.介绍 我想做的是基于人脸识别的表情(情绪)分析.看到网上也是有很多的开源库提供使用,为开发提供了很大的方便.我选择目前用的比较多的dlib库进行人脸识别与特征标定.使用python也缩短了开发周期 ...
- C# 虹软SDK视频人脸识别和注册
一,准备工作 1.Afoge视频参数类 using AForge.Video.DirectShow; using System; using System.Collections.Generic; u ...
随机推荐
- Websocket实现即时通讯
前言 关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作.直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈 ...
- vue中实现动态切换不同的值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Oracle数据库备份及还原
Oracle数据库备份 1:找到Oracle安装路径我的就是默认C盘 C:\app\wdjqc\admin\orcl\adump 2:执行文件:back.bat 文件内容如下: @echo off ...
- [Swift]LeetCode658. 找到 K 个最接近的元素 | Find K Closest Elements
Given a sorted array, two integers k and x, find the kclosest elements to x in the array. The result ...
- [Swift]LeetCode765. 情侣牵手 | Couples Holding Hands
N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...
- [Swift]LeetCode831. 隐藏个人信息 | Masking Personal Information
We are given a personal information string S, which may represent either an email address or a phone ...
- [Swift]LeetCode856. 括号的分数 | Score of Parentheses
Given a balanced parentheses string S, compute the score of the string based on the following rule: ...
- [Swift]LeetCode1030. 距离顺序排列矩阵单元格 | Matrix Cells in Distance Order
We are given a matrix with R rows and C columns has cells with integer coordinates (r, c), where 0 & ...
- ALL_SOURCE
类型:View Owner: SYS 内容: 记录了该用户可访问的所有数据库对象的脚本信息(DDL) 字段: OWNER: 对象的Owner NAME: 对象名称 TYPE: 对象类型,如FUNCT ...
- 智能压缩,摆脱用 Gzip 还是 Brotli 的纠结
近日,又拍云上线了“智能压缩”功能,同时支持 Gzip 和 Brotli 压缩算法,在节约流量的同时,进一步减少用户的等待时间. CDN 流量问题一直以来是大家关注的重点,又拍云针对流量节约上线了一系 ...