tesseract-ocr 适用于 EC2,不适用于 lambda
tesseract-ocr works on EC2, not 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) {
...
运行s 在我的 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": "" })
"Error during processing" 错误是由 tesseract 作为顶级包罗万象发出的。我将对 tesseract 进行检测并尝试进一步缩小问题范围。
我是怎么来到这里的:
- 我的 EC2 机器是 t2.micro 运行ning Amazon Linux in us-east-1 (amzn-ami-hvm-2014.09.2.x86_64-ebs ( ami-146e2a7c)).
- 我安装了 node 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 正在执行我的函数的陈旧版本。解决方案是在调用更新函数之前始终删除函数。
我的目标是 运行 AWS Lambda 中的 tesseract-ocr。
我构建了一个尝试镜像 Lambda 环境的 EC2 实例。在两种环境中都可以成功执行不带参数的 tesseract。然而,任何实质性图像处理的尝试,例如此代码:
tess = child_process.exec('tesseract input.tif output -l eng -psm 1 hocr', function(error, stdout, stderr) {
...
运行s 在我的 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": "" })
"Error during processing" 错误是由 tesseract 作为顶级包罗万象发出的。我将对 tesseract 进行检测并尝试进一步缩小问题范围。
我是怎么来到这里的:
- 我的 EC2 机器是 t2.micro 运行ning Amazon Linux in us-east-1 (amzn-ami-hvm-2014.09.2.x86_64-ebs ( ami-146e2a7c)).
- 我安装了 node 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 正在执行我的函数的陈旧版本。解决方案是在调用更新函数之前始终删除函数。