Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Простое распознавание pdf-файлов с помощью cuneiform

Сидел я последние несколько часов и занимался тем, что вручную набивал то же самое, что написано в pdf-файле (нераспознанном). Плюнул на это, поставил cuneiform и к нему графическую морду — yagf.

Внимание! В yagf есть опция "импортировать pdf". Я сдуру выбрал ее (у меня 27-страничный pdf, не думал я, что он может так раздуться), и yagf начал при помощи pdf2ppm импортировать файл. Похоже, выбрал он довольно "крутое" разрешение, т.к. после 20-й страницы yagf отожрал уже 1.6ГБ оперативки и система начала жалобно отваливаться. Т.к. у меня уже вторую неделю Octave пыхтит-считает, я решил не испытывать произвола судьбы от oom-killer'а и при помощи всяких разных клавиатурных комбинаций и top'а убил-таки эту штуку.
Позже оказалось, что yagf вполне адекватен, если картинки "попроще". Но его использовать неудобно - зачем нам лишняя сущность?
Так был рожден скриптик:

#!/bin/sh
# this script has been written by Eddy 
#
#		recognize_pdf - распознает pdf-файлы при помощи cuneiform
# зависит от cuneiform и pdftoppm
#
# Создан 25-го Апрель 2012 года в 18:12
#

if [ $# == 0 ]; then
	echo -e "\nUsage: $(basename $0) filename.pdf,\n\tneeds some space for temporary ppm-files,\n\tsaves results to file filename.txt\n"
	exit -1
fi

NAME=$(bsnm $1)

# 1. Преобразуем pdf в ppm'ы
echo -e "\nConvert pdf to a lot of ppms"
pdftoppm $1 $NAME

# 2. Распознаем каждый рисунок
echo -e "\nRecognize every file\n"
for PPM in $(ls -1 ${NAME}-*ppm)
do
	echo -n "$PPM .. "
	cuneiform -l ruseng -f smarttext ${PPM} -o ${PPM}.txt
	echo "done!"
done

# 3. Собираем все вместе
rm -f ${NAME}.txt
cat $(ls -1 ${NAME}-*txt) > ${NAME}.txt

# 4. Подчищаем мусор
echo -n "Ready, cleaning ..."

rm -f ${NAME}-*.txt ${NAME}-*.ppm

echo "Done!"

Все отлично заработало. Правда, есть одно "но": cuneiform сохраняет данные в UTF-8, а iconv и enconv отказались конвертировать мне эти файлы в нормальную кодировку. Ничего, из этого я тоже найду выход.

UPD: Ключик -c для iconv спас меня.
Tags: bash, ocr, велосипедостроение
Subscribe

  • Нафиг не нужная поделка

    Зашел на одном из форумов спор, что невозможно поднять (N-1) устройство CDC-ACM на микроконтроллере с N концевыми точками (N<=8). ОК, держите…

  • Велосипедостроение

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

  • Очередной терминальный клиент

    Замучившись пересобирать свой простейший терминальный клиент каждый раз, как нужно изменить имя устройства или скорость, решил таки достать из…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 6 comments