IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> OpenCV4.5.4 DNN人脸识别模块使用介绍--如何快速搭建一个人脸识别系统 -> 正文阅读

[人工智能]OpenCV4.5.4 DNN人脸识别模块使用介绍--如何快速搭建一个人脸识别系统

点击下方卡片,关注“OpenCV与AI深度学习

视觉/图像重磅干货,第一时间送达

导读

本文主要介绍OpenCV4.5.4中人脸识别模块的使用和简易人脸识别系统的搭建,供大家参考。

背景介绍

前几天刚刚更新的OpenCV4.5.4版本将基于DNN的人脸检测和人脸识别添加到modules/objdetect中,具体更新介绍如下:

OpenCV4.5.4更新了!看看都有哪些新功能?

人脸检测使用的是于仕琪老师团队开源的人脸检测库,具体使用可参考往期文章,检测速度和准确率都很不错。

OpenCV DNN人脸检测模块使用步骤演示(基于OpenCV4.5.4)

效果如下:

图片

同时OpenCV4.5.4 新增了DNN人脸识别模块,人脸识别部分的模型是由下面几位贡献者训练提供:

图片

在不同数据集下的准确率和推荐阈值设置:

图片

人脸识别模块使用介绍?

DNN人脸识别例程位置:

OpenCV4.5.4_Release\opencv\sources\samples\dnn\face_match.cpp

使用步骤:

①?下载模型文件:

????人脸检测模型下载地址:https://github.com/ShiqiYu/libfacedetection.train/tree/master/tasks/task1/onnx

? ??人脸识别模型下载地址:

https://drive.google.com/file/d/1ClK9WiB492c5OZFKveF3XiHCejoOxINW/view

????下载好了就是下面两个文件:

图片

②?人脸检测(对人脸图片1和人脸图片2分别做人脸检测):

String det_onnx_path = "./yunet.onnx";// Initialize FaceDetectorPtr<FaceDetectorYN> faceDetector;
faceDetector = FaceDetectorYN::create(det_onnx_path, "", image1.size(), score_thresh, nms_thresh, top_k);Mat faces_1;faceDetector->detect(image1, faces_1);if (faces_1.rows < 1){    std::cerr << "Cannot find a face in " << image1_path << "\n";    return -1;}
faceDetector = FaceDetectorYN::create(det_onnx_path, "", image2.size(), score_thresh, nms_thresh, top_k);Mat faces_2;faceDetector->detect(image2, faces_2);if (faces_2.rows < 1){    std::cerr << "Cannot find a face in " << image2_path << "\n";    return -1;}

人脸检测效果(获得人脸区域和5点landmark):

图片

③?人脸裁剪对齐+提取特征:

// Initialize FaceRecognizerSFString reg_onnx_path = "./face_recognizer_fast.onnx";Ptr<FaceRecognizerSF> faceRecognizer = FaceRecognizerSF::create(reg_onnx_path, "");
Mat aligned_face1, aligned_face2;faceRecognizer->alignCrop(image1, faces_1.row(0), aligned_face1);faceRecognizer->alignCrop(image2, faces_2.row(0), aligned_face2);
Mat feature1, feature2;faceRecognizer->feature(aligned_face1, feature1);feature1 = feature1.clone();faceRecognizer->feature(aligned_face2, feature2);feature2 = feature2.clone();

④?比对人脸特征相似度,判断是否为同一个人:????

double cos_score = faceRecognizer->match(feature1, feature2, FaceRecognizerSF::DisType::FR_COSINE);double L2_score = faceRecognizer->match(feature1, feature2, FaceRecognizerSF::DisType::FR_NORM_L2);
if(cos_score >= cosine_similar_thresh){    std::cout << "They have the same identity;";}else{    std::cout << "They have different identities;";}std::cout << " Cosine Similarity: " << cos_score << ", threshold: " << cosine_similar_thresh << ". (higher value means higher similarity, max 1.0)\n";
if(L2_score <= l2norm_similar_thresh){    std::cout << "They have the same identity;";}else{    std::cout << "They have different identities.";}std::cout << " NormL2 Distance: " << L2_score << ", threshold: " << l2norm_similar_thresh << ". (lower value means higher similarity, min 0.0)\n";

????人脸特征相似度度量有normL2和cosine方法,对应的判断是否为同一人的阈值分别为1.128和0.363,normL2方法小于阈值1.128判定为同一人,cosine方法大于阈值0.363判定为同一人。

float score_thresh = 0.9f;float nms_thresh = 0.3f;double cosine_similar_thresh = 0.363;double l2norm_similar_thresh = 1.128;int top_k = 5000;

依照上面步骤,我们很快就可以搭建一个类似下面的人脸对比应用程序:

OpenCV DNN人脸识别匹配应用效果展示

匹配准确率已足以应对一般应用,比OpenCV原有的FisherFaceRecognizer、LBPHFaceRecognizer和EigenFaceRecognizer准确率都要好。

人脸识别系统搭建

上面介绍的是搭建一个人脸比对应用,那么如何搭建一个人脸识别系统?步骤又是什么?

我们首先要知道人脸识别一般分为1:1和1:N人脸识别。

1:1人脸识别核心就是人脸比对,比如典型的刷卡人脸识别系统,需要在刷卡(比如工牌,包含姓名等信息)后做人脸识别,其实就是去找对应路径下的人脸图片或人脸特征和当前的人脸特征做比对,来校验卡和人是否一致,常用于公司的考勤打卡系统。这种系统相对来说比较简单,前期数据录入是也只需要采集员工信息和图片就可以完成,用上面的人脸比对思路就可以做一个。

1:N人脸识别相较而言就要复杂一些,对算法的准确率和速度都有很高的要求。在拍照的同时,需要完成数据库内大量人脸特征的对比,如果用上述OpenCV DNN人脸比对方法可能有些困难,检测时间问题可以尝试多线程和硬件加速方法。1:N人脸识别常见于小区门禁的人脸识别系统,目前商用系统已较为成熟。

下面是使用OpenCV DNN人脸识别模块做的一个简单视频人脸识别应用,截取舌战群儒片段,选择张昭和诸葛亮图片先提取特征,然后每一帧取比对,判断相似度,标注识别结果:

OpenCV DNN人脸识别实例之舌战群儒

OpenCV DNN人脸识别之舌战群儒

源码素材与其他应用内容讨论,如有需要可加入知识星球中获取。

图片

同时欢迎大家加入OpenCV与AI深度学习官方微信群一起学习交流:

图片

—THE END—

图片

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-21 12:11:36  更:2021-10-21 12:11:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 8:42:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码