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()
python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...相关推荐
- python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...
基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...
- python opencv生成tf模型_基于TensorFlow+ Opencv 的人脸识别 和模型训练
一.准备工作 本次实例的anaconda 环境 (有需要的自己导入anaconda) 链接:https://pan.baidu.com/s/1IVt2ap-NYdg64uHSh-viaA 提取码:g7 ...
- python人脸深度识别_基于Python的深度学习人脸识别方法
基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...
- python名片识别_基于Python的名片识别接口调用代码实例
基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...
- 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战
基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...
- 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计
基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...
- python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...
引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...
- delphi 数字识别_基于STM32单片机的车牌识别
系统介绍 使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...
- stm32车牌识别_基于STM32单片机的车牌识别
系统介绍 使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...
最新文章
- 41岁程序员被裁,北京有1500万房产,程序员:我该不该退休?
- 神经网络的反向传导到底是在干什么?
- 项目的数据存储c语言,C语言项目实战项目8__项目中学生数据的存储与重用.ppt
- .NET Core 3.0 部署在docker上运行
- 怎样在减少数据中心成本的同时不牺牲性能?
- java面试题_2020年JAVA最新大厂面试题!
- 电视领域“烧钱”不止,酷开为何反成赢家?
- bash脚本之条件判断
- C++类与对象实验(六)
- paip.hibernate list 返回位null的解决
- java实现excel数据比对代码_java上传Excel文件并比对数据
- 从车载小程序打造智能汽车生态
- ndows movie maker,Windows Movie Maker
- ME3616-OPENCPU完整调试笔记
- 计算机整个文稿应用回顾主题,计算机应用基础(MS Office高级应用)
- Google镜像网站全(4-3更)
- AGV资料学习参考 AGV调度系统地图建模参考文件 AGV调度系统源码(OpenTCS) AGV调度系统地 多AGV调度系统实现图建模参考文件c++
- 小米科学计算机怎么用,小米计算器怎么用 小米计算器app使用方法
- 企业数字化转型思考系列文章(一)何为数字化转型?
- python写一个爬虫、爬取网站漫画信息_python爬取漫画
热门文章
- 基于java springmvc+mybatis学生考试系统设计和实现
- java - 求素数
- 计算机大赛横幅标语有趣的,有趣的横幅标语
- 机器学习入门(1)之基本概念简介
- java学到哪里最容易蒙,蒙哥比vs蒙克(目前最好的哪个)
- 【OpenCV 例程200篇】67. 空间域图像增强的综合应用
- centos sudo不能运行_如何在Linux中配置sudo访问权限
- python在材料方面的应用_python记录材料题带标准答案
- unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘
- mysql安装版安装