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 进行人脸识别,视频追踪代码全注释...相关推荐

  1. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

  2. python opencv生成tf模型_基于TensorFlow+ Opencv 的人脸识别 和模型训练

    一.准备工作 本次实例的anaconda 环境 (有需要的自己导入anaconda) 链接:https://pan.baidu.com/s/1IVt2ap-NYdg64uHSh-viaA 提取码:g7 ...

  3. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

  4. python名片识别_基于Python的名片识别接口调用代码实例

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

  5. 用python做双人五子棋_基于python的socket实现单机五子棋到双人对战

    基于python的socket实现单机五子棋到双人对战,供大家参考,具体内容如下 本次实验使用python语言.通过socket进行不同机器见的通信,具体可以分为以下四步:1.创建ServerSock ...

  6. 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计

    基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...

  7. python 接口自动化的sql验证_基于Python的接口自动化实战-基础篇之pymysql模块操做数据库...

    引言 在进行功能或者接口测试时经常须要经过链接数据库,操做和查看相关的数据表数据,用于构建测试数据.核对功能.验证数据一致性,接口的数据库操做是否正确等.所以,在进行接口自动化测试时,咱们同样绕不开接 ...

  8. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  9. stm32车牌识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

最新文章

  1. 41岁程序员被裁,北京有1500万房产,程序员:我该不该退休?
  2. 神经网络的反向传导到底是在干什么?
  3. 项目的数据存储c语言,C语言项目实战项目8__项目中学生数据的存储与重用.ppt
  4. .NET Core 3.0 部署在docker上运行
  5. 怎样在减少数据中心成本的同时不牺牲性能?
  6. java面试题_2020年JAVA最新大厂面试题!
  7. 电视领域“烧钱”不止,酷开为何反成赢家?
  8. bash脚本之条件判断
  9. C++类与对象实验(六)
  10. paip.hibernate list 返回位null的解决
  11. java实现excel数据比对代码_java上传Excel文件并比对数据
  12. 从车载小程序打造智能汽车生态
  13. ndows movie maker,Windows Movie Maker
  14. ME3616-OPENCPU完整调试笔记
  15. 计算机整个文稿应用回顾主题,计算机应用基础(MS Office高级应用)
  16. Google镜像网站全(4-3更)
  17. AGV资料学习参考 AGV调度系统地图建模参考文件 AGV调度系统源码(OpenTCS) AGV调度系统地 多AGV调度系统实现图建模参考文件c++
  18. 小米科学计算机怎么用,小米计算器怎么用 小米计算器app使用方法
  19. 企业数字化转型思考系列文章(一)何为数字化转型?
  20. python写一个爬虫、爬取网站漫画信息_python爬取漫画

热门文章

  1. 基于java springmvc+mybatis学生考试系统设计和实现
  2. java - 求素数
  3. 计算机大赛横幅标语有趣的,有趣的横幅标语
  4. 机器学习入门(1)之基本概念简介
  5. java学到哪里最容易蒙,蒙哥比vs蒙克(目前最好的哪个)
  6. 【OpenCV 例程200篇】67. 空间域图像增强的综合应用
  7. centos sudo不能运行_如何在Linux中配置sudo访问权限
  8. python在材料方面的应用_python记录材料题带标准答案
  9. unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘
  10. mysql安装版安装