Обрезка паспортных фотографий автоматически звучит определенно выполнимо. Фиксированные условия освещения, всегда лицом вперед, постоянный формат изображения ... Я не думаю, что можно было бы попросить более благоприятные условия для обнаружения лица.
Я попытался использовать 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% (во второй строке сценария) от ширины обнаруженного лица. Вот четыре изображения, которые я получаю:
что уже довольно хорошо. Вверху всегда остается некоторое пустое пространство, которое я смог удалить, просто добавив «-fuzz 10% -trim» в вызове convert
. Вот результат первого изображения после этого:
Не слишком плохой для быстрого сценария, и есть много возможностей для улучшения. Например, большинство паспортов используют портретную ориентацию, поэтому имеют разный вертикальный / горизонтальный коэффициент (обычно 1,3). Кроме того, лица, как правило, слегка смещены вверх (вероятно, на 1,3). Поправка на них приведет к лучшему урожаю, избегая необходимости полностью обрезать пустое пространство сверху.
Было бы неплохо, если бы вы могли опубликовать (даже в частном порядке) образец планшетного сканирования, чтобы проверить этот скрипт на предмет реального вывода.
Конечно, это предложение требует установки Linux. Но если я правильно понимаю, то для автоматизации этой утомительной задачи вполне разумно настроить отдельную установку или даже виртуальную машину.
Если конфиденциальность не является проблемой (но я сомневаюсь), мне было бы интересно помочь написать достойное решение в обмен на обрезанные лица, которое я бы использовал для улучшения модели распознавания лиц.