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下利用OpenCV来旋转图像的教程
Apr 16 Python
Python中的filter()函数的用法
Apr 27 Python
python实现拓扑排序的基本教程
Mar 11 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
Django添加feeds功能的示例
Aug 07 Python
python内置数据类型之列表操作
Nov 12 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
Python利器openpyxl之操作excel表格
Apr 17 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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下关于Cannot use a scalar value as an array的解决办法
2010/08/08 PHP
ThinkPHP关联模型操作实例分析
2012/09/23 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
详解php中的implements 使用
2017/06/13 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
2017/01/27 Javascript
微信小程序 开发MAP(地图)实例详解
2017/06/27 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
微信小程序后端无法保持session的原因及解决办法问题
2020/03/20 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
matplotlib绘图实例演示标记路径
2018/01/23 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
Django中间件实现拦截器的方法
2018/06/01 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
css3和jquery实现的可折叠导航菜单适合放在手机网页的导航菜单
2014/09/02 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
Python Django模型详解
2021/10/05 Python