持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
Opencv作为一个强大的视频处理库,在视频处理任务中起到了非常重要的作用。在opencv的安装目录下有预训练好的模型文件可供调用,从而实现人脸检测任务。opencv的下载网址如下opencv.org/releases/。 对于windows下,按照下面的图示进行下载安装即可。
安装完成后,在opencv的安装目录下:opencv\sources\data\haarcascades,即可找到关于人脸识别的一些预训练权重文件。里面包含了许多的权重,文件如下所示。
使用opencv进行人脸识别,我们只需要haarcascade_frontalface_default.xml文件就可以。使用人脸检测的代码如下 对于代码进行一下说明,只需要将上述文件拷贝到代码下面的自建目录FaceDataConfiguration中即可。
import cv2 as cv
# 检测函数
def DetectFace(image):
# 转换为灰度图
gray_image = cv.cvtColor(image, cv.COLOR_RGB2GRAY)
# 读取检测预训练权重文件
face_detect = cv.CascadeClassifier("./FaceDataConfiguration/haarcascade_frontalface_default.xml")
# 检测结果
face_result = face_detect.detectMultiScale(gray_image)
# 绘制人脸检测框
for x, y, w, h in face_result:
cv.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv.imshow("result", image)
cv.waitKey(2)
# 检测单幅图像
img = cv.imread("./p1.jpg")
cv.imshow("img", img)
cv.waitKey(0)
cv.destroyAllWindows()
DetectFace(img)
# 检测视频
# cap = cv.VideoCapture(0)
# while True:
# flag, frame = cap.read()
# if not flag:
# break
# DetectFace(frame)
# cap.release()
人脸检测主要就是通过检测人脸中关键点进行定位人脸位置,上述代码可以检测单幅图像也可以进行视频中人脸的检测,具体的检测效果如下。
权重文件中有多个可以进行人脸检测,但是权重文件的参数不同,检测的效果也有差异,可以根据自己的实际情况进行权重文件的选择,比如人脸较小和人脸较大,使用不同的权重文件所得到的检测效果也不相同。不过如果想得到更精确的人脸检测效果,使用机器学习的方式还是不错,近期我将制作一篇口罩检测的博客,目前正在代码编写过程中,后期可以查阅。