Amazon ec2 tesseract ocr在EC2上工作,而不是在lambda上工作

Amazon ec2 tesseract ocr在EC2上工作,而不是在lambda上工作,amazon-ec2,tesseract,aws-lambda,Amazon Ec2,Tesseract,Aws Lambda,我的目标是在AWS Lambda中运行tesseract ocr 我构建了一个EC2实例,试图镜像Lambda环境。在这两种环境中,无参数执行tesseract都会成功。但是,任何实质性图像处理的尝试,例如本代码: tess = child_process.exec('tesseract input.tif output -l eng -psm 1 hocr', function(error, stdout, stderr) { ... 在我的EC2盒上成功运行,但在Lambda中失败,出现以

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

我构建了一个EC2实例,试图镜像Lambda环境。在这两种环境中,无参数执行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角色({“Effect”:“Allow”,“Action”:“Resource”:“})

“处理过程中出错”错误由tesseract发出,作为顶级的“全部捕获”。我将用仪器测试tesseract,并试图进一步缩小问题的范围

我是如何来到这里的:

  • 我的EC2机器是在us-east-1(amzn-ami-hvm-2014.09.2.x86_64-ebs(ami-146e2a7c))中运行Amazon Linux的t2.micro
  • 我安装了节点0.10.33和aws-sdk@2.0.23,与Lambda版本匹配
  • 我从源代码中编译了tesseract和leptonica。添加了一个rpath,并已运行ldd以确认找到了所有依赖项
  • tesseract二进制文件和liblept.so都在我的根目录(/var/task)中
我想知道出了什么问题,或者如何诊断

谢谢,,
Dave

简短回答:输出必须进入/tmp目录,例如

tesseract input.tif /tmp/output -l eng -psm 1 hocr
回答稍微长一点:tesseract在引擎盖下调用fopen wb,显然这在/var/task中是禁止的


几天前我可能会注意到这一点,但Lambda并没有传播我的部署包。因此,有一次我试图将输出放入/tmp目录中,没有效果——但b/c Lambda正在执行我的函数的一个过时版本。解决方案是在调用更新函数之前总是删除函数。

hi,您是否可以发布一个示例?我还与aws lambda一起致力于tesseract,这将非常有帮助。