python opencv 人脸识别

2023-03-12 00:00:00 python opencv 识别

在Python中使用OpenCV进行人脸识别,可以使用cv2.CascadeClassifier和cv2.rectangle函数。下面是一个简单的示例,它将从默认摄像头捕获视频并进行实时人脸识别:

import cv2
# 加载人脸识别器
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# 创建一个VideoCapture对象并从默认摄像头捕获视频
cap = cv2.VideoCapture(0)
# 检查是否成功打开摄像头
if not cap.isOpened():
    print("无法打开摄像头")
    exit()
# 循环读取视频帧
while True:
    # 读取一帧
    ret, frame = cap.read()
    # 检查是否成功读取视频帧
    if not ret:
        print("无法读取视频帧")
        break
    # 将帧转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    # 在灰度图像中检测人脸
    faces = face_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)
    # 显示视频帧
    cv2.imshow("frame", frame)
    # 检查是否按下了ESC键
    if cv2.waitKey(1) == 27:
        break
# 释放资源
cap.release()
cv2.destroyAllWindows()

在上述代码中,我们首先使用cv2.CascadeClassifier函数加载人脸识别器。然后,我们使用cv2.VideoCapture函数创建一个VideoCapture对象并指定摄像头的索引(通常为0,表示默认摄像头)。在一个循环中,我们使用cap.read()方法读取一帧视频,并使用cv2.cvtColor函数将其转换为灰度图像。接下来,我们使用face_cascade.detectMultiScale函数在灰度图像中检测人脸。该函数返回一个包含矩形框位置的元组列表,其中每个矩形框表示一个检测到的人脸。最后,我们使用cv2.rectangle函数在原始图像中绘制矩形框以标记人脸,并使用cv2.imshow函数显示视频帧。我们使用cv2.waitKey函数等待用户按下ESC键以退出循环,并使用cap.release()释放资源,并使用cv2.destroyAllWindows()函数关闭所有窗口。
haarcascade_frontalface_default.xml是一个OpenCV自带的人脸检测器,可以在OpenCV的GitHub仓库中找到。
你可以通过以下步骤从OpenCV的GitHub仓库中获取它:
- 打开以下链接:https://github.com/opencv/opencv/tree/master/data/haarcascades
- 下载haarcascade_frontalface_default.xml文件。
- 将haarcascade_frontalface_default.xml文件保存在你的工作目录或其他适当的位置,以便在Python中使用它进行人脸识别。
请注意,这个人脸检测器并不完美,它可能无法检测到一些人脸或将一些非人脸错误识别为人脸。如果你需要更准确的人脸检测器,你可以尝试使用其他检测器,如基于深度学习的人脸检测器。

相关文章