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 04 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
浅谈python 中类属性共享的问题
Jul 02 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
python如何基于redis实现ip代理池
Jan 17 Python
python设置环境变量的作用整理
Feb 17 Python
Python定时器线程池原理详解
Feb 26 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 autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
php获取CSS文件中图片地址并下载到本地的方法
2014/12/02 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
Node.js实现JS文件合并小工具
2016/02/02 Javascript
jQuery通过ajax快速批量提交表单数据
2016/10/25 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
使用vue完成微信公众号网页小记(推荐)
2019/04/28 Javascript
关于微信小程序map组件z-index的层级问题分析
2019/07/09 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
用Python编程实现语音控制电脑
2014/04/01 Python
python写一个md5解密器示例
2018/02/23 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
2018/06/13 Python
Python 访问限制 private public的详细介绍
2018/10/16 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python实现QQ批量登录功能
2019/06/19 Python
图文详解Django使用Pycharm连接MySQL数据库
2019/08/09 Python
学习Django知识点分享
2019/09/11 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
采购文员岗位职责
2013/11/20 职场文书
夏季奶茶店创业计划书
2014/01/16 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
销售团队获奖感言
2014/08/14 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android