3 Stimmen

Welche anderen Diagnosemethoden kann ich verwenden, um dieses spezielle Perl-Problem zu lösen?

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

3voto

hobbs Punkte 204816

Für den Anfang würde ich versuchen, den Wert von $miDoc->{Images} -- gibt es sie? Wenn sie existiert und eine Sammlung ist, enthält sie dann etwas? Wenn sie etwas enthält, was ist es? Ein Fehler? Oder vielleicht nur eine andere Struktur, als Sie erwartet haben? warn , Dumper und ein wenig Erkundung kann einen langen Weg bedeuten.

Übrigens, wenn Sie das "moderne" Ding machen wollen und es Ihnen nichts ausmacht, ein schickes Tool von CPAN zu nehmen, versuchen Sie Devel::Dwarn -- es macht die Ausgabe in stderr sogar mehr Spaß machen, als es ohnehin schon war :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X