🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主
🍻本文由virobotics(仪酷智能)原创首发
🥳欢迎大家关注✌点赞👍收藏⭐留言📝
前言
Hello,大家好,我是virobotics(仪酷智能),一个深耕于LabVIEW和人工智能领域的开发工程师。
当今世界,人脸识别作为一种常见的生物识别技术,已经成为了一个不可或缺的技术,广泛应用于安防、金融、教育等领域。其中,SFace 作为一种先进的人脸识别模型,已经被广泛使用。本篇博客将介绍如何使用LabVIEW 和 SFace 实现人脸识别。人脸检测内容可查看上一篇博客LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
本文的主要内容分为以下两部分:
1、实时检测人脸并将并人脸设置标签保存下来
2、调用摄像头实现实时人脸识别
一、SFace简介
SFace 是一种基于深度学习的人脸识别模型,是由北京邮电大学邓伟洪教授课题组贡献。SFace可以在减少干净示例的类内距离和防止过度拟合标签噪声之间取得更好的平衡,并有助于更强大的深度人脸识别模型。在CASIA-WebFace,VGGFace2和MS-Celeb-1M数据库上训练的模型的广泛实验,以及在LFW,MegaFace和IJB-C数据库等几个人脸识别基准上进行评估,已经证明了SFace的优越性。
- SFace模型Git地址:github.com/zhongyy/SFa…
二、准备工作
- 安装LabVIEW 2018 64位或更高版本
- 安装LabVIEW AI视觉工具包,安装步骤可查看:blog.csdn.net/virobotics/…
- 下载人脸检测yunet.onnx模型文件:github.com/ShiqiYu/lib…
- 下载人脸识别SFace模型文件:drive.google.com/file/d/1ClK…
三、VI介绍
Create.vi:使用给定参数创建此类的实例
参数说明:
modelPath
:模型文件路径config
:模型对应配置文件路径,ONNX 模型不需要backend id
:Backend IDtarget id
:目标设备ID
alignCrop.vi:对齐图像以将面部放在标准位置
参数说明:
src
:输入图片one face
:输入图像中某张人脸的检测结果(15列)dst
:对齐人脸后的图片
feature.vi:从对齐的图像中提取人脸特征
参数说明:
src
:已对齐人脸的图片feature
:人脸特征
match.vi:计算两个人脸特征之间的距离
参数说明:
feature1
:一个人脸特征feature2
:第二个人脸特征type
:距离类型,用于计算相似度score
:相似度得分
人脸特征相似度度量有 FR_COSINE
和 FR_NORM_L2
方法,对应的判断是否为同一人的值分别为0.363和1.128,FR_COSINE
方法大于阈值 0.363 判定为同一人, FR_NORM_L2
方法小于阈值1.128判定为同一人。
四、项目实践
实现效果:利用 OpenCV FaceRecognizerSF 在 LabVIEW 平台实现人脸识别并显示该人名字。
实现思路:
准备工作
- 新建项目文件face_recognition;
- 在项目文件face_recognition中新建文件夹model,并将下载的yunet.onnx以及face_recognizer_fast.onnx拷贝至model文件夹中;在项目文件face_detect中新建文件夹photos,等待存储人脸;
4.1 实时检测人脸并将并人脸设置标签保存下来
-
获取人脸检测及人脸识别模型文件及人脸图片路径;
-
初始化相机并设置视频像素为640*480,默认摄像头id为0;
-
创建FaceDetectorYN、FaceRecognizerSF对象;
-
循环读取视频流中的每一帧并进行人脸检测,获取检测结果;
faces
是一个二维数组,每一行代表检测的一张人脸,每行数据中分别表示获取人脸15维的基本信息:x1
,y1
,w
,h
,x_re
,y_re
,x_le
,y_le
,x_nt
,y_nt
,x_rcm
,y_rcm
,x_lcm
,y_lcm
,rate
,即人脸区域矩形框,左右眼、鼻子,左右嘴角5点landmark
,置信度
-
绘制边框及关键点;
我们将绘制边框及关键点单独封装成一个draw_face.vi实现,完成程序如上图所示。 -
保存视频流中的某张人脸,并为之命名,该人脸像素为112*112;
-
释放所有资源;
-
完整源码;
-
运行效果
save的图片保存到了该vi同路径下的photo文件夹中
4.2 调用摄像头实现实时人脸识别
- 获取人脸检测及人脸识别模型文件及之前已经保存的人脸图片路径;
- 初始化相机并设置视频像素为640*480,默认摄像头id为0;
- 创建FaceDetectorYN、FaceRecognizerSF对象;
- 加载人脸数据,加载文件夹photo的每一张人脸图片,并获取每张人脸的128个特征点;
- 循环读取视频流中的每一帧并进行人脸检测,获取检测结果;
- 人脸识别(对比)
人脸特征相似度度量有 FR_COSINE 和FR_NORM_L2方法,对应的判断是否为同一人的值分别为0.363和1.128,FRCOSINE 方法大于阈值 0.363判定为同一人, FR_NORM _L2 方法小于阈值1.128判定为同一人,在本项目中只要满足其中一种,即认为是同一人。
-
绘制人脸框及名字,若该人在图片数据库中,则显示该人名字,否则显示unknow;
-
完整源码;
-
运行效果;
五、python实现
安装OpenCV 4.5.4及更高版本,该版本收录了基于深度学习神经网络的人脸模块(以下称“OpenCV DNN Face”),包括人脸检测(使用模型YuNet,由OpenCV China团队贡献)和人脸识别(使用模型SFace,由北京邮电大学邓伟洪教授课题组贡献)。
# 人脸检测
img = cv.imread("path/to/image")
faceDetector = cv.FaceDetectorYN.create("/path/to/model", "", img.shape[:2])
faces = faceDetector.detect(image)
# 人脸识别
recognizer = cv.FaceRecognizerSF.create(recog_model_path, "" )
aligned_face = recognizer.alignCrop(img, faces[1][0])
feature = recognizer.feature(aligned_face)
cosine_score = recognizer.match(feature1, feature2, 0)
六、项目源码
如需源码,可查看:blog.csdn.net/virobotics/…
更多项目源码可关注微信公众号:VIRobotics
七、环境说明
- 操作系统:Windows10
- LabVIEW:2018及以上 64位版本
- 视觉工具包:techforce_lib_opencv_cpu-1.0.0.xx.vip
总结
以上就是今天要给大家分享的内容,希望对大家有用。如有笔误,还请各位及时指正。后续还会继续给各位朋友分享其他案例,欢迎大家关注博主。我是virobotics(仪酷智能),我们下篇文章见~
如果有问题可以在评论区里讨论,提问前请先点赞支持一下博主哦,如您想要探讨更多关于LabVIEW与人工智能技术,欢迎加入我们的技术交流群:705637299。进群请备注:LabVIEW机器视觉
**如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