使用Python和OpenCV实现实时人脸检测并保存截图

在本篇博客中,我们将使用Python和OpenCV库实现一个实时人脸检测的小项目。我们将利用OpenCV中的Haar级联分类器来检测摄像头捕获的图像中的人脸。

项目功能

  1. 通过摄像头实时捕获视频流。
  2. 使用Haar级联分类器检测视频帧中的人脸。
  3. 在检测到的人脸周围绘制矩形框。
  4. 实时显示检测结果。
  5. 截图人脸并保存。

环境准备

确保您已经安装了Python和OpenCV。如果尚未安装,请按照以下步骤进行安装:

  1. 安装Python:请访问Python官网下载并安装适合您操作系统的Python版本。
  2. 安装OpenCV:在命令行中输入以下命令以安装OpenCV库:
    pip install opencv-python
    

项目代码

首先,我们需要导入所需的库:

import cv2

接下来,加载预训练的Haar级联分类器: 

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

现在,我们将编写一个函数来检测图像中的人脸并在检测到的人脸周围绘制矩形框: 

def detect_faces(img, cascade):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    return img

 最后,我们将捕获摄像头的视频流,并对每一帧应用人脸检测:

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    frame = detect_faces(frame, face_cascade)
    cv2.imshow('Real-time Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

现在,您可以运行上面的代码,启动实时人脸检测程序。在弹出的窗口中,您应该能看到摄像头捕获的图像,检测到的人脸周围用矩形框标记。按“q”键退出程序。

但是如果要实现截图并且保存到文件夹还需要:
导入额外的库来处理时间和文件操作:

def save_faces(img, faces, output_dir):
    for i, (x, y, w, h) in enumerate(faces):
        face = img[y:y + h, x:x + w]
        filename = os.path.join(output_dir, f'face_{i}.png')
        cv2.imwrite(filename, face)

现在,我们需要稍微修改 detect_faces 函数,使其返回检测到的人脸坐标:

def detect_faces(img, cascade):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    return img, faces

接下来,在捕获摄像头的视频流的循环中,我们将为每个检测到的人脸创建一个以实时时间命名的文件夹,并将人脸截图保存到其中:

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    frame, faces = detect_faces(frame, face_cascade)

    if len(faces) > 0:
        timestamp = datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
        output_dir = os.path.join('faces', timestamp)
        os.makedirs(output_dir, exist_ok=True)
        save_faces(frame, faces, output_dir)

    cv2.imshow('Real-time Face Detection', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

现在,当程序检测到人脸时,它将自动截取人脸并将其保存为PNG格式的图像。这些图像将保存在一个名为 "faces" 的文件夹中,该文件夹中包含以实时时间命名的子文件夹。按“q”键退出程序。

你可能感兴趣的:(python,开发工具,人工智能,python,opencv,人工智能)