【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别
文章目录
- 前言
- 级联分类器
- FaceDetectorYN
- FaceRecognizerSF
- 1. 特征提取
- 2. 人脸对比
- 3. 人脸身份识别(最佳匹配法)
- 总结
前言
- 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
- 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。
级联分类器
使用级联分类器 CascadeClassifier 可以实现简单的物体分类,包括人脸检测。选板位于 objdetect 模块。
使用官方提供的模型 haarcascade_frontalface_alt2.xml 进行人脸检测,参考范例:
examples/Molitec/OpenCV/objdetect/Cascade_1(frontalface).vi;
FaceDetectorYN
使用 FaceDetectorYN 类实现人脸检测,选板位于 objdetect 模块。
该功能的实现,需要专用的 YuNet 模型,下载地址:
https://github.com/opencv/opencv_zoo/tree/main/models/face_detection_yunet
- 参考范例:examples/Molitec/OpenCV/objdetect/FaceDetector_1(detect and draw).vi;
- 检测输出的结果,是 N行 * 15列 的数组,每行15个数代表一张人脸的数据;
- 每行15个数依次代表:矩形框(x,y,w,h)、左眼、右眼、鼻子、左唇角、右唇角的坐标、以及置信度;
- 实现流程如下图(可视化过程略)。
FaceRecognizerSF
使用 FaceRecognizerSF 类实现人脸识别,选板位于 objdetect 模块。通常要与上文人脸检测(FaceDetectorYN)配合使用。
模型下载:
https://github.com/opencv/opencv_zoo/tree/main/models/face_recognition_sface
1. 特征提取
- 参考范例:examples/Molitec/OpenCV/objdetect/FaceRecognize_1 (learn).vi;
- For 循环遍历每一张(单人)照片,先用 FaceDetectorYN 做人脸检测,再交给 FaceRecognizerSF 进行对齐裁切和特征提取;
- 每一张人脸的特征,是一个长度为128的浮点数序列。将所有特征序列保存到文件中,作为将来识别的依据。
2. 人脸对比
- 参考范例:examples/Molitec/OpenCV/objdetect/FaceRecognize_3 (compare 2 faces).vi;
- 该范例的功能,是比较两张人脸,判断他们属于同一个人的概率;
- 实现的思路:同时提取两张人脸的特征,然后把两个特征交给 match 函数去匹配,得到distance;
- 特别注意,同一个 FaceRecognizerSF 对象的 feature 矩阵是共享的,为了避免将第一次的特征结果被覆盖,在第二次提取特征之前,先将第一次的结果 clone 一份。如下图。
3. 人脸身份识别(最佳匹配法)
- 参考范例:examples/Molitec/OpenCV/objdetect/FaceRecognize_2 (recognize).vi;
- 实现的思路:先将第1步 “特征提取” 保存的文件载入到 Mat 中,作为已知人脸库。然后提取当前图片中的人脸特征,依次与已知人脸库中的每一个特征做 match 匹配,得到匹配分数最高的,对应的 id 就是此人的身份。
总结
- 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
- 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
- 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。