目录

1.人脸检测

2 人脸对齐

2.1 人脸对齐参考代码1

2.2 人脸对齐参考代码2

2.3 人脸对齐参考代码3

3 人脸识别

3.1 特征提取方法1----分类网络

3.2 特征提取方法2----facenet

3.3 人脸比对

4 实际比对效果


要想做人脸识别,首先需要检测出人脸子图和关键点,然后根据关键点对人脸进行对齐,然后对对齐后的人脸提取人脸特征并进行特征值比对,下面简单介绍下三个过程中的原理。

1.人脸检测

人脸检测就没什么说的了,就是检测出图像中的人脸和关键点,比如我们用yolov5-face做检测得到如下图片,

也可以使用 blazeface得到如下结果

当然也可以使用其他方法,比如mtcnn、SCRFD、RetinaFace。但是这些方法的目的都是得到人脸子图和关键点。

2 人脸对齐

要做人脸对齐就需要用到人脸特征点,人脸特征点, 又称为人脸关键点 (face landmark), 是人脸上具有明确语义的坐标点, 如鼻尖, 嘴角, 眼角等. 人脸对齐具体做法是: 利用最小二乘法求解当前人脸图像的关键点与预定义的标准人脸关键点 (通常是由统计得到的) 之间的空间变换矩阵 (一般是相似变换矩阵), 再在人脸图像上进行该空间变换矩阵对应的变换. 人脸对齐后的图像是标准尺寸的, 而且减小了人脸姿态, 尺度和偏移 (想想看, 相似变换矩阵中包含了旋转, 尺度和平移参数) 对人脸识别的影响。

其实人脸对齐可以简单的理解为就是为了把比如歪着的人脸、尺度不正常的人脸、在图像中位置偏移的人脸,都矫正成比较标准的人脸。

2.1 人脸对齐参考代码1

根据人脸关键点做人脸对齐face alignment----C++实现_陈 洪 伟的博客-CSDN博客

2.2 人脸对齐参考代码2

可以使用opencv实现人脸对齐,可以参考

基于Landmark的人脸对齐以及裁剪方法 - horsetail - 博客园

2.3 人脸对齐参考代码3

人脸对齐的代码在SeetaFace2/FaceRecognizer/seeta/FaceRecognizerPrivate.cpp文件中是有的,可以借鉴,从下图中的mean_shape可以看到前面两个点的y坐标一样说明是两个眼睛,后面两个点的y坐标一样是嘴巴的两个点,中间第三个点是鼻子,这就是标准的人脸关键点。

具体github网址为:https://github.com/seetafaceengine/SeetaFace2

3 人脸识别

3.1 特征提取方法1----分类网络

前面经过了人脸检测及人脸对齐,我们得到了对齐后的人脸子图,这时候我们一般使用一个分类网络提取人脸特征,一般使用分类层的前面一层的feature map作为人脸特征,例如我们可以使用Resnet50网络训练一个128类别的人脸分类网络,然后实际使用时候我们把倒数第二层的128个输出值作为特征向量。

3.2 特征提取方法2----facenet

前面的特征提取方法是训练一个分类模型,然后取倒数第二层作为人脸特征值,这样的方法不够直接和效率低下。不够直接是指希望学习的指定层的特征可以很好的泛化到未知人脸上;效率低是指一般学习的特征维度很高(大于1000维),有的方法对提取的特征进行PCA降维处理,但这只是一个线性变换,可以通过一个网络层很简单的实现出来。
FaceNet是直接利用triplet loss训练模型输出128维的特征向量,triplets是由来自于一人的两张人脸图像和来自于另一个人的第三张图像组成,训练的目的是来自于同一人的人脸对之间的欧式距离要远小于来自于不同人的人脸对之间的欧氏距离。
相关资料介绍参考:

https://github.com/davidsandberg/facenet

https://github.com/timesler/facenet-pytorch

【人脸识别】FaceNet详解_姚路遥遥的博客-CSDN博客_facenet

facenet-pytorch库的简单使用 - 木易123 - 博客园

3.3 人脸比对

前面我们提取了人脸特征,加下来我们要做人脸比对,人脸比对就是把提取到的特征向量和底库中的特征向量进行比对,可以通过余弦距离或欧氏距离的方法求解相似度,得到比对得分,并和阈值进行比较,其中如果是小底库的嵌入式设备,底库可以使用sqlite数据库自己封装一个增删改查以及比对接口。

相关资料参考:

C++求欧氏距离_陈 洪 伟的博客-CSDN博客_c++ 欧式距离

特征值比对代码/计算相似度代码_陈 洪 伟的博客-CSDN博客_代码相似度对比

常用的相似度计算方法----欧式距离、曼哈顿距离、马氏距离、余弦、汉明距离、切比雪夫距离、闵可夫斯基距离、马氏距离_陈 洪 伟的博客-CSDN博客

Python操作sqlite3数据库--增删改查,利用sqlite3实现轻量级图像搜索底库_陈 洪 伟的博客-CSDN博客

4 实际比对效果

生成的简单的测试底库如下所示(马赛克的为真实人名),

实际测试结果如下图所示,刘德华的比对时,底库中的top4是正确的,

部分代码未开源,

后期会对该算法进行持续优化。

