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判断、获取一张图片主色调的2个实例
Apr 10 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python同时替换多个字符串方法示例
Sep 17 Python
Python zip函数打包元素实例解析
Dec 11 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
Python下划线5种含义代码实例解析
Jul 10 Python
如何利用python进行时间序列分析
Aug 04 Python
python批量修改文件名的示例
Sep 27 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
python利用文件时间批量重命名照片和视频
Feb 09 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
解析PHP中的正则表达式以及模式匹配
2013/06/19 PHP
php的zip解压缩类pclzip使用示例
2014/03/14 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
Angular2的管道Pipe的使用方法
2017/11/07 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python 用户登录验证的小例子
2013/03/06 Python
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python Django路径配置实现过程解析
2020/11/05 Python
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
初中生学习的自我评价
2013/11/14 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
欢度春节标语
2014/07/01 职场文书
副校长竞聘演讲稿
2014/09/01 职场文书
幼师小班个人总结
2015/02/12 职场文书
python脚本框架webpy模板控制结构
2021/11/20 Python
MySQL三种方式实现递归查询
2022/04/18 MySQL