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常用的日期时间处理方法示例
Feb 08 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
Mar 14 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
May 11 Python
Python实现邮件的批量发送的示例代码
Jan 23 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
Python之时间和日期使用小结
Feb 14 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
python3连接kafka模块pykafka生产者简单封装代码
Dec 23 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
Python基于numpy模块实现回归预测
May 14 Python
python获取命令行参数实例方法讲解
Nov 02 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
谈谈PHP的输入输出流
2007/02/14 PHP
PHP开发负载均衡指南
2010/07/17 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
php权重计算方法代码分享
2014/01/09 PHP
PHP模拟QQ登录的方法
2015/07/29 PHP
PHP简单日历实现方法
2016/07/20 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
JavaScript函数详解
2014/11/17 Javascript
JavaScript实现级联菜单的方法
2015/06/29 Javascript
用JS动态改变表单form里的action值属性的两种方法
2016/05/25 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
使用Node.js写一个代码生成器的方法步骤
2019/05/10 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
Python对列表中的各项进行关联详解
2017/08/15 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python3数字求和的实例
2019/02/19 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
关于Keras Dense层整理
2020/05/21 Python
python脚本和网页有何区别
2020/07/02 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
四风问题个人剖析材料
2014/10/07 职场文书
个人收入证明范本
2015/06/12 职场文书
白银帝国观后感
2015/06/17 职场文书
公司管理制度范本
2015/08/03 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电
Python几种酷炫的进度条的方式
2022/04/11 Python