1

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

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

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

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

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

1 ответ1

1

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

Я попытался использовать facedetect, чтобы увидеть результаты на вашем образце изображения:

необработанный вывод Facedetect

Паспорта бывают разных форматов и размеров, поэтому они будут упаковываться на планшет сканера нерегулярно, но я предполагаю, что вы всегда будете размещать фотографии в вертикальном положении. facedetect даст нам центры и размеры всех лиц. В частности, мы можем использовать размер лица и пропорционально обрезать область вокруг него. Поскольку фотографии на паспорте имеют тенденцию покрывать фиксированную область фотографии, это представляется относительно безопасным предположением.

Обрезать субрегионы изображения действительно легко, используя ImageMagick. Я написал небольшой (и грубый) скрипт оболочки для автоматизации процесса:

#!/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 "${w}x${h}+$x+$y" "${fileno}_$n.jpg"
    n=$(($n + 1))
  done
  fileno=$(($fileno + 1))
done

Я эмпирически определил область границы в 60% (во второй строке сценария) от ширины обнаруженного лица. Вот четыре изображения, которые я получаю:

1_1 1_2 1_3 1_4

что уже довольно хорошо. Вверху всегда остается некоторое пустое пространство, которое я смог удалить, просто добавив «-fuzz 10% -trim» в вызове convert . Вот результат первого изображения после этого:

1_1 обрезается

Не слишком плохой для быстрого сценария, и есть много возможностей для улучшения. Например, большинство паспортов используют портретную ориентацию, поэтому имеют разный вертикальный / горизонтальный коэффициент (обычно 1,3). Кроме того, лица, как правило, слегка смещены вверх (вероятно, на 1,3). Поправка на них приведет к лучшему урожаю, избегая необходимости полностью обрезать пустое пространство сверху.

Было бы неплохо, если бы вы могли опубликовать (даже в частном порядке) образец планшетного сканирования, чтобы проверить этот скрипт на предмет реального вывода.

Конечно, это предложение требует установки Linux. Но если я правильно понимаю, то для автоматизации этой утомительной задачи вполне разумно настроить отдельную установку или даже виртуальную машину.

Если конфиденциальность не является проблемой (но я сомневаюсь), мне было бы интересно помочь написать достойное решение в обмен на обрезанные лица, которое я бы использовал для улучшения модели распознавания лиц.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .