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获取Windows或Linux主机名称通用函数分享
Nov 22 Python
python避免死锁方法实例分析
Jun 04 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Python bytes string相互转换过程解析
Mar 05 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Python实现UDP程序通信过程图解
May 15 Python
Python Switch Case三种实现方法代码实例
Jun 18 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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
GD输出汉字的函数的分析
2006/10/09 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
JS实现的Select三级下拉菜单代码
2015/08/20 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
angular4中关于表单的校验示例
2017/10/16 Javascript
vue-cli配置文件——config篇
2018/01/04 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python递归函数绘制分形树的方法
2018/06/22 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
linux系统都有哪些运行级别
2016/03/26 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
python pygame入门教程
2021/06/01 Python
Python django中如何使用restful框架
2021/06/23 Python
oracle索引总结
2021/09/25 Oracle