当前位置: 首页 > article >正文

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

文章目录

  • 前言
  • 级联分类器
  • FaceDetectorYN
  • FaceRecognizerSF
    • 1. 特征提取
    • 2. 人脸对比
    • 3. 人脸身份识别(最佳匹配法)
  • 总结


前言

  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. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。

http://www.kler.cn/a/594009.html

相关文章:

  • 【Cocos TypeScript 零基础 22.1】
  • 云原生安全基座:零信任架构的原子化防御革命
  • 使用uniapp的vite版本进行微信小程序开发,在项目中使用mqtt连接、订阅、发布信息
  • C#入门学习记录(三)C#中的隐式和显示转换
  • html5-Canvas弹跳小球项目开发总结
  • Next.js 如何成功解决了React的致命缺陷?
  • ngx_http_conf_ctx_t
  • 【SpringCloud】微服务的治理以及服务间的远程调用
  • 网络工程学习笔记
  • idea问题(三)pom文件显示删除线
  • 深度学习之语义分割
  • 【算法day16】电话号码的字母组合
  • 【设计模式】策略模式
  • java使用Modbus协议与设备进行通信
  • 【sgFloatDialog】自定义组件:浮动弹窗,支持修改尺寸、拖拽位置、最大化、还原、最小化、复位
  • AdaWaveNet:用于时间序列分析的自适应小波网络
  • 高并发编程有哪些规范?
  • 群晖中的docker设置总是不生效,尤其代理
  • 天梯赛 L2-011 玩转二叉树
  • 【MyDB】7-客户端服务端通信之3-Client的实现