人脸检测-人脸对齐-人脸识别原理及方法相关推荐

  1. MTCNN人脸检测与对齐和FaceNet人脸识别

    一 MTCNN算法结构 MTCNN算法是一种基于深度学习的人脸检测和人脸对齐方法,它可以同时完成人脸检测和人脸对齐的任务,相比于传统的算法,它的性能更好,检测速度更快. MTCNN算法包含三个子网络: ...

  2. CV之FR之MTCNN:基于TF框架利用MTCNN算法检测并对齐人脸图像进(人脸识别/人脸相似度)而得出人脸特征向量从而计算两张人脸图片距离案例应用之详细攻略

    CV之FR之MTCNN:基于TF框架利用MTCNN算法检测并对齐人脸图像进(人脸识别/人脸相似度)而得出人脸特征向量从而计算两张人脸图片距离案例应用之详细攻略 目录 基于TF框架利用MTCNN算法检测 ...

  3. 深度学习之视频人脸识别系列二:人脸检测与对齐

    作者 | 东田应子 [磐创AI导读]本文是深度学习之视频人脸识别系列的第二篇文章,介绍人脸检测与对齐的相关算法.欢迎大家关注我们的公众号:磐创AI. 一.人脸检测与关键点检测 问题描述: 人脸检测解决 ...

  4. 人脸检测MTCNN和人脸识别Facenet(附源码)

    原文链接:人脸检测MTCNN和人脸识别Facenet(附源码) 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haa ...

  5. (转)第三十七节、人脸检测MTCNN和人脸识别Facenet(附源码)

    http://www.cnblogs.com/zyly/p/9703614.html 在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第 ...

  6. MTCNN-将多任务级联卷积神经网络用于人脸检测和对齐

    论文链接:  https://kpzhang93.github.io/MTCNN_face_detection_alignment/,本文是根据自己的理解翻译的如有错误,还请见谅,评论提出,立马修 ...

  7. Centerface:开源实用的边缘设备无锚人脸检测与对齐算法

    点击我爱计算机视觉标星,更快获取CVML新技术 昨天Github上 ywlife 开源了 CenterFace:实用的边缘设备无锚人脸检测与对齐算法,引起了很多52CV群友的关注,开源不到一天,已经1 ...

  8. 家庭服务机器人的人脸检测、跟踪与识别研究

    摘要:本文介绍了一个用于家庭服务机器人完成人脸检测.跟踪.识别的双目视觉系统.该系统首先采用人脸肤色模型结合相似度来检测人脸:然后通过基于颜色信息的CAMSHIFT算法跟踪运动的人脸:最后利用嵌入式隐 ...

  9. 亚马逊Rekognition发布针对人脸检测、分析和识别功能的多项更新

    今天亚马逊Rekognition针对人脸检测.分析和识别功能推出了一系列更新.这些更新将为用户带来多项能力的改今,包括从图像中检测出更多人脸.执行更高精度的人脸匹配以及获得图像中的人脸得到更准确的年龄 ...

  10. c#结合emgucv进行人脸检测_Python实时人脸识别/替换

    摄像头中的人脸检测,也是人脸识别的一部分, 摄像头播放的画面本质上是按帧将图片拼凑起来的, 有图片的话,获取图片的中人脸呢再上一篇中我们已经涉及了 想要进行人脸识别, 我们需要OpenCV, 还是先来 ...

最新文章

  1. 美团大脑:知识图谱的建模方法及其应用 | 公开课笔记
  2. 50个常用元器件图片_50个最常用的英语短语(一),值得收藏!
  3. QT的QPlaceContent类的使用
  4. VHDL基本门电路和数值比较器的设计
  5. pacemaker+corosync实现集群管理
  6. word流程图整体怎么拆分_word流程图-不会做流程图?这三种方法超级简单!
  7. Python 帮助信息(pydoc模块)
  8. Qt 5.2.1 applications (32 bit) in CentOS (64 bit with gcc 4.8.2)
  9. 暨阳社区创始人游牧:为什么我们要转型?
  10. authorized_key 不生效。
  11. Buy and Resell HDU - 6438 贪心
  12. windows实战Git环境配置msysGit+TortoiseGit(zz)
  13. 【Css】使用float:left浮动后,导致后面div高度“塌陷”的解决办法(示例和图示)
  14. 免费报名 | 2016中国信息无障碍专题沙龙
  15. C++内存管理方式——new/delete
  16. [置顶]FPGA 建制的任天国游戏机(NES)。
  17. 用Castor处理XML文档
  18. html页面下雪动画实例,HTML5实现下雪实例
  19. 获取手机的IMEI,MSISDN,ICCID,IMSI
  20. 关于行列满秩矩阵的一个小结论

热门文章

  1. 【线性系统】五、稳定性
  2. 星星之火-56:前传接口 CPRI容器的字长、能力与CPRI速率的对应关系
  3. 华为HG8245光纤猫获得超级用户密码
  4. matlab二重积分有奇异点,用MATLAB计算某些区域上二重积分.pdf
  5. shellcode样本—弹出计算器
  6. python入门区块链技术_区块链教程
  7. 项目管理过程4W1H
  8. dcp9030cdn定影_兄弟DCP-9030CDN驱动下载
  9. 运维服务级别管理流程
  10. Xcode打包IPA包