Как обрезать лица в кадре без потери качества в opencv python - PullRequest
1 голос
/ 01 апреля 2020

У меня есть computer-vision проект, в котором я делаю вывод о прямой трансляции видео с USB-камеры. Несмотря на то, что камера - это камера Full HD от Logitech, но из-за проблем с установкой она установлена ​​немного дальше, чем обычно работает человек. Приложение распознает лица человека и, если оно unrecognized или отсутствует в базе данных, приложение начинает сохранять изображения лиц, чтобы их можно было использовать для переподготовки модели распознавания лиц.

Ниже показано, как это сделать. полный конвейер работает:

Frame -> Person detection in frame -> Person tracking starts 
                 |-> Face detection from person image -> Face recognition
                                                            |-> If unrecognized starts saving face images

Теперь давайте возьмем изображение ниже кадра:

enter image description here

Как вы можете видеть, что изображение довольно ясно, и лицо хорошо видно. Теперь, запустив person detection на этом и сохранив изображение человека, оно выглядит примерно так:

enter image description here

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

enter image description here

Теперь, как вы видите, размер изображения лица очень мал, и поэтому нам нужно изменить его размер так, чтобы он был правильно виден. Таким образом, после изменения размера он выглядит следующим образом:

enter image description here

Теперь после изменения размера он выглядит немного размытым, из-за чего иногда игнорируется распознаванием лиц или не опознано. Ниже приведен код, который я использую для сохранения и изменения размера изображения:

width = face_endX - face_startX
height = face_endY - face_startY

face_image = person_image[face_startY:face_startY + height, face_startX:face_startX + width]

scale_percent = 150  
width = int(face_image.shape[1] * scale_percent / 100)
height = int(face_image.shape[0] * scale_percent / 100)

dim = (width, height)
resized_img = cv2.resize(image, dim, interpolation=cv2.INTER_LANCZOS4)  

cv2.imwrite("face_image.jpg", resized_img)

Итак, в приведенном выше коде я сначала получаю ширину и высоту, а затем, используя координаты ограничивающего прямоугольник лица, создаю изображение лица. Затем я устанавливаю scale_percent на 150, а затем изменяю размер и сохраняю изображение.

Может кто-нибудь помочь мне предложить несколько хороших способов, с помощью которых можно немного изменить размер изображения, а также сохранить качество изображения.

...