После многих экспериментов я все еще не могу заставить работать следующий скрипт. Мне нужно несколько советов о том, как диагностировать эту конкретную проблему 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