Я распознаю лица с помощью haarcascade и отслеживаю их с помощью веб-камеры, используя OpenCV. Мне нужно сохранить каждое отслеживаемое лицо. Но проблема в том, когда люди двигаются. В этом случае лицо становится размытым.
Я пытался решить эту проблему с помощью детектора лица opencv dnn и Laplacian с помощью следующего кода:
blob = cv2.dnn.blobFromImage(cropped_face, 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()
confidence = detections[0, 0, 0, 2]
blur = cv2.Laplacian(cropped_face, cv2.CV_64F).var()
if confidence >= confidence_threshold and blur >= blur_threshold:
cv2.imwrite('less_blurry_image', cropped_face)
Здесь я попытался ограничить сохранение лица, если оно не размытое из-за движения, на setting blur_threshold
до 500 и confidence_threshold
до 0,98 (т.е. 98%).
Но проблема в том, что если я меняю камеру, мне придется снова вручную изменить пороговые значения. И в большинстве случаев установка порогового значения опускает большинство граней.
Кроме того, его трудно обнаружить, поскольку фон всегда четкий по сравнению с размытым лицом.
Так что мой вопрос в том, как я могу обнаружить это размытое изображение на лице. Я знаю, что могу обучить модель ML обнаружению движения лица. Но для этого потребовались бы большие вычислительные ресурсы.
Более того, мне понадобится огромное количество аннотированных данных для обучения, если я пойду по этому пути. Что не так легко для такого студента, как я.
Следовательно, я пытаюсь обнаружить это с помощью OpenCV, который будет намного менее ресурсоемким по сравнению с использованием модели ML для обнаружения.
Есть ли менее ресурсоемкое решение для этого?