我的目标是在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,并尝试进一步缩小问题范围。
我是怎么来到这里的:
我想知道出了什么问题 - 或者如何诊断它。
谢谢你, 戴夫
答案 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。