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调用shell的方法
Nov 20 Python
剖析Python的Twisted框架的核心特性
May 25 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python实现购物程序思路及代码
Jul 24 Python
解决Pycharm中import时无法识别自己写的程序方法
May 18 Python
python 实现对数据集的归一化的方法(0-1之间)
Jul 17 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
pyinstaller还原python代码过程图解
Jan 08 Python
详解python中的闭包
Sep 07 Python
matplotlib教程——强大的python作图工具库
Oct 15 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
Dec 01 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+DBM的同学录程序(2)
2006/10/09 PHP
php 正则匹配函数体
2009/08/25 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
2018/04/09 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
Javascript 网页水印(非图片水印)实现代码
2010/03/01 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
Javascript点击按钮随机改变数字与其颜色
2016/09/01 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
利用vue开发一个所谓的数独方法实例
2017/12/21 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
在js代码拼接dom对象到页面上的模板总结
2018/10/21 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
python 读写中文json的实例详解
2017/10/29 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
python爬虫之快速对js内容进行破解
2019/07/09 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
某公司的.net工程师面试题笔试题
2013/11/22 面试题
《燕子》教学反思
2014/02/18 职场文书
《影子》教学反思
2014/02/21 职场文书
高中教师个人工作总结
2015/02/10 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书