Распознавание лица Python и сохранение файла с помощью cv2 - PullRequest
1 голос
/ 20 сентября 2019

Я впервые пишу вопрос, так что извините за любые ошибки.Я пытаюсь написать сценарий, который будет выполнять face_recognition и сохранять видеофайл одновременно, и я думаю, что возникают проблемы с задержкой.Когда нет лица, которое можно обнаружить, оно прекрасно сохраняет видеофайл.Когда есть лицо, хотя, кажется, получает каждый второй кадр.Я чувствую, что это потому, что он выполняет вычисления для определения лица, которое не позволяет сохранить следующий кадр.Это можно обойти?может быть многопоточность или многопроцессорность?

import face_recognition as fr
import os
import face_recognition
import numpy as np
import cv2
def get_encoded_faces():
    encoded = {}
    for dirpath, dnames, fnames in os.walk("./faces"):
        for f in fnames:
            if f.endswith(".jpg") or f.endswith(".png"):
                face = fr.load_image_file("faces/" + f)
                encoding = fr.face_encodings(face)[0]
                encoded[f.split(".")[0]] = encoding

    return encoded
def unknown_image_encoded(img):
    face = fr.load_image_file("faces/" + img)
    encoding = fr.face_encodings(face)[0]
    return encoding
faces = get_encoded_faces()
faces_encoded = list(faces.values())
known_face_names = list(faces.keys())
def FindFace(img):
    face_locations = face_recognition.face_locations(img)
    unknown_face_encodings = face_recognition.face_encodings(img, face_locations)
    face_names = []
    for face_encoding in unknown_face_encodings:
        matches = face_recognition.compare_faces(faces_encoded, face_encoding)
        name = "Unknown"
        face_distances = face_recognition.face_distance(faces_encoded, face_encoding)
        best_match_index = np.argmin(face_distances)
        if matches[best_match_index]:
            name = known_face_names[best_match_index]
        face_names.append(name)
        #cv2.imwrite('final_image.png',img)
video_capture = cv2.VideoCapture(1)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc('M','J','P','G'), 20.0, (640,480))
if not video_capture.isOpened():
    raise Exception("Could not open video device")
while(video_capture.isOpened()):
    ret, frame = video_capture.read()
    out.write(frame)
    #cv2.imshow('Video', frame)
    FindFace(frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

video_capture.release()
cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...