2015-03-15 17 views
5

Mein Ziel ist es, Tesseract-ocr in AWS Lambda zu betreiben.tesseract-ocr arbeitet an EC2, nicht an Lambda

Ich habe eine EC2-Instanz erstellt, die versucht, die Lambda-Umgebung zu spiegeln. Die Ausführung von Tesseract ohne Parameter ist in beiden Umgebungen erfolgreich. Jeder Versuch einer wesentlichen Bildverarbeitung, z.B. dieser Code:

tess = child_process.exec('tesseract input.tif output -l eng -psm 1 hocr', function(error, stdout, stderr) { 
... 

läuft erfolgreich auf meinem EC2-Box, aber nicht in Lambda mit diesem Fehler:

Error: Command failed: Tesseract Open Source OCR Engine v3.04.00 with Leptonica 
Error during processing. 

at ChildProcess.exithandler (child_process.js:648:15) 
at ChildProcess.emit (events.js:98:17) 
at maybeClose (child_process.js:756:16) 
at Process.ChildProcess._handle.onexit (child_process.js:823:5) 
Error code: 1 
Signal received: null 

Lambda ist eine IAM-Rolle mit Administratorrechten ({ "Effect" unter der Annahme: "Zulassen" , "Aktion": "", "Ressource": ""})

Der Fehler "Fehler während der Verarbeitung" wird von Tesseract als ein Catch-All auf der obersten Ebene ausgegeben. Ich werde Instrumente testen und versuchen, das Problem weiter einzugrenzen.

Wie ich hier:

  • Meine EC2-Maschine ist ein t2.micro läuft Amazon Linux in us-east-1 (amzn-ami-HVM-2014.09.2.x86_64-ebs (ami-146e2a7c)).
  • Ich habe den Knoten 0.10.33 und [email protected] installiert, die den Lambda-Versionen entsprechen.
  • Ich kompilierte Tesseract und Leptonica aus der Quelle. Hinzugefügt eine rpath und ausgeführt haben ldd, um zu bestätigen, dass alle Abhängigkeiten
  • Tesserakts Binärdateien und liblept.so sind alle in meinem Stammverzeichnis (/ var/Aufgabe)

Ich würde gerne wissen, was los ist falsch gefunden - oder wie man es diagnostiziert.

Danke, Dave

Antwort

3

Kurze Antwort: Ausgabe im/tmp Verzeichnis, zum Beispiel gehen muss

tesseract input.tif /tmp/output -l eng -psm 1 hocr 

Etwas längere Antwort: tesseract Anrufe fopen wb unter der Haube, und offensichtlich, dass in/var/Aufgabe verboten.

Ich hätte dies vor ein paar Tagen bemerkt, aber Lambda hat meine Bereitstellungspakete nicht verbreitet. Also, das eine Mal, als ich versuchte, die Ausgabe in das Verzeichnis/tmp zu bringen, gab es keinen Effekt - aber das war b/c Lambda führte eine veraltete Version meiner Funktion aus. Lösung ist immer zu löschen-Funktion vor dem Aufruf update-Funktion.

+0

hi, wäre es möglich für Sie, ein Beispiel zu veröffentlichen? Ich arbeite auch an Tesseract mit aws Lambda, das wäre sehr hilfreich. – iCodeLikeImDrunk

Verwandte Themen