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计算字符宽度的方法
Jun 14 Python
python中使用PIL制作并验证图片验证码
Mar 15 Python
Python基于生成器迭代实现的八皇后问题示例
May 23 Python
Python OpenCV处理图像之图像直方图和反向投影
Jul 10 Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 Python
pandas如何处理缺失值
Jul 31 Python
浅谈Python 递归算法指归
Aug 22 Python
浅析python中while循环和for循环
Nov 19 Python
Python列表list操作相关知识小结
Jan 29 Python
python中round函数如何使用
Jun 19 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 Python
python中的时区问题
Jan 14 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/02 日漫
php self,$this,const,static,->的使用
2009/10/22 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
2013/07/05 PHP
php提供实现反射的方法和实例代码
2019/09/17 PHP
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python计算三角函数之asin()方法的使用
2015/05/15 Python
详解K-means算法在Python中的实现
2017/12/05 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python中强大的format函数实例详解
2018/12/05 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
面试后感谢信怎么写
2014/02/01 职场文书
生日宴会主持词
2014/03/20 职场文书
爱我中华演讲稿
2014/05/20 职场文书
临时用工协议书范本
2014/10/29 职场文书
琅琊山导游词
2015/02/05 职场文书
借条格式范本
2015/05/25 职场文书
感恩教师节主题班会
2015/08/12 职场文书
python解析json数据
2022/04/29 Python
Vue操作Storage本地化存储
2022/04/29 Vue.js
java实现web实时消息推送的七种方案
2022/07/23 Java/Android