python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

1 #-*- coding: utf-8 -*-

2 from __future__ importunicode_literals3 #操作文件

4 importos5 #科学计算

6 importnumpy as np7 #图像识别

8 importcv2 as cv9 #数据预处理, 该项目中只使用了标签编码

10 importsklearn.preprocessing as sp11

12

13 defload_imgs(directory):14 '''加载 directory 该文件夹下所有以 .jpg 结尾的图片'''

15 #识别 系统环境 自动分配当前系统的路径分隔符并替换

16 directory =os.path.normpath(directory)17 #判断当前路径是否为存在

18 if notos.path.isdir(directory):19 #手动抛出异常 biu biu biu

20 raise IOError("The directory '" + directory + "' doesn't exist!")21 #创建图片集合 用于存储文件夹名和该文件夹下所有的图片

22 faces ={}23 #os.walk(directory) 获取当前文件夹下所有的文件夹以及文件

24 #curdir: 当前文件夹路径

25 #subdirs: 当前文件夹下所有文件夹 (列表)

26 #files: 当前文件夹下所有文件 (列表)

27 for curdir, subdirs, files inos.walk(directory):28 #首先便利所有的文件 筛选.jpg结尾文件并循环

29 for jpeg in (file for file in files if file.endswith('.jpg')):30 #拼接图片路径

31 path =os.path.join(curdir, jpeg)32 #获取该图片分类名称

33 label = path.split(os.path.sep)[-2]34 #判断当前key值是否存在图片集合中, 如果为空则创建该键并赋值空列表

35 #否则给图片集合中的 key 添加图片路径

36 if label not infaces:37 faces[label] =[]38 faces[label].append(path)39 #返回图片集合

40 returnfaces41

42

43 defLBPHModel(fd, codec, train_path):44 '''

45 -------------------46 参数说明: fd, codec, [model_path]47 fd: Haar-like(人脸特征模型对象)48 codec: LabelEncoder(标签编码器对象)49 model_path: 服用模型路径(功能未实现, 没找到读取的函数...)50 -------------------51 返回: 训练后的模型对象52 '''

53 #加载当前文件加下所有.jpg结尾的图片

54 train_faces = load_imgs(train_path) #'traom_imgs'

55 #将所有标签放入编码器进行训练

56 codec.fit(list(train_faces.keys()))57 #创建空的训练集数组x y

58 train_x, train_y =[], []59 #循环所有训练组

60 for label, filenames intrain_faces.items():61 #循环当前样本组中的图片

62 for filename infilenames:63 #读取图片

64 image =cv.imread(filename)65 #将图片转成灰度图

66 gray =cv.cvtColor(image, cv.COLOR_BGR2GRAY)67 #获取人脸特征位置

68 faces =fd.detectMultiScale(69 gray, 1.1, 2, minSize=(100, 100))70 #循环脸部特征数组

71 for l, t, w, h infaces:72 #将图片中的脸部特征裁剪下来

73 train_x.append(gray[t:t + h, l:l +w])74 #标签编码结果存储

75 train_y.append(codec.transform([label])[0])76 train_y =np.array(train_y)77 #创建LBPH人脸检测器

78 model =cv.face.LBPHFaceRecognizer_create()79 #对训练集进行训练

80 model.train(train_x, train_y)81 returnmodel82

83

84 if __name__ == "__main__":85 #训练集图片存储路径

86 train_path = 'train_imgs'

87 #读取人脸描述文件, 构建人脸检测器

88 fd = cv.CascadeClassifier('face.xml')89 #创建标签编码器

90 codec =sp.LabelEncoder()91 #获取model

92 model =LBPHModel(fd, codec, train_path)93 #打开视频捕捉设备

94 vc =cv.VideoCapture(0)95 whileTrue:96 #读取视频帧

97 frame = vc.read()[1]98 #反转图片

99 frame = cv.flip(frame, 1)100 #print(frame)

101 #人脸位置检测, 返回数组

102 faces = fd.detectMultiScale(frame, 1.3, 5)103 #循环人脸位置数组

104 for l, t, w, h infaces:105 #给人脸描边

106 cv.rectangle(frame, (l, t), (l + w, t +h),107 (255, 0, 0), 4)108 #复制原图片文本

