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扫描IP段查看指定端口是否开放的方法
Jun 09 Python
Python的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python实现动态加载模块、类、函数的方法分析
Jul 18 Python
Python验证文件是否可读写代码分享
Dec 11 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
Jan 29 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
Jul 04 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
Python 字典一个键对应多个值的方法
Sep 29 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
Python中Yield的基本用法
Oct 18 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP资源管理框架Assetic简介
2014/06/12 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
从零学习node.js之详解异步控制工具async(八)
2017/02/27 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
详解windows python3.7安装numpy问题的解决方法
2018/08/13 Python
python用插值法绘制平滑曲线
2021/02/19 Python
Django 多环境配置详解
2019/05/14 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
什么是动态端口(Dynamic Ports)?动态端口的范围是多少?
2014/12/12 面试题
汽车装潢店创业计划书范文
2014/02/05 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
团结就是力量演讲稿
2014/05/21 职场文书
写给老师的感谢信
2015/01/20 职场文书
2015年派出所工作总结
2015/04/24 职场文书
学校团代会开幕词
2016/03/04 职场文书
八年级作文之友谊
2019/12/02 职场文书
Python基础详解之邮件处理
2021/04/28 Python
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python