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 相关文章推荐
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
Python实现简单的四则运算计算器
Nov 02 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
浅谈Pandas中map, applymap and apply的区别
Apr 10 Python
Django框架模板注入操作示例【变量传递到模板】
Dec 19 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
使用Python制作简单的小程序IP查看器功能
Apr 16 Python
Flask框架中request、请求钩子、上下文用法分析
Jul 23 Python
Python对列表的操作知识点详解
Aug 20 Python
基于Tensorflow批量数据的输入实现方式
Feb 05 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 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 nl2br函数 将换行字符转成 &amp;lt;br&amp;gt;
2009/08/21 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
js 内存释放问题
2010/04/25 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
浅谈React 服务器端渲染的使用
2018/05/08 Javascript
详解javascript中的babel到底是什么
2018/06/21 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
axios取消请求的实践记录分享
2018/09/26 Javascript
vue实现评价星星功能
2020/06/30 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
python删除列表中重复记录的方法
2015/04/28 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Django admin美化插件suit使用示例
2017/12/12 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
python模块如何查看
2020/06/16 Python
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
继承权公证书
2014/04/09 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
运动会新闻报道稿
2015/07/22 职场文书
运动会广播稿50字
2015/08/19 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书