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

【秣厉科技】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.dtcms.com/a/79987.html

相关文章:

  • Android第五次面试总结(网络补充)
  • Thinkphp指纹识别
  • Kubernets命名空间
  • QT6通过DeepSeek API上传附件实现
  • 【文件操作】IO流
  • MPLS基础---通俗易懂
  • 通过启用Ranger插件的Hive审计日志同步到Doris做分析
  • Android studio无法查看源码
  • 小酌SM2的背景、数字签名
  • 慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16
  • 【Linux内核系列】:动静态库详解
  • 企业数据治理解决方案(46页PPT)(文末有下载方式)
  • CMAC算法原理
  • springboot 打包 failed with MalformedInputException: Input length = 1
  • SaaS系统的销售微服务与权限微服务边界设计
  • 湖仓一体:数据湖与数据仓库的融合模式解析
  • 算法系列——有监督学习——3.逻辑回归
  • 现代时尚标签海报包装网站设计几何风PSAI无衬线英文字体安装包 Matahari Sans Font Family
  • 【linux】统信操作系统修改默认编辑模式从nano改为vim
  • Q2流动式起重机司机考试模拟题库
  • 耘想Android NAS 用户权限设置说明书
  • SQL 中 WHERE 与 HAVING 子句的使用
  • 一些关于瓶装燃气送气工考试的常见考点
  • Spring MVC 参数校验-校验注解
  • Asahi Linux 核心开发者暂停苹果 GPU Linux 驱动开发工作
  • GGUF、Transformer、AWQ 详解与关系梳理
  • 【最新版0.47.8】Cursor下载安装教程
  • iPhone 16怎么编辑图片?图片编辑技巧、软件分享
  • [Xilinx]工具篇_PetaLinux自动编译
  • 全面解析软件开发流程与工具对比