Face_Recognition

使用Opencv和Dlib实现基于视频的人脸识别

文件夹介绍

1、Resources\pictures

此文件夹下存放人脸保存结果

2、Resources\video

此文件夹下存放带标注视频保存结果

3、Resources\faceS

此文件夹下存放各个人物的图片,用于人脸库的建立

4、Resources\featureDB

此文件下为各个人物的128D描述符的数据存储文件

5、Resources\featureMean\feature_all.csv

此文件为人脸特征库文件

6、Resources\shape_predictor_68_face_landmarks.dat

人脸关键点标记模型文件

7、Resources\dlib_face_recognition_resnet_model_v1.dat

面部识别模型文件

8、face_recognition.mp4

待检测的视频

9、face_recognition.py

人脸识别代码文件

10、detection.py

人脸检测代码文件

11、face_recognition.py

建立本地人脸库代码文件

介绍

思路介绍

无论是基于视频或者调用摄像头来完成人脸识别,其实是一样,通过使用opencv,来捕获视频或者摄像头传来的图像,每隔若干帧取一帧做人脸识别,调用Dlib中的人脸检测器来检测人脸,并通过Dlib的人脸关键点预测器来获得人脸的关键点,接下来使用Dlib的面部识别模型将获得的68个关键点转换成128D面部描述符,我们通过计算人脸的128D面部描述符与本地人脸库(需要自己建立人脸库)中的人脸128D面部描述符的欧氏距离,来判断是否为同一人,当距离小于特定阈值时,认定识别成功,打上标签。

运行环境介绍

操作系统版本:Windows10

运行环境:python3.6+opencv4.1.2+dlib19.8.1

软件:PyCharm

(注:这里下载dlib包最好下载.whl文件,不需要安装cmake以及boost这些麻烦的东西。因为dilib包的没有python3.7版的whl文件,所以建议使用python3.6)

附上opencv和dlib包链接:https://pan.baidu.com/s/1Z33r7SoD5Z0faH96wr7Ecw

提取码:a8gl

模型介绍

这里的人脸识别使用了Dlib已训练成功的两个模型--人脸关键点预测器和面部识别模型。使用时需要加载模型,文件分别为shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat

模型文件下载地址 http://dlib.net/files/

人脸关键点预测器

Dlib中标记68个特征点采用的是ERT算法,是一种基于回归树的人脸对齐算法,这种方法通过建立一个级联的残差回归树来使人脸形状从当前形状一步一步回归到真实形状。每一个GBDT的每一个叶子节点上都存储着一个残差回归量,当输入落到一个节点上时,就将残差加到改输入上,起到回归的目的,最终将所有残差叠加在一起,就完成了人脸对齐的目的。

用法:

predictor_path = resources_path + "shape_predictor_68_face_landmarks.dat"

#加载人脸关键点预测器

predictor= dlib.shape_predictor(predictor_path)

#获取面部关键点,gary为灰度化的图片

shape = predictor(gray,value)

人脸识别模型

Dlib中使用的人脸识别模型是基于深度残差网络,深度残差网络通过残差块来构建,它有效的解决了梯度消失以及梯度爆炸问题。当网络深度很大时,普通网络的误差会增加,而深度残差网络却有较小的误差。这里的人脸识别通过训练深度残差网络将人脸的68个特征关键点转换成128D面部描述符,用于人脸的识别。

model_path = resources_path + "dlib_face_recognition_resnet_model_v1.dat"

#生成面部识别器

facerec = dlib.face_recognition_model_v1(model_path)

# 提取特征-图像中的68个关键点转换为128D面部描述符,其中同一人的图片被映射到彼此附近,并且不同人的图片被远离地映射。

face_descriptor = facerec.compute_face_descriptor(frame, shape)

效果展示

识别过程

1、本地人脸库建立

2 、视频处理

通过opencv提供的VideoCapture()函数对视频进行加载,并计算视频的fps,以方便人脸标记之后的视频的输出。

3、加载模型

将已经训练好的模型加载进来,将人脸关键点标记模型和面部识别模型加载进来,以便后续使用。

4、人脸检测

对视频进行读取,每隔6帧,取一帧进行人脸检测,先将取得的照片进行灰度处理,然后进行人脸检测,并绘画人脸标记框进行展示,然后通过加载的人脸关键点标记模型识别图像中的人脸关键点,并且标记。

