Laden...

Fangen von Exceptions, die durch externe Prozesse ausgelöst werden?

Erstellt von BlackMatrix vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.280 Views
B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 8 Jahren
Fangen von Exceptions, die durch externe Prozesse ausgelöst werden?

Hallo Forengemeinde,

ich nutze für meine Anwendung den Tesseract Wrapper für .NET, welches Tesseract (C++) in der Version 3.02 einbindet.

Nun kommt es sporadisch zu C++ und C# Exceptions und ich weiß nicht wie ich die fangen soll. Manchmal passiert es, dass ich Tesseract benutze und dann in einem komplett anderen Modul meiner C# Anwendung eine OutOfMemoryException bekomme, obwohl Tesseract nicht mehr läuft.
Der andere Fall ist, das ab und zu eine C++ Exception kommt und immer wenn die Anwendung abschmiert und ich den Debugger anhängen will in einer debugger_hook.c lande. Im Callstack sehe ich dann, dass die Exception wohl in der libtesseract302.dll geflogen ist. Ich hab nur keine Ahnung, wie ich diese Exception fangen soll, ob der Wrapper evtl. das Bild schon falsch an Tesseract weitergibt und deswegen die Exception kommt. Ich würde bei so einem Fehler am liebsten nur den OCR Vorgang neustarten wollen. Die Fehler treten vorrangig bei Multithreading auf, Tesseract an sich ist multithreadingfähig.

Könnt ihr mir irgendwie helfen?

Viele Grüße

BlackMatrix

502 Beiträge seit 2004
vor 8 Jahren

Hi,

also wir setzen hier Tesseract in vielen unserer Prozesse ein (allerdings noch die 2er Version). Was ich aus (reichlich) Erfahrung sagen kann:

a) Tesseract an sich funktioniert eigentlich ganz gut, hat aber desöfteren Probleme mit den Images. Was genau die Ursache ist, konnte ich noch nicht herausfinden, aber bei uns ist es in etwa bei 1 von 5000 Images so, dass sich Tesseract komplett verabschiedet und dabei meistens dann so im Speicher des Prozesses rumfuhrwerkt, dass der komplette Prozess geötet wird / werden muss... Scheint an den Images zu liegen - woran genau, weiß ich aber nicht.

b) Ich kenn den von Dir genannten Wrapper nicht, aber alle die ich bisher gesehen hab, haben mir immer mehr Ärger gemacht als die Sache wert war... Deshalb starten wir hier Tesseract immer als eigenen Prozess, der dann auch schön überwacht werden kann. Das löst dann auch gleich die unter a) genannten Probleme. Den Overhead für das jeweils Neu-Starten eines Tesseract-Prozesses können wir hier problemlos verschmerzen. Wir haben eine Parallelisierung in unserem Code eingebaut (einzelne Threads, von denen jeder seinen eigenen Prozess startet), was "in Summe" einge gute Performance ergibt.

Bart Simpson

P.S. Ich würd mich freuen, wenn Du Erfahrungsberichte zu Version 3 und/oder dem .net Wrapper hättest 😉

Praxis ist wenn alles funktioniert und keiner weiss warum.
Theorie ist wenn man alles weiss, aber nichts funktioniert.

Bei uns wird Theorie und Praxis vereint: Nichts funktioniert und keiner weiss warum...

B
BlackMatrix Themenstarter:in
218 Beiträge seit 2012
vor 8 Jahren

So wie sich das bei dir anhört, werde ich vermutlich auch wieder auf Tesseract als externen Prozess umschwenken.

Ich hatte die 3.02, die mit der aktuellen Version des genannten Wrappers ausgeliefert wird, am Anfang eigentlich ziemlich gute Erfahrungen gemacht, aber mittlerweile stürzt die Anwendung so häufig ab, dass es sich gar nicht mehr lohnt diesen einzusetzen.

Ich hab wie gesagt auch keine Ahnung wie ich da irgendwelche Exceptions abfangen könnte um meine Anwendung aufrecht zu erhalten. Der Fall, der im Moment ziemlich häufig auftritt, es fliegt irgendeine C++ Exception in der libtesseract302.dll

Es gab ja dann 2 verschiedene Versionen von Google. 1x die 3.03 und einmal die 3.04, wobei beide den Release Candidate Status aufweisten. Ich habe den Wrapper angepasst und die 3.04 eingebunden. Der hat mir dann direkt keine Exceptions mehr geworfen, war aber für meine Begriffe langsamer und das größte Problem, es enstand dann an einer komplett anderen Stelle eine OutOfMemoryException in meiner Anwendung. Nun hat Google die 3.04 als Release markiert und der Entwickler des Wrappers hat angekündigt, dass die nächste Version (v2.5) das neue Release einbinden wird. Darauf warte ich nun sehnsüchtig.