tesseract-ocr适用于EC2,而非lambda

时间:2015-03-15 00:37:17

标签: amazon-ec2 tesseract aws-lambda

我的目标是在AWS Lambda中运行tesseract-ocr。

我已经构建了一个试图镜像Lambda环境的EC2实例。在没有参数的情况下执行tesseract在两种环境中都成功。然而,任何实质性图像处理的尝试,例如,这段代码:

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

在我的EC2框上成功运行,但在Lambda中失败并出现此错误:

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假设具有管理权限的IAM角色({“效果”:“允许”,“操作”:“”,“资源”:“”})

tesseract将“处理中的错误”错误作为顶级捕获所发出。我打算使用tesseract,并尝试进一步缩小问题范围。

我是怎么来到这里的:

  • 我的EC2机器是运行亚马逊Linux的t2.micro,位于us-east-1(amzn-ami-hvm-2014.09.2.x86_64-ebs(ami-146e2a7c))。
  • 我安装了与Lambda版本匹配的节点0.10.33和aws-sdk@2.0.23。
  • 我从源代码编译了tesseract和leptonica。添加了一个rpath并运行了ldd以确认找到了所有依赖项
  • tesseract二进制文件和liblept.so都在我的根目录下(/ var / task)

我想知道出了什么问题 - 或者如何诊断它。

谢谢你, 戴夫

1 个答案:

答案 0 :(得分:3)

简答:输出必须放在/ tmp目录中,例如

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

稍微长一点的回答:tesseract在引擎盖下调用了wbn,显然在/ var / task中是禁止的。

几天前我会注意到这一点,但Lambda还没有传播我的部署包。所以,有一次我试图将输出放在/ tmp目录中,没有效果 - 但那是b / c Lambda正在执行我的函数的陈旧版本。解决方法是在调用update-function之前始终使用delete-function。