使用 CV2 和 DeepFace 加速实时人脸检测

问题描述 投票:0回答:1

我正在尝试构建一个应满足这些要求的实时人脸检测器:

  1. 即使在较暗的环境条件下也尽可能准确
  2. 检测后我可以轻松添加人脸识别模型

这些要求促使我构建了一个脚本,用于从网络摄像头捕获帧,并使用 MTCNN 模型分析这些帧并最终给出输出。即使在较暗的环境中,该解决方案也使我能够获得不错的准确度,并在大约 3.6 秒内检测到面部(一次分析 3 帧,这在准确度和速度之间似乎很划算)。这是我实际使用的代码:

import cv2
from time import sleep
from deepface import DeepFace
import os
import datetime

frames_analyzed = 3
backends = [
  'opencv', 
  'ssd', 
  'dlib', 
  'mtcnn', 
  'retinaface', 
  'mediapipe',
  'yolov8',
  'yunet',
]

while True:
        i = 0
        start_time = datetime.datetime.now()

        while i < frames_analyzed:
                vidcap = cv2.VideoCapture(0)
                if vidcap.isOpened():
                    ret, frame = vidcap.read()
                    if ret:
                        cv2.imwrite("Frames/"+str(i)+".jpg",frame)
                    else:
                        print("Error : Failed to capture frame")
                else:
                    print("Cannot open camera")
                vidcap.release()
                i = i+1
                
        face_detected = 0
        
        for i in range(frames_analyzed-1):
                try:
                        DeepFace.extract_faces(img_path = "Frames/"+str(i)+".jpg", detector_backend = backends[3])
                        face_detected = face_detected+1
                except:
                        continue
                os.remove("Frames/"+str(i)+".jpg")

        end_time = datetime.datetime.now()  
        print(face_detected, (end_time-start_time).total_seconds())

这些是我的问题:

  1. 我的方法对于实时人脸检测是否合理?
  2. 我可以应用任何更改来在快速和准确之间获得更好的平衡吗?
deep-learning computer-vision face-recognition face-detection deepface
1个回答
0
投票
  1. 您可以使用 Mediapipe 代替 MTCNN,这可能是最快的检测器;
  2. 如果你有 GPU / CUDA - 你可以尝试 dlib,它在 GPU 上的运行速度比在 CPU 上快 50 倍。
© www.soinside.com 2019 - 2024. All rights reserved.