基于Python的OpenCV人脸检测!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是眼睛识别的文本,我们下次再用。
    注意:点击下载HAAR和LBP的特征数据--------数据集下载
  •  

三、开始讲述

1、图片人脸检测

(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()#作用是能正常关闭绘图窗口
123456789101112131415161718192021222324

(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()#作用是能正常关闭绘图窗口
1234567891011121314151617181920212223242526272829

(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()#作用是能正常关闭绘图窗口
1234567891011121314151617181920212223242526272829

以上就是本文所有内容,希望能帮到大家!!!

你学会了吗?如果获取源码请加群:1136192749

 

  • 3
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中使用OpenCV进行人脸检测的方法可以按照以下步骤进行操作。首先,导入所需的库和模型。可以使用以下代码导入OpenCV库和人脸检测模型: import cv2 cascade = cv2.CascadeClassifier("path/to/haarcascade_frontalface_default.xml") 在代码中,将"path/to/haarcascade_frontalface_default.xml"替换为你自己安装的OpenCV人脸检测模型的路径。 接下来,读取视频流或图像并将其转换为灰度图像以方便处理。可以使用以下代码完成此步骤: video_capture = cv2.VideoCapture(0) # 如果要从网络摄像头读取视频流,将0更改为视频流的URL while True: ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 然后,使用模型进行人脸检测并标记出检测到的人脸。可以使用以下代码完成此步骤: faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 最后,显示标记后的图像并等待用户按下"q"键退出程序。可以使用以下代码完成此步骤: cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break 完成以上步骤后,释放视频捕获对象并销毁所有窗口。可以使用以下代码完成此步骤: video_capture.release() cv2.destroyAllWindows() 以上是使用PythonOpenCV进行人脸检测的基本步骤。可以根据需要进行调整和扩展,例如添加眼睛和嘴巴的检测功能,或使用Dlib库进行更高级的人脸相关任务。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python opencv人脸检测提取及保存方法](https://download.csdn.net/download/weixin_38552305/13769902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用OpenCV实现人脸检测Python)](https://blog.csdn.net/weixin_42990464/article/details/120171635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值