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 12 Python
关于Python中浮点数精度处理的技巧总结
Aug 10 Python
几种实用的pythonic语法实例代码
Feb 24 Python
详解python数据结构和算法
Apr 18 Python
Python 分享10个PyCharm技巧
Jul 13 Python
如何利用Python模拟GitHub登录详解
Jul 15 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
python遍历文件目录、批量处理同类文件
Aug 31 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
一文读懂python Scrapy爬虫框架
Feb 24 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 多维数组排序(usort,uasort)
2010/06/30 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php+curl 发送图片处理代码分享
2015/07/09 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
js日期、星座的级联显示代码
2014/01/23 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
Node.js实现数据推送
2016/04/14 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
在django view中给form传入参数的例子
2019/07/19 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
Spartoo荷兰:鞋子、包包和服装
2018/07/12 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
学校采购员岗位职责
2014/01/02 职场文书
展会邀请函范文
2014/01/26 职场文书
春节联欢会策划方案
2014/05/16 职场文书
租房协议书样本
2014/08/20 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
前台接待员岗位职责
2015/04/15 职场文书
2015年材料员工作总结
2015/04/30 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android