Nach vielen Experimenten kann ich das folgende Skript immer noch nicht zum Laufen bringen. Ich brauche eine Anleitung, wie ich dieses spezielle Perl-Problem diagnostizieren kann. Vielen Dank im Voraus.
Dieses Skript dient zum Testen der Verwendung der OCR-API von Office 2007:
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;
Ich habe einen kleinen Test gemacht. Ich habe eine MDI-Datei geladen, die die OCR-Informationen enthält. Ich löschte die OCR-Methodenzeile und führte das Skript aus, und ich erhielt die erwartete Textausgabe von "print $OCRresult". Aber ansonsten gibt Perl die Fehlermeldung aus
Use of uninitialized value $OCRresult in print at E:\OCR-test.pl line 15
Ich habe den Verdacht, dass etwas mit der Leitung nicht in Ordnung ist.
$miDoc->OCR(LangId => 'miLANG_ENGLISH');
Ich habe versucht, die Parens leer zu lassen oder drei Parameter zu verwenden, z. B. "miLANG_ENGLISH", 1, 1 usw., aber ohne Erfolg. Ich habe auch versucht, mit Microsfot Office Document Imaging zu testen, ob die TIF-Datei, mit der ich experimentiere, als Text erkannt werden kann, und das Ergebnis war positiv.
Welche anderen Diagnosemethoden stehen mir also zur Verfügung?
Oder kann jemand, der zufällig Office 2007 hat, meinen Code mit einem beliebigen jpg-, bmp- oder tif-Bild mit Textinhalt testen und sehen, ob etwas falsch ist?
Vielen Dank im Voraus.
UPDATE
Haha, ich habe endlich herausgefunden, wo das Problem liegt und wie ich es lösen kann. @hobbs, danke für deinen Kommentar :) Die Dinge sind interessant. Als ich versucht habe, auf deinen Kommentar zu antworten, habe ich den Link der Url von Office Document Imaging 2003 VBA-Sprachreferenz und ich habe mir die Sachen dort noch einmal angeschaut. Dabei ist mir die folgende Information aufgefallen:
LangId can be one of the following MiLANGUAGES constants.
miLANG_CHINESE_SIMPLIFIED (2052, &H804)
Ich habe die folgende Zeile der OCR-Methode geändert:
$miDoc->OCR('miLANG_ENGLISH',1,1);
dazu:
$miDoc->OCR(2052,1,1);
Ein paar Anmerkungen: 1. Ich benutze ActivePerl 5.10.0 unter Windows XP (chinesische Version) 2. Vorher habe ich bereits $miDoc->(9) ausprobiert, aber ohne Erfolg
Und plötzlich und wie von Zauberhand erscheint der lästige ERROR "Use of uninitialized value $OCRresult in print at E:\OCR -test.pl Zeile 15" verschwand vollständig und der OCR-Text erschien auf dem Bildschirm. Das OCR-Ergebnis war nicht zufriedenstellend, aber der Parameter "2052" bezieht sich auf Chinesisch, und das TIF-Bild enthält ausschließlich Englisch. Also änderte ich den Parameter in $miDoc->OCR(9,1,1), aber dieses Mal ohne Erfolg. Windows meldete mir diesen Fehler:
unknown software exception (0x0000000d)
Ich änderte das TIF-Bild in eines, das alle chinesischen Zeichen enthält, und änderte den Parameter erneut in "$miDoc->OCR(2052,1,1);", und diesmal funktionierte alles wie erwartet. Das OCR-Ergebnis war zufriedenstellend.
Jetzt denke ich, dass es etwas Seltsames mit meiner Office 2007 OCR-API gibt, und wenn jemand, der zufällig Windows XP (englische Version) ausführt und Office 2007 installiert hat, wahrscheinlich nicht auf diesen Ausnahmefehler mit dem Parameter
$miDoc->OCR(9,1,1);
Wie auch immer, ich bin wirklich froh, dass ich endlich alles zum Laufen gebracht habe :D