Python学习笔记之视频人脸检测识别实例教程


Posted in Python onMarch 06, 2019

前言

上一篇博文与大家分享了简单的图片人脸识别技术,其实在实际应用中,很多是通过视频流的方式进行识别,比如人脸识别通道门禁考勤系统、人脸动态跟踪识别系统等等。

下面话不多说了,来一起看看详细的介绍吧

案例

这里我们还是使用 opencv 中自带了 haar人脸特征分类器,通过读取一段视频来识别其中的人脸。

代码实现:

# -*- coding: utf-8 -*-
__author__ = "小柒"
__blog__ = "https://blog.52itstyle.vip/"
import cv2
import os


# 保存好的视频检测人脸并截图
def CatchPICFromVideo(window_name, camera_idx, catch_pic_num, path_name):
 cv2.namedWindow(window_name)

 # 视频来源
 cap = cv2.VideoCapture(camera_idx)

 # 告诉OpenCV使用人脸识别分类器
 classfier = cv2.CascadeClassifier(os.getcwd()+"\\haarcascade\\haarcascade_frontalface_alt.xml")

 # 识别出人脸后要画的边框的颜色,RGB格式, color是一个不可增删的数组
 color = (0, 255, 0)

 num = 0
 while cap.isOpened():
 ok, frame = cap.read() # 读取一帧数据
 if not ok:
  break

 grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将当前桢图像转换成灰度图像

 # 人脸检测,1.2和2分别为图片缩放比例和需要检测的有效点数
 faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
 if len(faceRects) > 0: # 大于0则检测到人脸
  for faceRect in faceRects: # 单独框出每一张人脸
  x, y, w, h = faceRect

  # 将当前帧保存为图片
  img_name = "%s/%d.jpg" % (path_name, num)
  # print(img_name)
  image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
  cv2.imwrite(img_name, image, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

  num += 1
  if num > (catch_pic_num): # 如果超过指定最大保存数量退出循环
   break

  # 画出矩形框
  cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 2)

  # 显示当前捕捉到了多少人脸图片了,这样站在那里被拍摄时心里有个数,不用两眼一抹黑傻等着
  font = cv2.FONT_HERSHEY_SIMPLEX
  cv2.putText(frame, 'num:%d/100' % (num), (x + 30, y + 30), font, 1, (255, 0, 255), 4)

  # 超过指定最大保存数量结束程序
 if num > (catch_pic_num): break

 # 显示图像
 cv2.imshow(window_name, frame)
 c = cv2.waitKey(10)
 if c & 0xFF == ord('q'):
  break

  # 释放摄像头并销毁所有窗口
 cap.release()
 cv2.destroyAllWindows()


if __name__ == '__main__':
 # 连续截100张图像
 CatchPICFromVideo("get face", os.getcwd()+"\\video\\kelake.mp4", 100, "E:\\VideoCapture")

动图有点花,讲究着看吧:

Python学习笔记之视频人脸检测识别实例教程

如果是捕捉摄像头,只需要改变以下代码即可:

# 如果获取摄像头,参数修改为 0 即可
cap = cv2.VideoCapture(0)

源码

https://gitee.com/52itstyle/Python/tree/master/Day09(本地下载)

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python调用新浪微博API项目实践
Jul 28 Python
详解Python3.1版本带来的核心变化
Apr 07 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
python使用itchat实现手机控制电脑
Feb 22 Python
Python读取properties配置文件操作示例
Mar 29 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
JupyterNotebook设置Python环境的方法步骤
Dec 03 Python
python 实现按对象传值
Dec 26 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
Python学习笔记之图片人脸检测识别实例教程
Mar 06 #Python
详解django2中关于时间处理策略
Mar 06 #Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 #Python
Django+Xadmin构建项目的方法步骤
Mar 06 #Python
Python中最大递归深度值的探讨
Mar 05 #Python
Python小进度条显示代码
Mar 05 #Python
Python嵌套式数据结构实例浅析
Mar 05 #Python
You might like
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
介绍几个array库的新函数 php
2006/12/29 PHP
用PHP进行MySQL删除记录操作代码
2008/06/07 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
讲解WordPress开发中一些常用的debug技巧
2015/12/18 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
php7 新增功能实例总结
2020/05/25 PHP
PHP中SESSION过期设置
2021/03/09 PHP
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
javascript中onclick(this)用法介绍
2013/04/19 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
vue2组件之select2调用的示例代码
2017/10/12 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
Pythont特殊语法filter,map,reduce,apply使用方法
2016/02/27 Python
django 常用orm操作详解
2017/09/13 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
线程同步的方法
2016/11/23 面试题
市场调查策划方案
2014/06/10 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
Python字符串格式化方式
2022/04/07 Python
我去timi了,一起去timi是什么意思?
2022/04/13 杂记