109 gray =frame.copy()110 #将图片变化成灰度图

111 gray =cv.cvtColor(gray, cv.COLOR_BGR2GRAY)112 #对面部特征进行识别

113 pred_test_y = model.predict(gray[t:t + h, l:l +w])[0]114 #将预测后的结果进行标签解码

115 face_name =codec.inverse_transform([pred_test_y])[0]116 #给图片添加文本 图片矩阵, 添加文本名称, 设置文本显示位置,

117 #字体样式, 字体大小, 字体颜色, 字体粗细

118 cv.putText(frame, face_name, (l + 5, t - 15),119 cv.FONT_HERSHEY_SIMPLEX, 1,120 (255, 255, 255), 3)121 #打印名称

122 #print(face_name)

123

124 #显示图片

125 cv.imshow('VideoCapture', frame)126 #等待按下ESC键退出, 每次等待33毫秒

127 if cv.waitKey(33) == 27:128 break

129 #关闭视频捕捉设备

130 vc.release()131 #关闭视频窗口

132 cv.destroyAllWindows()

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

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

相关文章

vue css load,vue css3loadding插件的开发以及npm包的发布管理

插件开发的话建议使用vue-gitment脚手架开发vue init webpack-simple vue-gitment如果提示执行cnpm install vue-cli -g 全局安装cnpm install vue-cli -g在次执行上面的命令完成之后可以看到这样的目录在src下面添加component loadding.js loadding.vueloadding.vueexport def…

python label显示图片_python 实现在tkinter中动态显示label图片的方法

在编程中我们往往会希望能够实现这样的操作:点击Button,选择了图片,然后在窗口中的Label处显示选到的图片。那么这时候就需要如下代码:from tkinter import *from tkinter.filedialog import askopenfilenamedef choosepic():path…

如何更改服务器上的数据库文件夹,如何设置数据库文件位置

如何设置数据库文件位置08/07/2014本文内容适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007上一次修改主题: 2007-01-02本主题说明如何使用 Exchange 管理控制台或 Exchange 命令行管理程…

js删除数组中指定元素_js中数组操作详解

今天给大家带来一篇有关数组操作方法的文章。新建数组方法一:通过new运算符创建一个数组构造函数。var arr new Array();方法二:通过方括号直接创建直接量数组。var arr [1,2,3];添加数组中的元素方法一:通过下标添加元素。var arr new Ar…

控制台文字对战游戏 初始版

