【秣厉科技】LabVIEW工具包——OpenCV 教程(11):人脸检测与识别

发布于:2025-03-21 ⋅ 阅读:(31) ⋅ 点赞:(0)


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处
  2. 系统要求: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 就是此人的身份。

在这里插入图片描述

在这里插入图片描述


总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。

网站公告

今日签到

点亮在社区的每一天
去签到