5、人脸识别

将获取的人脸关键点转换成128D人脸描述符,将其与人脸库中的128D面部描述符进行欧氏距离计算,当距离值小于某个阈值时,认为人物匹配,识别成功,打上标签。当无一小于该阈值,打上Unknown标签

6、 保存人脸标记视频

将整个处理过程进行输出,将人脸标记过程保存下来。

PHP opencv Dlib,Face_Recognition相关推荐

  1. 使用Python+OpenCV+dlib为人脸生成口罩

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达推荐阅读 42个pycharm使用技巧,瞬间从黑铁变王者Google ...

  2. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  3. 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【六】设计人脸识别的识别类...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  4. 基于神经网络的人脸识别(Tensorflow,opencv,dlib,cnn,)

    写个神经网络(Tensorflow,opencv,dlib,cnn,人脸识别) lvying 20180427 基于TensorFlow训练的人脸识别神经网络 训练一个神经网络 这段时间正在学习ten ...

  5. python+opencv+dlib实现人脸检测与表情识别

    python+opencv+dlib实现人脸检测与表情识别 一,dlib简单介绍:Dlib包含广泛的机器学习算法.所有的设计都是高度模块化的,快速执行,并且通过一个干净而现代的C ++ API,使用起 ...

  6. opencv+dlib实现给蒙娜丽莎“配”眼镜

    opencv+dlib实现给蒙娜丽莎"配"眼镜 本案例利用opencv+dlib实现了给蒙娜丽莎佩戴眼镜. 主要原理就是利用dlib人脸识别的特征点提取效果,并利用特征点给人脸加上 ...

  7. 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...

  8. 基于Flask/Opencv/Dlib课堂人脸签到系统

    简介 本项目主要采用了Python语言基于Flask框架开发,利用Dlib库中68特征点检测器和深度残差网络模型,欧氏距离,目标跟踪方法实现了人脸识别,采用MySQL数据库记录系统相关数据,并用Boo ...

  9. opencv+dlib 制作平均脸

    用OpenCV + dlib 制作"平均脸" 既然知道了原理,我们现在就要开始动手制作了. 再来回顾一下步骤,当我们要将N张人脸照片合称为一张平均脸的时候,我们首先要处理每一张照片 ...

最新文章

  1. 数据库链接池终于搞对了,这次直接从100ms优化到3ms!
  2. MySQL 聚合函数 和 分组查询(初级)
  3. C++学习系列笔记(九)
  4. js动态产生对象push进数组,发现数组所有元素(element or object)一样
  5. web系统权限之数据权限
  6. 给网页添加跟随你鼠标移动的线条动画
  7. Struts2之国际化
  8. “猜猜红桃A在哪里”——android小游戏(入门学习必备)
  9. 基于matlab的微分例题,matlab程序设计常微分方程编程例题答案数学.doc
  10. 铺捉factoryreset的事件 ---转载
  11. torrents.php怎么下载,PT站自动收藏免费种下载|PT Add Free Torrents To Bookmark脚本js插件_ - 极光下载站...
  12. 未来哪些职业最有可能被人工智能替代
  13. 利用python的docx模块处理word和WPS的docx格式文件
  14. 计算机二级的Word知识点,计算机等级考试二级office基础知识点总结.doc
  15. FC FCoe Vsan Zone相关
  16. 矩阵等价和向量组等价
  17. 基于亨利气体溶解度优化算法的函数寻优算法
  18. vs运行网站设置起始页,取消起始页的方法
  19. ios添加 启动画面_iOS 两种设置启动图方式的 bug 汇总
  20. Visual Studio 2017报错‘GetVersionExW‘: 被声明为已否决

热门文章

  1. 前端学习(1742):前端调试值之快速调试和修改
  2. plsql轻量版触发器
  3. 第十二期:常用的几种大数据架构剖析
  4. STM32F4 使用STLink 和 EventRecoder 调试运行时间
  5. python 调用shell 不阻塞_遇到问题---python调用shell脚本时subprocess.check_call不阻塞
  6. 网页实现凭证金额分割线_一位整理过5000个网页书签的大神分享:实用的书签管理方案...
  7. NCoreCoder.Aop详解
  8. python接口自动化(二十五)--unittest断言——下(详解)
  9. C++const的多种用法
  10. STM32位带操作实现过程解析