Opencv使用预训练模型实现人脸检测

718 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

Opencv作为一个强大的视频处理库,在视频处理任务中起到了非常重要的作用。在opencv的安装目录下有预训练好的模型文件可供调用,从而实现人脸检测任务。opencv的下载网址如下opencv.org/releases/。 对于windows下,按照下面的图示进行下载安装即可。

12.PNG

安装完成后,在opencv的安装目录下:opencv\sources\data\haarcascades,即可找到关于人脸识别的一些预训练权重文件。里面包含了许多的权重,文件如下所示。

image.png

使用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()

人脸检测主要就是通过检测人脸中关键点进行定位人脸位置,上述代码可以检测单幅图像也可以进行视频中人脸的检测,具体的检测效果如下。

image.png

权重文件中有多个可以进行人脸检测,但是权重文件的参数不同,检测的效果也有差异,可以根据自己的实际情况进行权重文件的选择,比如人脸较小和人脸较大,使用不同的权重文件所得到的检测效果也不相同。不过如果想得到更精确的人脸检测效果,使用机器学习的方式还是不错,近期我将制作一篇口罩检测的博客,目前正在代码编写过程中,后期可以查阅。