Python图像处理(二)opencv人脸检测

简介: 人脸检测部分,我们需要使用到opencv,看清楚,是opencv,不是opencv_python首先,我们打开opencv的官网:opencv.org/#当然,纯英文的。我们找到library目录下的release目录:选择你需要的版本,下载对应的平台就好。如下图所示,我当然要尝试最新版的了。下载完成之后,双击安装就可以了。 我理解的人脸检测呢,其实就是opencv根据采集到的图像与其库中预置的人脸特征去比对,有符合人脸特征的,就说明采集到的图像是有人脸的。初学,我也不清楚我说的是否正确。有不对的地方,欢迎大佬指出。

人脸检测部分,我们需要使用到opencv,看清楚,是opencv,不是opencv_python

首先,我们打开opencv的官网:opencv.org/#

当然,纯英文的。

我们找到library目录下的release目录:

image.png

选择你需要的版本,下载对应的平台就好。如下图所示,我当然要尝试最新版的了。

image.png

下载完成之后,双击安装就可以了。

 

我理解的人脸检测呢,其实就是opencv根据采集到的图像与其库中预置的人脸特征去比对,有符合人脸特征的,就说明采集到的图像是有人脸的。初学,我也不清楚我说的是否正确。

有不对的地方,欢迎大佬指出。

 

我们来打开opencv的安装目录:

image.png

其中 build 是 OpenCV 使用时要用到的一些库文件,sources 中则是 OpenCV 官方为我们提供的一些 demo 示例源码

 

按照我上边的猜想的人脸识别的原理。

我们需要先找到opencv预置的人脸特征,在sources\data\haarcascades目录下,那么每个文件都是干啥的呢?

人脸检测器(默认) : haarcascade_frontalface_default.xml

人脸检测器(快速 Harr) : haarcascade_frontalface_alt2.xml

人脸检测器(侧视) : haarcascade_profileface.xml

眼部检测器(左眼) : haarcascade_lefteye_2splits.xml

眼部检测器(右眼) : haarcascade_righteye_2splits.xml

嘴部检测器: haarcascade_mcs_mouth.xml

鼻子检测器: haarcascade_mcs_nose.xml

身体检测器: haarcascade_fullbody.xml

人脸检测器(快速 LBP) : lbpcascade_frontalface.xml

一:人脸检测

好了,准备工作大概就是这个样子,我们使用代码来测试一下:

python

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/3/22 19:15
# @Author  : stone
# @Email   : 805795955@qq.com
# @File    : task.py
# @Software: PyCharm
import cv2 as cv
def face_detect_demo():
    """
    人脸检测方法
    """
    # 将图片转换为灰度图片
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    # 加载特征数据
    face_detector = cv.CascadeClassifier('C:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    # 获取检测到的人脸区域
    faces = face_detector.detectMultiScale(gray)
    print(faces)
    # 将检测到的人脸区域画框
    for x, y, w, h in faces:
        cv.rectangle(img, (x, y), (x+w, y+h), color=(0, 255, 0), thickness = 2)
    cv.imshow('result', img)
# 加载图片
img = cv.imread('tu2.jpg')
# 调用 人脸检测方法
face_detect_demo()
cv.waitKey(0)
cv.destroyAllWindows()

指向上方代码,如下图所示:

image.png

我们可以看到,人脸正儿八经的检测到了,但是还有两个小区域,可能是灰度转换后与人脸特征较为相近,也被识别成人脸了。

二:多张人脸检测

当然,一张图中只有一个人脸显然是不太符合我们的实际应用的,那么我们还是要试一下一张图片中有多张人脸的效果如何:

代码不变,换一张多人脸的图,直接执行,如下图所示:

image.png

三张人脸是检测到了,但是可能是图中元素较多,一些不是人脸的地方,也被识别成了人脸。

这部分,我们可以通过调整检测部分代码来实现精确识别

ini

复制代码

# scaleFactor 缩放比例  minNeighbors 检测次数 maxSize 最大检测区域  minSize 最小检测区域
faces = face_detector.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=10,maxSize=(300,300),minSize=(190,190))

经过上边的调整,检测到的人脸区域,如下图所示:

image.png

三:视频人脸检测

视频人脸检测,本质上还是检测图片中的人脸,因为视频也是由一张一张图片组成的,像目前主流的相机拍摄的视频一般都是4k60p,也就是图片分辨率是4k,一秒钟播放60张照片。

下边我们使用代码来测试一下,视频中的人脸检测:

ruby

复制代码

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2022/3/22 19:15
# @Author  : stone
# @Email   : 805795955@qq.com
# @File    : task.py
# @Software: PyCharm
import cv2 as cv
def face_detect_demo(img):
    #将图片灰度
    gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    #加载特征数据
    face_detector = cv.CascadeClassifier(
        'C:/opencv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
    faces = face_detector.detectMultiScale(gray,scaleFactor=1.2, minNeighbors=10)
    print(faces)
    for x,y,w,h in faces:
        cv.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)
        # cv.circle(img,center=(x+w//2,y+h//2),radius=(w//2),color=(0,255,0),thickness=2)
    cv.imshow('result',img)
#读取视频
cap=cv.VideoCapture('video.mp4')
while True:
    flag,frame=cap.read()
    # print('flag:',flag,'frame.shape:',frame.shape)
    if not flag:
        break
    face_detect_demo(frame)
    if ord('q') == cv.waitKey(10):
        break
cv.destroyAllWindows()
cap.release()

运行代码,效果如下:

image.png

 

以上大概就是人脸检测的基本使用代码。

 

有好的建议,请在下方输入你的评论。

目录
相关文章
|
3月前
|
数据采集 Python
Python实用记录(七):通过retinaface对CASIA-WebFace人脸数据集进行清洗,并把错误图路径放入txt文档
使用RetinaFace模型对CASIA-WebFace人脸数据集进行清洗,并将无法检测到人脸的图片路径记录到txt文档中。
57 1
|
3月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
143 1
|
5天前
|
机器学习/深度学习 算法 数据可视化
Python的计算机视觉与图像处理
本文介绍了Python在计算机视觉和图像处理领域的应用,涵盖核心概念、算法原理、最佳实践及应用场景。重点讲解了OpenCV、NumPy、Pillow和Matplotlib等工具的使用,并通过代码实例展示了图像读写、处理和可视化的方法。实际应用包括自动驾驶、人脸识别、物体检测等。未来趋势涉及深度学习、边缘计算和量子计算,同时也讨论了数据不足、模型解释性和计算资源等挑战。
|
3月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
310 62
使用Python实现深度学习模型:智能质量检测与控制
|
2月前
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
3月前
|
机器学习/深度学习 计算机视觉
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
本文介绍了如何使用OpenCV进行特定区域的目标检测,包括人脸检测实例,展示了两种实现方法和相应的代码。
101 1
目标检测笔记(六):如何结合特定区域进行目标检测(基于OpenCV的人脸检测实例)
|
2月前
|
机器学习/深度学习 PyTorch TensorFlow
使用Python实现智能食品质量检测的深度学习模型
使用Python实现智能食品质量检测的深度学习模型
167 1
|
3月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
193 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
3月前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
60 0
|
3月前
|
算法 计算机视觉 Python
圆形检测算法-基于颜色和形状(opencv)
该代码实现了一个圆检测算法,用于识别视频中的红色、白色和蓝色圆形。通过将图像从RGB转换为HSV颜色空间,并设置对应颜色的阈值范围,提取出目标颜色的区域。接着对这些区域进行轮廓提取和面积筛选,使用霍夫圆变换检测圆形,并在原图上绘制检测结果。
101 0