LINUX.ORG.RU
ФорумAdmin

bash скрипт+распознавание текста+и массовое переименнование

 , ,


2

2

Задача следующая, которую хочу оптимизировать с помощью bash скрипта. Хочу предупредить что я в этом деле малознающий.

Есть каталог со сканированными изображениями в формате: сканирование.jpg сканирование1.jpg ... сканированиеN.jpg. В этих *jpg есть строка где указана фамилия имя отчество. Необходимо: эту строку распознать как текст и переименовать этот *jpg в котором распознавали и так все остальные...

Как вижу решения я(может и немного некорректное): С помощью imagemagic кадрировать строку с ФИО командой #convert -crop 830x60+80+235 input.jpg output.jpg в отдельный каталог и уже в этом каталоге с помощью #tesseract output.jpg 1.txt расспознавать текст, который потом необходимо использовать в названиях *jpg .

Далее я не знаю что мне делать. Будьте добры, помогите или скажите какого хода мыслей мне придерживаться?! Заранее спасибо!



Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от vodz

Нет((((((( Это заявления при оформлении документов)))

isaecf
() автор топика
Ответ на: комментарий от isaecf

ты можешь заменить критичные слова на вымышленные, главное оставить маркеры, навроде «Я,» и «Фото», по которым легко ориентироваться и, что более важно, сохранить все переносы строк и пробельные символы.

можешь даже скопипастить только строку с фио и ещё две вокруг неё.

одного распознанного скана хватит.

anonymous
()
Ответ на: комментарий от vodz

Нет))) Это заявления при оформлении документов. Вот и понадобился такой скрипт

isaecf
() автор топика
Ответ на: комментарий от isaecf
#!/bin/bash

inputdir="./input_picture"
outputdir="./output_picture"

[ -d "$inputdir" ] || exit 1
[ -d "$outputdir" ] || exit 2
tmpfile=$(mktemp || exit 3)
status=0

for f in "$inputdir"/*.jpg; do
    tesseract -l ukr "$f" - > $tmpfile
    fio=$(sed -rn 's/^[Яя][,.] (.*)/\L\1/; T lab; s/((^| ).)/\U\1/gp; q; :lab' "$tmpfile")
    if [ -z "$fio" ]; then
        orig=$(basename "$f")
        txt=${orig%.jpg}.txt
        echo ФИО не найдены в файле \"$f\", текст записан в \"$outputdir/$txt\"
        cp "$tmpfile" "$outputdir/$txt"
        # mv "$f" "$outputdir"
        status=4
    else
        mv "$f" "$outputdir/$fio.jpg"
    fi
done

exit $status
anonymous
()
Ответ на: комментарий от anonymous

Просто прекрасно! Скажу честно не все строки в этом скрипте мне понятны, но обязательно разберусь!

Но все же для меня не понятно как (где этот момент кода) между словами «Я» и «Фото» выбираются слова для того чтобы потом ними переименовать файл ?

isaecf
() автор топика
Ответ на: комментарий от isaecf

добавь перед последней строкой ещё строку rm "$tmpfile".

где этот момент кода

вот эта регулярка ^[Яя][,.] (.*) выбирает строку, начинающуюся с «Я, », «Я. », «я, » или «я. » и выводит всё, что идёт после, до конца строки. «Фото» распознаётся двумя строками ниже, поэтому его в регулярке нет, в нём нет необходимости.

выбранные фио приводятся к нижнему регистру командой \L, которая перед первой \1.

затем второй регуляркой ((^| ).) выбираются все первые буквы в словах, составляющих фио, и приводятся к верхнему регистру командой \U.

anonymous
()
Ответ на: комментарий от anonymous

Но есть еще такие не критичные моменты, которые выяснились при большом потоке: 1. Если фамилия или имя вида «ИВАНОВ-ПЕТРОВ», то оно выводит как Иванов-петров 2.И все таки иногда цепляет слово «Фото», т.е. в конце ФИО добавляет еще слово «Фото».

Эти моменты можно еще как-то поправить?

isaecf
() автор топика
Ответ на: комментарий от isaecf

ага, проверял просто.

поменяй строчку с «fio=...» на

fio=$(sed -rn 's/^[Яя][,.] (.*)/\L\1/; T lab; s/((^|[- ]).)/\U\1/g; s/Фото$//; p; q; :lab' "$tmpfile")

anonymous
()
Ответ на: комментарий от anonymous

Вообще, шикардос))) Огромная благодарность)) Все работает хорошо, правда сам tesseract путает некоторые символы, а так все работает)))

isaecf
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.