Автоматически определять лица на картинке

1305
abel

На моем рабочем месте фотографии паспортного размера сканируются вместе, затем режутся на отдельные фотографии и сохраняются с уникальными номерами файлов. В настоящее время мы используем Paint.net, чтобы вручную выбирать, вырезать и сохранять фотографии.

Я видел, что Sony Cybershot Camera имеет функцию распознавания лиц. Google также дает мне кое-что об iphoto при поиске по распознаванию лиц. Picasa также имеет обнаружение лица. Существуют ли способы автоматического определения лиц в документе, которые позволили бы повысить производительность труда на моем рабочем месте за счет сокращения времени, необходимого для обрезки отдельных изображений.

Образец отсканированного документа (реальный документ состоит из 5 строк по 4 изображения в каждой = 20 фотографий): (от: http://www.memorykeeperphoto.com/images/passport_photo.jpg, fairuse)

образец изображения

Например, В Picasa 3.8 при нажатии «Вид»> «Люди» отображаются все лица, и меня просят назвать их, могу ли я автоматически сохранять эти отдельные изображения с именами в виде различных изображений.

1
Обнаружение лица действительно необходимо (нужно захватить только лицо) или разбивает целые изображения, что вам действительно нужно сделать ... Большинство сканеров поддерживают это "из коробки", и простой сценарий может разделяться на ПОСТОЯННЫЕ координаты ... просто мысль. Кстати, это будет на Linux. Не 100% на окнах RobotHumans 13 лет назад 0
распознавание лиц не обязательно, но их разбиение есть. Проблема в том, что фотографии размещены неравномерно, как на изображении выше. ручное размещение в сканерах создает случайные меры, плюс изображения паспортного размера бывают разных размеров, 4x4, 5x4, 4x3 и т. д. abel 13 лет назад 0
@ aking1012 Что вы подразумевали под большинством сканеров, поддерживают это «из коробки», у меня есть сканер hp scanjet 2400 и сканер panasonic abel 13 лет назад 0
если у вас нет перекрывающихся изображений, большинство сканеров, которые я использовал, поставляются с программным обеспечением, которое разделяется на «идеально белый» фон RobotHumans 13 лет назад 0
У меня нет ни одного из этих сканеров наготове, но я хотел бы изучить предоставленное программное обеспечение - я сделал это на другом планшете HP. RobotHumans 13 лет назад 0
серия 4000 поддерживает это, посмотрите, работает ли их программное обеспечение для редактирования с вашим оборудованием или просто отказывается устанавливать ... RobotHumans 13 лет назад 0
@ aking1012 вопрос о SO имеет некоторые дополнительные детали http://stackoverflow.com/questions/3872112/automatic-face-detection-using-api abel 13 лет назад 0

1 ответ на вопрос

1
tardis

Cropping passport pictures automatically sounds definitely doable. Fixed lighting conditions, always facing forward, consistent image format... I don't think one could ask for more favorable conditions for face detection.

I tried to use facedetect to see the results on your sample image:

raw facedetect output

Passports come in different formats and sizes, so they will be packed on the flatbed of the scanner irregularly, but I assume you will place the pictures always upright. facedetect will give us the centers and size of all the faces. In particular, we can use the size of the face and crop the area around it proportionally. Since passport pictures tend to cover a fixed area of the photograph, it seems to be a relatively safe assumption.

Cropping subregions of an image is really easy using ImageMagick. I wrote a little (and rough) shell script to automate the process:

#!/bin/sh pc=60 files="P1Xb8.jpg" fileno=1 for file in $files; do n=1 facedetect $file | while read x y w h; do border=$(($w * $pc / 100)) x=$(($x - $border)) y=$(($y - $border)) w=$(($w + $border * 2)) h=$(($h + $border * 2)) echo $x $y $w $h convert "$file" -gravity NorthWest -crop "$x$+$x+$y" "$_$n.jpg" n=$(($n + 1)) done fileno=$(($fileno + 1)) done 

I empirically defined a border area of 60% (in the second line of the script) of the width of the detected face. These are the four images I get:

1_1 1_2 1_3 1_4

which is already pretty good. There's always some white space left at the top, which I was able to remove by just adding "-fuzz 10% -trim" in the convert invocation. Here's the result of the first image after that:

1_1 trimmed

Not too shabby for a quick script, and there's plenty of room for improvement. For instance, most passports use a portrait orientation, so having a different vertical/horizontal factor (usually 1.3). Also, faces tend to be slightly moved upward (by 1.3 probably). Correcting for those would result in a better crop, avoiding the need of trimming the white space at the top entirely.

It would be nice if you could post (even privately) a sample flatbed scan to test this script against some real output.

Of course, this suggestion requires a Linux installation. But if I understand correctly, it's not entirely unreasonable to setup a dedicated installation or even a virtual machine to automate this tedious task.

If privacy is not an issue (but I doubt), I would actually be interested helping writing a decent solution in exchange for the cropped faces, which I would use to improve the face detection model.

Похожие вопросы