【Python】Python使用OpenCV识别多个人脸,并把识别到的图像存储到本地

【Python】Python使用OpenCV识别多个人脸,并把识别到的图像存储到本地

  • 一、安装依赖项
  • 二、使用 Haar 特征级联分类器进行人脸检测
  • 三、使用 DNN 模块进行人脸检测
  • 3.1、下载预训练模型和配置文件
  • 3.2、示例代码

  • 使用 OpenCV(cv2)进行人脸检测是一种常见的方法,主要依赖于预训练的 Haar 特征级联分类器或深度学习模型(如 DNN 模块)。以下是如何使用 OpenCV 进行人脸检测的详细步骤和示例代码。

    一、安装依赖项

    首先,确保你已经安装了 OpenCV 库:

    pip install -i https://mirrors.tools.huawei.com/pypi/simple --trusted-host mirrors.tools.huawei.com opencv-python
    

    二、使用 Haar 特征级联分类器进行人脸检测

    OpenCV 提供了预训练的 Haar 特征级联分类器,可以用于人脸检测。以下是使用 Haar 特征级联分类器进行人脸检测的示例代码:

    import cv2
    
    # 加载预训练的 Haar 特征级联分类器
    face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    
    # 加载图像并转换为灰度图像
    image_path = 'path_to_your_image.jpg'
    image = cv2.imread(image_path)
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
    # 进行人脸检测
    faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
    # 绘制检测到的人脸
    for (x, y, w, h) in faces:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
    
    # 显示图像
    cv2.imshow('Detected Faces', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    三、使用 DNN 模块进行人脸检测

    OpenCV 的 DNN 模块提供了更高级的深度学习模型进行人脸检测。以下是使用 DNN 模块进行人脸检测的示例代码:

    3.1、下载预训练模型和配置文件

    首先,下载以下预训练模型和配置文件:

  • 模型文件:deploy.prototxt
  • 权重文件:res10_300x300_ssd_iter_140000.caffemodel
  • 你可以从以下链接下载这些文件:

  • deploy.prototxt
  • res10_300x300_ssd_iter_140000.caffemodel
  • 3.2、示例代码

    import cv2
    import numpy as np
    from datetime import datetime
    
    """
    Python使用OpenCV识别多个人脸,并把识别到的图像存储到本地
    """
    
    # 加载预训练模型和配置文件
    model_file = 'res10_300x300_ssd_iter_140000.caffemodel'
    config_file = 'deploy.prototxt'
    net = cv2.dnn.readNetFromCaffe(config_file, model_file)
    
    # 加载图像
    image_path = 'D:/pic_video/mv3.jpg'  # 替换为自己的图像
    image = cv2.imread(image_path)
    (h, w) = image.shape[:2]
    
    # 将图像转换为 blob
    blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
    
    # 进行人脸检测
    net.setInput(blob)
    detections = net.forward()
    
    print(str(detections.shape[2]))
    
    # 检测到的人脸计数
    face_count = 0
    
    # 绘制检测到的人脸并截取保存
    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.1305:
            box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
            (startX, startY, endX, endY) = box.astype("int")
    
            # 绘制人脸边界框
            cv2.rectangle(image, (startX, startY), (endX, endY), (255, 0, 0), 2)
    
            # 截取人脸图像
            face_image = image[startY:endY, startX:endX]
    
            # 生成文件名
            timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
            face_filename = f'face_{timestamp}_{face_count}.jpg'
    
            # 保存人脸图像
            cv2.imwrite(face_filename, face_image)
    
            # 增加人脸计数
            face_count += 1
    
    # 显示检测结果图像
    cv2.imshow('Detected Faces', image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    

    作者:Tzq@2018

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【Python】Python使用OpenCV识别多个人脸,并把识别到的图像存储到本地

    发表回复