Python环境使用OpenCV检测人脸实现教程


Posted in Python onOctober 19, 2020

一、文章概述

本文将要讲述的是Python环境下如何用OpenCV检测人脸,本文的主要内容分为:

1、检测图片中的人脸

2、实时检测视频中出现的人脸

3、用运设备的摄像头实时检测人脸

二:准备工作

提前做的准备:

安装好Python3

下载安装OpenCV库,方法是

pip install opencv-python -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com/pypi/simple

下载特征数据HAAR和LBP,这两种数据都能实现对人脸特征的提取,HAAR大多是小数计算所以运算速度较慢,LBP大多是整数计算运行速度较快。如图所示,本次实例用红框中的文本,其他的文本,比如第一个haarcascade_eye.xml是眼睛识别的文本,我们下次再用。

(1)代码和说明

import cv2 as cv
import numpy as np

def face_detect_demo():#人脸检测函数
  gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)#把图片变成灰度图片,因为人脸的特征需要在灰度图像中查找
  #以下分别是HAAR和LBP特征数据,任意选择一种即可,注意:路径中的‘/'和‘\'是有要求的
  # 通过级联检测器 cv.CascadeClassifier,加载特征数据
  # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
  face_detector = cv.CascadeClassifier(
    "D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
  #在尺度空间对图片进行人脸检测,第一个参数是哪个图片,第二个参数是向上或向下的尺度变化,是原来尺度的1.02倍,第三个参数是在相邻的几个人脸检测矩形框内出现就认定成人脸,这里是在相邻的5个人脸检测框内出现,如果图片比较模糊的话建议降低一点
  faces = face_detector.detectMultiScale(gray, 1.02, 5)
  for x, y, w, h in faces:#绘制结果图
    #rectangle参数说明,要绘制的目标图像,矩形的第一个顶点,矩形对角线上的另一个顶点,线条的颜色,线条的宽度
    cv.rectangle(src, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv.imshow("result", src)#输出结果图

src = cv.imread("D:/pyproject/cv_renlianjiance/cvrenxiangpic/1.jpg")#图片是JPG和png都可以
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)#创建绘图窗口
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
cv.imshow("input image", src)
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口

(2)结果展示

Python环境使用OpenCV检测人脸实现教程

2、视频中的人脸检测

(1)代码和说明

import cv2 as cv
import numpy as np

def face_detect_demo(image):
  gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
  # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
  face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
  faces = face_detector.detectMultiScale(gray, 1.02, 5)
  for x, y, w, h in faces:
    cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
  cv.imshow("result", image)


capture = cv.VideoCapture("D:/pyproject/cv_renlianjiance/video/1.mp4")
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
  #按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
  ret, frame = capture.read()
  # cv.flip函数表示图像翻转,沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转
  frame = cv.flip(frame, 1)
  face_detect_demo(frame)
  #waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
  c = cv.waitKey(10)
  if c == 27:#当键盘按下‘ESC'退出程序
    break

#cv.waitKey(0)参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口

(2)结果展示

Python环境使用OpenCV检测人脸实现教程

3、利用设备上的摄像头进行人脸检测,其实和2中的代码一样,只是打开摄像头,而不是读取视频文件

代码和说明

import cv2 as cv
import numpy as np

def face_detect_demo(image):
  gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
  # face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/haarcascades/haarcascade_frontalface_alt_tree.xml")
  face_detector = cv.CascadeClassifier("D:/pyproject/cv_renlianjiance/lbpcascades/lbpcascade_frontalcatface.xml")
  faces = face_detector.detectMultiScale(gray, 1.02, 5)
  for x, y, w, h in faces:
    cv.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2)
  cv.imshow("result", image)


capture = cv.VideoCapture(0)#其中的0表示电脑中的第一个相机
cv.namedWindow("result", cv.WINDOW_AUTOSIZE)
while (True):
  #按帧读取视频,ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
  ret, frame = capture.read()
  # cv.flip函数表示图像翻转,沿y轴翻转, 0: 沿x轴翻转, <0: x、y轴同时翻转
  frame = cv.flip(frame, 1)
  face_detect_demo(frame)
  #waitKey()方法本身表示等待键盘输入,参数是1,表示延时1ms切换到下一帧图像,对于视频而言;
  c = cv.waitKey(10)
  if c == 27:#当键盘按下‘ESC'退出程序
    break

#cv.waitKey(0)参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;
cv.waitKey(0)
cv.destroyAllWindows()#作用是能正常关闭绘图窗口

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python操作gmail实例
Jan 14 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
Python中index()和seek()的用法(详解)
Apr 27 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
浅析Python数据处理
May 02 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
Python3 导入上级目录中的模块实例
Feb 16 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
基于python实现操作git过程代码解析
Jul 27 Python
Python实现Canny及Hough算法代码实例解析
Aug 06 Python
你需要掌握的20个Python常用技巧
Feb 28 Python
Python开发简易五子棋小游戏
May 02 Python
python Tornado框架的使用示例
Oct 19 #Python
python mock测试的示例
Oct 19 #Python
python 提高开发效率的5个小技巧
Oct 19 #Python
python 利用toapi库自动生成api
Oct 19 #Python
协程Python 中实现多任务耗资源最小的方式
Oct 19 #Python
python爬取音频下载的示例代码
Oct 19 #Python
Python爬虫教程知识点总结
Oct 19 #Python
You might like
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
2014/04/08 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
jQuery 中的 DOM 操作
2016/04/26 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
python实现局域网内实时通信代码
2019/12/22 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
业务经理的岗位职责
2013/11/16 职场文书
师范学院教师自荐书
2014/01/31 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
先进事迹材料范文
2014/12/29 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
python装饰器代码解析
2022/03/23 Python