Python opencv实现人眼/人脸识别以及实时打码处理


Posted in Python onApril 29, 2019

利用Python+opencv实现从摄像头捕获图像,识别其中的人眼/人脸,并打上马赛克。

系统环境:Windows 7 + Python 3.6.3 + opencv 3.4.2

一、系统、资源准备

要想达成该目标,需要满足一下几个条件:

  • 找一台带有摄像头的电脑,一般笔记本即可;
  • 需配有Python3,并安装NumPy包、opencv;
  • 需要有已经训练好的分类器,用于识别视频中的人脸、人眼等,如无分类器,可以点击这里下载:haarcascades分类器

二、动手做

1、导入相关包、设置视频格式、调用摄像头、指定分类器

import numpy as np 
import cv2
 
fourcc = cv2.VideoWriter_fourcc("D", "I", "B", " ")
out = cv2.VideoWriter('frame_mosic.MP4',fourcc, 20.0, (640,480))
 
cv2.namedWindow("CaptureFace")
#调用摄像头
cap=cv2.VideoCapture(0)
#人眼识别器分类器
classfier=cv2.CascadeClassifier("../haarcascades/haarcascade_eye_tree_eyeglasses.xml")

2、逐帧调用图像,并实时处理

从摄像头读取一帧图像后,先转化为灰度图像,然后利用指定的分类器识别出我们需要的内容,接着对该部分内容利用高斯噪声进行覆盖,以达成马赛克的目的。

代码如下:

while cap.isOpened():
 read,frame=cap.read()
 if not read:
  break
 #灰度转换
 grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
 #人脸检测
 Rects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
 if len(Rects) > 0:   
  for Rect in Rects: 
    x, y, w, h = Rect 
    # 打码:使用高斯噪声替换识别出来的人眼所对应的像素值
    frame[y+10:y+h-10,x:x+w,0]=np.random.normal(size=(h-20,w))
    frame[y+10:y+h-10,x:x+w,1]=np.random.normal(size=(h-20,w))
    frame[y+10:y+h-10,x:x+w,2]=np.random.normal(size=(h-20,w))
 
 cv2.imshow("CaptureFace",frame)
 if cv2.waitKey(5)&0xFF==ord('q'):
  break
 # 保存视频
 out.write(frame)
#释放相关资源
cap.release()
out.release()
cv2.destroyAllWindows()

3、观察效果

代码调用摄像头并在窗口进行了显示,可以实时观察到图像处理的效果,如图:

Python opencv实现人眼/人脸识别以及实时打码处理

并将结果保存为视频,方便随时查看:

Python opencv实现人眼/人脸识别以及实时打码处理

完整代码如下:

# -*- coding: utf-8 -*-
 
import numpy as np 
import cv2
 
fourcc = cv2.VideoWriter_fourcc("D", "I", "B", " ")
out = cv2.VideoWriter('frame_mosic.MP4',fourcc, 20.0, (640,480))
 
cv2.namedWindow("CaptureFace")
#调用摄像头
cap=cv2.VideoCapture(0)
#人眼识别器分类器
classfier=cv2.CascadeClassifier("../haarcascades/haarcascade_eye_tree_eyeglasses.xml")
while cap.isOpened():
 read,frame=cap.read()
 if not read:
  break
 #灰度转换
 grey=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
 #人脸检测
 Rects = classfier.detectMultiScale(grey, scaleFactor = 1.2, minNeighbors = 3, minSize = (32, 32))
 if len(Rects) > 0:   
  for Rect in Rects: 
    x, y, w, h = Rect 
    # 打码:使用高斯噪声替换识别出来的人眼所对应的像素值
    frame[y+10:y+h-10,x:x+w,0]=np.random.normal(size=(h-20,w))
    frame[y+10:y+h-10,x:x+w,1]=np.random.normal(size=(h-20,w))
    frame[y+10:y+h-10,x:x+w,2]=np.random.normal(size=(h-20,w))
 
 cv2.imshow("CaptureFace",frame)
 if cv2.waitKey(5)&0xFF==ord('q'):
  break
 # 保存视频
 out.write(frame)
#释放相关资源
cap.release()
out.release()
cv2.destroyAllWindows()

利用opencv提供Python接口,可以很方便的进行图像、视频处理方面的学习研究,实在是很方便。这里把近期所学做个简单应用,后续再学习更深入的知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作串口的方法
Jun 17 Python
python实现的简单FTP上传下载文件实例
Jun 30 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
python通过opencv实现批量剪切图片
Nov 13 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
python使用xlrd和xlwt读写Excel文件的实例代码
Sep 05 Python
解决python opencv无法显示图片的问题
Oct 28 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
Pycharm安装第三方库失败解决方案
Nov 17 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 #Python
详解【python】str与json类型转换
Apr 29 #Python
python实现给微信指定好友定时发送消息
Apr 29 #Python
python使用wxpy实现微信消息防撤回脚本
Apr 29 #Python
Django Sitemap 站点地图的实现方法
Apr 29 #Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 #Python
python实现微信定时每天和女友发送消息
Apr 29 #Python
You might like
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
js判断两个日期是否相等的方法
2013/09/10 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
javascript数据类型详解
2017/02/07 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
《诺贝尔》教学反思
2014/02/17 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
人事文员岗位职责
2015/02/04 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
国庆节新闻稿
2015/07/17 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
PHP控制循环操作的时间
2021/04/01 PHP
详解JS数组方法
2021/11/20 Javascript
Python编程中内置的NotImplemented类型的用法
2022/03/23 Python
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL