PHP opencv Dlib,Face_Recognition

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面部描述符的欧氏距离,来判断是否为同一人,当距离小于特定阈值时,认定识别成功,打上标签。

%E8%BF%87%E7%A8%8B%E5%9B%BE.png

运行环境介绍

操作系统版本: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)

效果展示

%E5%9B%BE%E7%89%872.png

%E5%9B%BE%E7%89%871.png

%E5%9B%BE%E7%89%873.png

识别过程

1、本地人脸库建立

%E4%BA%BA%E8%84%B8%E5%BA%93%E5%BB%BA%E7%AB%8B%E5%9B%BE.png

2 、视频处理

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

3、加载模型

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

4、人脸检测

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

5、人脸识别

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

%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%9B%BE.png

6、 保存人脸标记视频

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c截断文件

http://www.cnblogs.com/zhuxiongfeng/archive/2010/08/24/1807505.html转载于:https://www.cnblogs.com/jingzhishen/p/4745978.html

oracle dbra,资源供给:IO子系统之二

案例描述:某运营商的dbra备份系统,备份构建在vxvm和vxfs文件系统之上,串行更新的速度基本理想。由于无法达到更新目标,通过增加并行来增加IO写速度,结果并行度加大之后,iops快速下跌,io子系统无…

[Android]Android端ORM框架——RapidORM(v1.0)

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4748077.html Android上主流的ORM框架有很多,常用的有ORMLite、GreenDao等。 ORMLite: -优点:AP…

oracle代码实例,oracle存储过程代码实例

1、用来插入大量测试数据的存储过程CREATE OR REPLACE PROCEDURE INSERTAMOUNTTEST(ST_NUM IN NUMBER,ED_NUM IN NUMBER)ISBEGINdeclarei number;beginFOR i IN ST_NUM..ED_NUM LOOPINSERT INTO tb values(i,i,3,3,3,100,0);END LOOP;end;END;运行&…

Examining Open vSwitch Traffic Patterns

In this post, I want to provide some additional insight on how the use of Open vSwitch (OVS) affects—or doesn’t affect, in some cases—how a Linux host directs traffic through physical interfaces, OVS internal interfaces, and OVS bridges. This is somethi…

Docker 面临的安全隐患,我们该如何应对

【编者按】对比虚拟机,Docker 在体量等方面拥有显著的优势。然而,当 DevOps 享受 Docker 带来扩展性、资源利用率和弹性提升的同时,其所面临的安全隐患同样值得重视,近日 Chris Taschner 在 SEI 上撰文进行了总结。本文系 OneAPM …

oracle虑重语句,db基本语句(oracle)

一. SQL分类DDL:数据定义语言(Data Definition Language)DML:数据操纵语言(Data Manipulation Language)TCL:事务控制语言(Transaction Control Language)DQL:数据查询语言(Data Query Language)DCL:数据控制语言(Data…

Plist文件和字典转模型

模型与字典 1. 用模型取代字典的好处 使用字典的坏处 编译器没有自动提醒的功能,需要手敲key如果写错了编译器也不会报错2. 模型概念 概念 专门用来存放数据的对象特点 一般继承自NSObject在.h文件中声明一些用来存放数据的属性注释 //单行注释/ /多行注释/* /文档注释,调用属性…

oracle job 与存储过程,应用oracle job和存储过程

每月新增数据百万多条,需要定期处理2个主要数据表(test_ad,test_pd),移动非当月数据到历史表中保存数据操作存储过程如下:MYPROC.prccreate or replace procedure MYPROC isTableName_AD char(13);TableName_PD char(13);tmp_str varchar2(10…

Oracle从小白到大牛的刷题之路(建议收藏学习)

目录 前言 数据表结构 数据库文件(按照顺序导入) 1基本SQL-SELECT 1.1基本SQL-SELECT语句笔记 1.2 基本SQL-SELECT语句练习 2过滤和排序数据 2.1过滤和排序数据笔记 2.2过滤和排序数据练习 3单行函数 3.1单行函数笔记 3.2单行函数练习 4多表…

oracle数据库快照打点,Oracle数据库快照的使用

Oracle数据库快照的使用正在看的ORACLE教程是:Oracle数据库快照的使用。oracle数据库的快照是一个表,它包含有对一个本地或远程数据库上一个或多个表或视图的查询的结果。正因为快照是一个主表的查询子集,使用快照可以加快数据的查询速度;在保持不同数据…

3.2 双向链表

1.简介 前面3.1的单链表在操作过程中有一个缺点,就是后面的节点无法直接找到前面的节点,这使很多操作都得从头到尾去搜寻节点,算法效率变得非常低,解决这个问题的方法就是重新定义链表的节点使每个节点有两个指针,一个…

uc通讯不成功php版本过高,Ucenter通信失败排查方法

定位错误来源:1. 使用firebug或类似于firebug的工具审查”通信失败“这几个字2. 会发现包含这几个字的div的同级下方有个script标签,复制该script标签的src值到浏览器的新标签页并打开3. 这个url指向的是ucenter中app模块的onping操作(ucenter/control/a…

马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别

马丁 福勒 Martin Fowler 关于依赖注入和反转控制的区别 http://martinfowler.com/articles/injection.html 中文翻译:http://files.cnblogs.com/files/stono/DependencyInjection.pdf 转载于:https://www.cnblogs.com/stono/p/4764551.html