用opencv做人脸识别(LabVIEW+OpenCV快速搭建人脸识别系统(附源码))
🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习 、人工智能博主
🎄所属专栏:『LabVIEW深度学习实战』
🍻上期文章: LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)
📰如觉得博主文章写的不错或对你有所帮助的话 ,还望大家多多支持呀! 欢迎大家✌关注 、👍点赞 、✌收藏 、👍订阅专栏前言
当今世界 ,人脸识别作为一种常见的生物识别技术 ,已经成为了一个不可或缺的技术 ,广泛应用于安防 、金融 、教育等领域 。其中 ,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地址:https://github.com/zhongyy/SFace二、准备工作
安装LabVIEW 2018 64位或更高版本 安装LabVIEW AI视觉工具包,安装步骤可查看:https://blog.csdn.net/virobotics/article/details/123656523 下载人脸检测yunet.onnx模型文件:https://github.com/ShiqiYu/libfacedetection.train/blob/a61a428929148171b488f024b5d6774f93cdbc13/tasks/task1/onnx/yunet.onnx 下载人脸识别SFace模型文件:https://drive.google.com/file/d/1ClK9WiB492c5OZFKveF3XiHCejoOxINW/view三 、VI介绍
Create.vi:使用给定参数创建此类的实例
参数说明:
modelPath:模型文件路径 config:模型对应配置文件路径 ,ONNX 模型不需要 backend id:Backend ID target id:目标设备IDalignCrop.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 ,FRCOSINE 方法大于阈值 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)六 、项目源码
如需源码 ,订阅本专栏后在评论区留下邮箱
七 、环境说明
操作系统:Windows10
LabVIEW:2018及以上 64位版本
视觉工具包:techforce_lib_opencv_cpu-1.0.0.xx.vip总结
以上就是今天要给大家分享的内容 ,希望对大家有用 。
如果文章对你有帮助 ,欢迎✌关注 、👍点赞 、✌收藏 、👍订阅专栏
推荐阅读
LabVIEW图形化的AI视觉开发平台(非NI Vision) ,大幅降低人工智能开发门槛
LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
LabVIEW AI视觉工具包OpenCV Mat基本用法和属性
手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集
LabVIEW快速实现OpenCV DNN(YunNet)的人脸检测(含源码)创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!