namespace 对战游戏{ class Program { #region public struct JueSe //创建一个角色对象 { public string XingMing;//这个对象中有这些属性 public int GongJi; public int ShengMing; public int…

查询链接服务器信息,如何通过 SQL Server 链接服务器和分布式查询使用 Excel

作为链接服务器查询 Excel您可以使用企业管理器、系统存储过程或 SQL-DMO(分布式管理对象)将 Excel 数据源配置为 SQL Server 链接服务器。在所有的这些情况中,您总需要设置以下四个属性:链接服务器要使用的名称。连接要使用的 OLE DB 提供程序。Excel 工…

python画精美图案_Python语言的魅力------完美图案

1.画椭圆(代码如下)#!user/bin/python# -*- conding:UTF-8 -*-if __name__ __main__:from Tkinter import *canvas Canvas(width800,height600,bgpurple)canvas.pack(expandYES,fillBOTH)k 1j 1for i in range(0,26):canvas.create_oval(310 - k,250 - k,310 k,250 k,wid…

批量下载,多文件压缩打包zip下载

0、写在前面的话图片批量下载,要求下载时集成为一个压缩包进行下载。从昨天下午折腾到现在,踩坑踩得莫名其妙,还是来唠唠,给自己留个印象的同时,也希望给需要用到这个方法的人带来一些帮助。1、先叨叨IO叨叨IO是因为网…

选了combobox里的选项后没激发change事件_35岁前多用利弊分析,35岁后要有“安全边际”...

想冒险,要趁早1/6、距离糟糕的事情发生,还有多远?我现在同时在职场和投资两类战线写文章,读者也开始串戏。前几天在我另外一个投资号上,有人问我:如果你把投资理念原则扩大到生活中,你觉得最有启…

不连续曲线 highcharts_什么是正则曲线和正则曲面

微分几何和微分流形的书上经常提到“正则曲线”和“正则曲面”。其实英文书中写作”Regular Curve“和”Regular Surface“,让人一眼能够了解其大意(这也是我更偏向看英文原版书的原因)。我就想,数学家为啥不翻译成”规则曲线“和…

centos安装 node.js

curl --silent --location https://rpm.nodesource.com/setup_8.x | sudo bash - yum clean all yum makecache yum -y install nodejs转载于:https://www.cnblogs.com/linkenpark/p/7810238.html

11.06

{% extendsdaohang.html %} {% block title %}发布问答{% endblock %} {% block head %}<link rel"stylesheet" href"{{ url_for(static,filenamecss/14.css) }}" type"text/css"> {% endblock %}{% block main %}<div class"box&…

python 安卓模拟器电脑版_【夜神安卓模拟器电脑版】夜神安卓模拟器电脑版 V6.6.0.6免费版官方免费下载_正式版下载-多特软件站...

夜神安卓模拟器是目前非常流行的一款安卓模拟器&#xff0c;相比一般的模拟器它具有更好的兼容性&#xff0c;稳定性&#xff0c;系统基于Android4.4.2&#xff0c;可以更好地兼容安卓软件&#xff0c;安卓游戏&#xff0c;可以放心使用&#xff0c;软件使用非常简单。相关软件…

python爬取10个网站_十个Python爬虫武器库示例,十个爬虫框架,十种实现爬虫的方法!...

一般比价小型的爬虫需求&#xff0c;我是直接使用requests库 bs4就解决了&#xff0c;再麻烦点就使用selenium解决js的异步 加载问题。相对比较大型的需求才使用框架&#xff0c;主要是便于管理以及扩展等。1.ScrapyScrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而…

[W班]第二次结对作业成绩评价

作业地址&#xff1a; https://edu.cnblogs.com/campus/fzu/FZUSoftwareEngineering1715W/homework/1016 作业要求&#xff1a; 1、代码具有规范性。 2、实现的程序语言不做限制性要求&#xff0c;但需要能生成Windows平台的可执行文件。C/C/C#编译后即可生成&#xff0c;其他…

resnet50结构_无需额外数据、Tricks、架构调整,CMU开源首个将ResNet50精度提升至80%+新方法

本文是CMU的Zhiqiang Shen提出的一种提升标准ResNet50精度的方法&#xff0c;它应该是首个将ResNet50的Top1精度刷到80%的(无需额外数据&#xff0c;无需其他tricks&#xff0c;无需网络架构调整)。该文对于研究知识蒸馏的同学应该是有不少可参考的价值&#xff0c;尤其是里面提…

msp430项目编程14

msp430中项目---电子测重系统 1、hx711工作原理 2、电路原理说明 3、代码&#xff08;显示部分&#xff09; 4、代码&#xff08;功能实现&#xff09; 5、项目总结 msp430项目编程msp430入门学习转载于:https://www.cnblogs.com/guochaoxxl/p/7818040.html

linq to sql 行转列_SQL 难题:行转列

问题&#xff1a;有一张学生成绩表sc&#xff08;sid 学号&#xff0c;cid 课程&#xff0c;score 成绩&#xff09;&#xff0c;请查询出每个学生的英语、数学的成绩&#xff08;行转列&#xff0c;一个学生只有一行记录&#xff09;。建表语句&#xff1a;create 实现方式1—…

python课程设计矩阵对角线之和,为每个python numpy用不同的值填充矩阵对角线

I saw a function numpy.fill_diagonal which assigns same value for diagonal elements. But I want to assign different random values for each diagonal elements. How can I do it in python ? May be using scipy or other libraries ?解决方案You can use np.diag_i…

SpringMvc 系统启动时加载数据到内存中

SpringMvc 系统启动时加载数据到内存中 学习了&#xff1a;http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnblogs.com/zhengteng/p/5381910.html http://xfxlch.iteye.com/blog/2048049 http://duanxuchu.iteye.com/blog/2181647 结论&#xff1a; 方…