The website "djvu-soft.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Hi-Fi DjVu

Вернуться к разделу "DjVu-программы".


Распознавание в FineReader 8 без вызова его GUI

Автор: Melirius.

FR официально не поддерживает запуск из командной строки с сохранением распознанного пакета в заданное место. Это приходилось делать вручную.

После тщательных раскопок в алгоритме работы FR автором было обнаружено, что его работу всё же можно полностью автоматизировать. Для этого в пакете применяется запуск фонового распознавания FineReader примерно таким макаром:

"C:\Program Files\LizardTech\FR\FineBR.exe" FarbfehnGestunGehrat "C:\Program Files\LizardTech\FR\aga" 5614 "Software\ABBYY\FineReader\8.00" "Software\ABBYY\FineReader\8.00" 1

где FineBR.exe есть скопированный и переименованный файл FineBR.drv, "C:\Program Files\LizardTech\FR\aga" - путь к пакету, а 5614 есть PID процесса, по завершении которого фоновое распознавание прекращается. Самое интересное начинается, если процесса с заданным PID в системе в момент запуска распознавания нет - тогда работа программы продолжается бесконечно, штатными средствами её завершить нельзя, помогает только kill.

В пакете должны присутствовать следующие файлы: textlang.dat, FRBatch.opt, _FRBatch.pac, отвечающие, соответственно, за выбор языков и опций распознавания, а также за происхождение картинок.

В процессе распознавания FineBR.exe переводит изображения в указанной папке, имеющие имена 0001.tif, 0002.tif и т. д., в понятный FR формат и распознаёт их. Остаётся только следить за папкой, и когда все файлы будут распознаны, завершать работу. Такой алгоритм и применён в настоящем пакете.

Приложение к 9-ому FR затруднено рядом обстоятельств: во-первых, в этой версии ABBYY ввела проверку запускающего фонового распознавание приложения на вшивость, то бишь на соответствие каким-то внутренним признакам FineReader.exe (не названию файла —это точно), а во-вторых —был изменён формат FRF-файлов, вновь не документированный. Если кто-то сможет разобраться с данной проблемой, милости просим на профильные форумы в Интернет.


Примечание:

Дальнейшая часть раздела представляет собой исходный текст применяемого в пакете bat-файла с комментариями и может быть пропущена без ущерба для понимания остальной части изложения.


Запускается данный bat-файл с низким приоритетом.

title FR-auto

Задаём окну командного интерпретатора заголовок.

del /q C:\totalcmd\Add-ons\FR-auto.txt

del /q "C:\Program Files\LizardTech\FR\aga\*.*"

xcopy /i /h /y "C:\Program Files\LizardTech\FR\BP" "С:\Program Files\LizardTech\FR\aga\"

Чистим файлы и папки, в папке BP лежит пустая заготовка пакета - это файлы, определяющие режим распознавания и его языки (по дефолту рус/греч/англ); в папке aga будет сам пакет.

"C:\Program Files\LizardTech\Lizardtech Document Express Enterprise\bin\djvudecode.exe" --verbose %1 "C:\Program Files\LizardTech\FR\aga\out.tif"

Расшифровываем переданный в командной строке DjVu-файл.

C:\totalcmd\XnView\nconvert.exe -xall -c 3 -o $####.tif -in tiff  "C:\Program Files\LizardTech\FR\aga\out.tif"

Разбираем тифф на одностраничные с LZW-сжатием с помощью NConvert.

del "C:\Program Files\LizardTech\FR\aga\out.tif"

Удаляем исходник на всякий пожарный - FineBR как-то нервно относится к посторонним tiff-ам в своей папке, временами вылетает.

tasklist /nh /fi "Windowtitle eq FR-auto" > c:\totalcmd\Add-ons\FR-auto.txt

Определяем PID нашего командного процессора.

for /F "skip=1 tokens=1,2* delims= " %%i in (C:\totalcmd\Add-ons\FR-auto.txt) do

for /L %%z in (1,1,%NUMBER_OF_PROCESSORS%) do start /b /d "C:\Program Files\LizardTech\FR" FineBR.exe FarbfehnGestunGehrat "C:\Program Files\LizardTech\FR\aga" %%j "Software\ABBYY\FineReader\8.00" "Software\ABBYY\FineReader\8.00" 1

Вот тут-то и порыта собака :). FineBR вызывается со странными параметрами командной строки. PID ему нужен, чтобы закончить работу, если уходит вызвавшее его приложение. Так как фоновый распознаватель FR работает в один поток, то вызываются столько его экземпляров, сколько у Вас процессоров или ядер. Мешать друг другу они не будут, проверено, распределяя своё внимание лишь по незанятым файлам.

@echo.

@echo.

@echo Please wait...

@echo.

@echo off

@:loop

@ping localhost -n 30 > nul

@for %%i in ("C:\Program Files\LizardTech\FR\aga\????.tif") do if not exist "C:\Program Files\LizardTech\FR\aga\%%~ni.frf"

(echo %%~ni.frf doesn’t exist - continue for another 30 seconds & goto loop)

@echo on

Экзотика - надо же ж как-то дождаться конца распознавания. Ping-ом делаем паузы по 30 сек и проверяем, все ли файлы FRF присутствуют в папке пакета. Для развлечения пользователя печатаем, какого файла программа не нашла.

"C:\Program Files\LizardTech\OCR-new\FRFgrab.exe" -i -p 1 "C:\Program Files\LizardTech\FR\aga\*.frf" > "c:\Program Files\LizardTech\OCR-new\book.txt"

copy %1 %~dpn1.OCR.djvu

"C:\Program Files\LizardTech\OCR-new\djvused.exe" -f "C:\Program Files\LizardTech\OCR-new\book.txt" %~dpn1.OCR.djvu

Здесь вытаскиваем инфу из FRF и внедряем в DjVu.

pause

Ждём-с. . . затем выходим, процессы FineBR видят, что материнское приложение ушло, и дохнут сами.


Скачать файлы к статье  (2 КБ)


19 сентября 2008 г.

E-Mail  (monday2000 [at] yandex.ru)

Hosted by uCoz