Какие другие методы диагностики я могу использовать для решения этой конкретной проблемы Perl? - PullRequest
3 голосов
/ 02 марта 2010

После многих экспериментов я все еще не могу заставить работать следующий скрипт. Мне нужно несколько советов о том, как диагностировать эту конкретную проблему Perl. Заранее спасибо.

Этот скрипт предназначен для тестирования использования Office OCR API:

use warnings;
use strict;
use Win32::OLE;
use Win32::OLE::Const;

Win32::OLE::Const->Load("Microsoft Office Document Imaging 12\.0 Type Library") 
or 
die "Cannot use the Office 2007 OCR API";
my $miDoc = Win32::OLE->new('MODI.Document') 
or die "Cannot create a MODI object";    
#Loads an existing TIFF file
$miDoc->Create('OCR-test.tif'); 
#Performs OCR with the OCR language set to English
$miDoc->OCR(LangId => 'miLANG_ENGLISH'); 
#Get the OCR result
my $OCRresult = $miDoc->{Images}->Item(0)->{Layout}{Text}; 
print $OCRresult;

Я сделал небольшой тест. Я загрузил файл .MDI, содержащий информацию OCR. Я удалил строку метода OCR, запустил скрипт и получил ожидаемый текстовый вывод «print $ OCRresult». Но в противном случае Perl выдаёт мне ошибку, сказав

Use of uninitialized value $OCRresult in print at E:\OCR-test.pl line 15

Я подозреваю, что что-то не так с линией

$miDoc->OCR(LangId => 'miLANG_ENGLISH'); 

Я пытался оставить парены пустыми или использовать три параметра, таких как «miLANG_ENGLISH», 1,1 и т. Д., Но безуспешно. Я также попытался с помощью Microsfot Office Document Imaging проверить, распознает ли TIF, с которым я экспериментирую, текст, и результат был положительным.

Так какие еще методы диагностики у меня есть?

Или кто-то, у кого есть Office 2007, может протестировать мой код с любыми изображениями jpg, bmp или tif, имеющими текстовое содержимое, и посмотреть, что-то не так?

Заранее спасибо.

UPDATE

Хаха, я наконец понял, где проблема и как я могу ее решить. @hobbs, спасибо, что оставили комментарий :) Вещи интересные. Когда я пытался ответить на ваш комментарий, я добавил ссылку на ссылку Справочник по языку документов Office VGA 2003 VBA и еще раз взглянул на материал. И следующая информация попалась мне на глаза:

LangId can be one of the following MiLANGUAGES constants.
miLANG_CHINESE_SIMPLIFIED (2052, &H804)

Я изменил следующую строку метода OCR:

$miDoc->OCR('miLANG_ENGLISH',1,1);

на это:

$miDoc->OCR(2052,1,1); 

Несколько заметок: 1. Я использую ActivePerl 5.10.0 в Windows XP (китайская версия) 2. До этого я уже пробовал $ miDoc -> (9) но без везения

И внезапно и по волшебству эта досадная ОШИБКА, говорящая «Использование неинициализированного значения $ OCRresult при печати в E: \ OCR-test.pl строка 15», полностью исчезла, и на экране появился текст OCRed. Результат распознавания не был удовлетворительным, но параметр «2052» относится к китайскому языку, а изображение TIF содержит весь английский. Поэтому я изменил параметр на $ miDoc-> OCR (9,1,1) но на этот раз без удачи. Windows выкинула мне эту ошибку:

unknown software exception (0x0000000d)

Я изменил изображение TIF, которое содержит все китайские иероглифы, и изменил параметр на «$ miDoc-> OCR (2052,1,1);» снова и на этот раз все работало так, как ожидалось. Результат распознавания был удовлетворительным.

Теперь я думаю, что в моем API OCR Office 2007 есть что-то странное, и если кто-то, кто запускает Windows XP (английская версия) и установит Office 2007, вероятно, не столкнется с этой ошибкой исключения с параметром

$miDoc->OCR(9,1,1); 

В любом случае, я действительно счастлив, что наконец-то все заработало: D

1 Ответ

3 голосов
/ 02 марта 2010

Для начала я бы попробовал сбросить значение $miDoc->{Images} - существует ли оно? Если он существует и является коллекцией, содержит ли он что-нибудь? Если это содержит что-нибудь, что это? Ошибка? Или, может быть, просто другая структура, чем вы ожидаете? warn, Dumper, и небольшое исследование может иметь большое значение.

Кстати, если вы хотите заняться «современным» делом и не возражаете вытащить из CPAN изящный инструмент, попробуйте Devel::Dwarn - он делает дамп в stderr даже более веселее, чем он было уже :) 1009 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...