Обнаружение размытия движения обрезанного лица с помощью python, т.е. opencv

1

Я распознаю лица с помощью 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 для обнаружения.

Есть ли менее ресурсоемкое решение для этого?

Теги:
opencv
face-detection
motion-blur

1 ответ

0

Вероятно, вы можете использовать преобразование Фурье (FFT) или дискретное косинусное преобразование (DCT), чтобы выяснить, насколько размыты ваши лица. Размытость на изображениях приводит к исчезновению высоких частот, и остаются только низкие частоты.

Таким образом, вы берете изображение вашего лица, обнуляете его до размера, который будет хорошо работать для FFT или DCT, и смотрите, сколько спектральной мощности вы имеете на более высоких частотах.

Вам, вероятно, не нужен БПФ - DCT будет достаточно. Преимущество DCT заключается в том, что он дает реальный результат (без мнимой части). С точки зрения производительности, FFT и DCT действительно быстрые для размеров, которые имеют степень 2, а также для размеров, которые имеют только факторы 2, 3 и 5 (хотя, если у вас также есть 3 и 5, это будет немного медленнее).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню