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实现115网盘自动下载的方法
Sep 30 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
Apr 08 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python正则表达式经典入门教程
May 22 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
pytorch中的weight-initilzation用法
Jun 24 Python
Python类成员继承重写的实现
Sep 16 Python
Pycharm安装Qt Design快捷工具的详细教程
Nov 18 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
PHP的开合式多级菜单程序
2006/10/09 PHP
php下实现折线图效果的代码
2007/04/28 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python正则表达式教程之二:捕获篇
2017/03/02 Python
Python解惑之True和False详解
2017/04/24 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
css3中transition属性详解
2014/09/02 HTML / CSS
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
Python面试题集
2012/03/08 面试题
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
聊城大学毕业生自荐书
2014/02/01 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
妈妈别哭观后感
2015/06/08 职场文书