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

 更新时间:2020年10月19日 10:51:43   作者:Rodrag  
这篇文章主要介绍了Python环境使用OpenCV检测人脸实现教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、文章概述

本文将要讲述的是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)结果展示

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)结果展示

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的Flask框架中使用日期和时间的教程

    在Python的Flask框架中使用日期和时间的教程

    这篇文章主要介绍了在Python的Flask框架中使用日期和时间的教程,包括对各个时区之间转换的一些处理,需要的朋友可以参考下
    2015-04-04
  • python 进制转换 int、bin、oct、hex的原理

    python 进制转换 int、bin、oct、hex的原理

    这篇文章主要介绍了python 进制转换 int、bin、oct、hex的原理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 在Python中执行系统命令的方法示例详解

    在Python中执行系统命令的方法示例详解

    最近在做那个测试框架的时候发现对python执行系统命令不太熟悉,所以想着总结下,下面这篇文章主要给大家介绍了关于在Python中执行系统命令的方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-09-09
  • Python中shapefile转换geojson的示例

    Python中shapefile转换geojson的示例

    今天小编就为大家分享一篇关于Python中shapefile转换geojson的示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • python+OpenCV人脸识别考勤系统实现的详细代码

    python+OpenCV人脸识别考勤系统实现的详细代码

    作为一个基于人脸识别算法的考勤系统的设计与实现教程,以下内容将提供详细的步骤和代码示例。本教程将使用 Python 语言和 OpenCV 库进行实现,需要的朋友可以参考下
    2023-05-05
  • pygame游戏之旅 添加游戏介绍

    pygame游戏之旅 添加游戏介绍

    这篇文章主要为大家详细介绍了pygame游戏之旅,教大家如何添加游戏介绍,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • python中的下划线多种用法总结

    python中的下划线多种用法总结

    在 Python 中,下划线(underscore)有多种用法,它在不同的上下文中可以扮演不同的角色,本文将介绍python中的下划线用法总结,感兴趣的朋友一起看看吧
    2024-05-05
  • pytorch-RNN进行回归曲线预测方式

    pytorch-RNN进行回归曲线预测方式

    今天小编就为大家分享一篇pytorch-RNN进行回归曲线预测方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python采集电影评论实战示例

    Python采集电影评论实战示例

    这篇文章主要为大家介绍了Python采集电影评论实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 利用Python的PyPDF2库提取pdf中的文字

    利用Python的PyPDF2库提取pdf中的文字

    PyPDF2是一个用于处理PDF文件的Python库,它提供了许多用于读取和操作PDF文件的功能,对于需要处理PDF文件的Python应用程序,PyPDF2是一个非常实用的工具库,本文将给大家详细介绍一下如何通过Python的PyPDF2库提取pdf中的文字,需要的朋友可以参考下
    2023-05-05

最新评论