21 дек. 2009 г.

cuneiform + yagf

Если есть сканер с saned, и есть linux (в данном случае Ubuntu 8.04 и Debian Lenny), то можно порешать задачу настройки системы распознавания текстов. Некогда проприетарная, OCR-система Cuneiform сегодня распространяется под свободной лицензией. Ее linux-порт разрабатывается сообществом под Simplified BSD лицензией. Некоторую информацию, а также официальные релизы проекта можно почерпнуть на официальной страничке. Также существует отдельная ветка, разрабатываемая Андреем Боровским, целью которой является работа Cuneiform'a в Linux с текстами на смешанных языках (русский-английский и т.д.). Им же разрабатывается графический интерфейс к консольному cuneiform, под названием YAGF. Вот это все счастье и будем заставлять работать.

Качаем исходные коды cuneiform'a и yagf'a:
wget -c http://symmetrica.net/cuneiform-linux/cuneiform-multilang-0.7.0.tar.gz
wget  http://symmetrica.net/cuneiform-linux/yagf-0.8.1.tar.gz
Далее необходимо установить некоторые дополнительные пакеты. Что-то может быть уже установлено ранее..
wajig install qt4-dev-tools imagemagick libmagick++9-dev libaspell-dev aspell-ru cmake build-essential
(еще необходим qmake, он, зараза, в зависимости от дистрибутива, шкерится в разных пакетах: в убунтах -  libqt4-dev, который доступен из backports-репозитория, в дебиане - qt4-qmake.)
Распаковываем tarball-ы и компилируем/устанавливаем оба пакета:
tar -xzvf cuneiform-multilang-0.7.0.tar.gz
tar -xzvf  yagf-0.8.1.tar.gz
cd cuneiform-multilang-0.7.0
cmake ./ && make && make install ( less readme.txt)
cd ../yagf-0.8.1
cmake ./ && make && make install
Считаем, что сканер уже подключен и настроен, и пользователь, от имени которого происходит запуск yagf'а, находится в группе scanner. Или добавляем его в эту группу.
adduser user scanner
Если при запуске распознавания cureiform не находит libpuma.so или другую необходимую ему библиотеку, то необходимо или пересобрать cuneiform с опцией -DCMAKE_INSTALL_PREFIX=/usr
или использовать скрипт, создающий симлинки на библиотеки из /usr/local/lib в /usr/lib:
#!/bin/bash
for lib in `ls /usr/local/lib/*.so`
do
LIBNAME=`echo $lib | awk -F "/" {'print $5'}`
ln -s $lib /usr/lib/$LIBNAME
done