amazon-ec2 - tesseract-ocr 适用于 EC2,而不适用于 lambda

标签 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 角色 ({ "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) 中

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

    谢谢,
    戴夫

    最佳答案

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

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

    稍微长一点的答案:tesseract 在幕后调用 fopen wb,显然这在/var/task 中是被禁止的。

    几天前我会注意到这一点,但 Lambda 没有传播我的部署包。因此,有一次我尝试将输出放在/tmp 目录中,但没有任何效果 - 但那是 b/c Lambda 正在执行我的函数的陈旧版本。解决方案是在调用更新函数之前始终删除函数。

    关于amazon-ec2 - tesseract-ocr 适用于 EC2,而不适用于 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29055949/

    相关文章:

    java - Tess4J 可以处理旋转文本吗?

    python - 有没有办法在 ec2 实例中获取实例 ID

    wordpress - AWS Auto Scaling 组和 EFS

    amazon-web-services - AWS : security groups ignoring traffic from elastic IP

    ocr - 限制 tesseract 正在寻找的字符

    javascript - 从终端运行不会产生与从调试运行相同的结果

    amazon-web-services - 从AWS API Gateway返回HTML

    node.js - AWS Lambda - 如何使用 context.identity.cognitoIdentityId 获取相关的 Cognito 用户池用户数据?

    amazon-web-services - 监视 S3 存储桶在过去 x 小时内丢失新文件的最佳策略是什么?

    python - 将 CodeDeploy ValidateService Hook 与 Python 应用程序结合使用