如何定义 tesseract_cmd 以在 AWS Lambda 函数中使用 Tesseract-OCR
How to define tesseract_cmd to use Tesseract-OCR in AWS Lambda Functions
我正在使用 AWS 处理图像并使用 Tesseract 和 Python 提取文本。在我的后端,我上传了 pytesseract 库和 Tesseract-OCR 文件夹。在本地它工作得很好,我不需要更改 tesseract-cmd 来找到 tesseract.exe。当我将此文件夹上传到 AWS Lambda 时,它 returns 一个 TesseractNotFound 错误提示未安装 tesseract 或它不在您的 PATH 中。我已经尝试更改 tesseract-cmd 但我无法解决它。我的文件夹结构是 /opt/python/lib/python3.7/site-packages,在 site-packages 里面我有我的库(Pillow、pytesseract、Tesseract-OCR)。我已经尝试使用 this and this 选项创建一个新的 Lambda 函数,但都不起作用。我想我可以使用 环境变量 来解决它,但我不知道该怎么做。
error
my folder structure
如果有人知道如何以更好的方式做到这一点,我也会接受作为一个答案
为了解决这个错误,我需要做很多事情,但最终它起作用了。正如所评论的那样,AWS Lambda 运行s 在 Linux 环境中,因此您需要像在 Linux 环境中执行时一样编译库。就我而言,我没有一台 Linux 机器来做这件事,所以我按照以下步骤操作:
您可以跳过第 1 步,只下载文件 here
1 -(如果你没有 Linux 机器)我用 Amazon Linux AMI 启动了一个 EC2 实例,基本实例可以很好地工作。
sudo yum update
sudo yum install git-core -y
sudo yum install docker -y
sudo service docker start
sudo usermod -a -G docker ec2-user #It will allow ec2-user to call docker
执行最后一段代码后,您需要重启EC2实例(断开并重新连接即可)
git clone https://github.com/amtam0/lambda-tesseract-api.git
cd lambda-tesseract-api/
bash build_tesseract4.sh #It will take some time
bash build_py37_pkgs.sh
之后,您将拥有一个文件夹 (lambda-tesseract-api),其中包含您需要的所有文件。就我而言,我创建了一个 GitHub 存储库并将所有文件上传到那里,然后将其下载到我的计算机上以创建我的 Lambda 层。
2 - 下载文件后,您将把 zip 文件一个接一个地上传到层(open-cv、Pillow、tesseract、pytesseract),然后使用 Lambda 函数上的层来运行 宇宙立方体。
这是您将为 tesseract 工作而创建的 lambda 处理程序函数。 (oem、psm、lang是tesseract参数,大家可以了解更多here)
import base64
import pytesseract
def ocr(img,oem=None,psm=None, lang=None):
config='--oem {} --psm {} -l {}'.format(oem,psm,lang)
ocr_text = pytesseract.image_to_string(img, config=config)
return ocr_text
def lambda_handler(event, context):
# Extract content from json body
body_image64 = event['image64']
oem = event["tess-params"]["oem"]
psm = event["tess-params"]["psm"]
lang = event["tess-params"]["lang"]
# Decode & save inp image to /tmp
with open("/tmp/saved_img.png", "wb") as f:
f.write(base64.b64decode(body_image64))
# Ocr
ocr_text = ocr("/tmp/saved_img.png",oem=oem,psm=psm,lang=lang)
# Return the result data in json format
return {
"ocr": ocr_text,
}
您还需要设置一个环境变量。键将是 PYTHONPATH,值将是 /opt/
参考:
(Alex Albracht 回答)
我正在使用 AWS 处理图像并使用 Tesseract 和 Python 提取文本。在我的后端,我上传了 pytesseract 库和 Tesseract-OCR 文件夹。在本地它工作得很好,我不需要更改 tesseract-cmd 来找到 tesseract.exe。当我将此文件夹上传到 AWS Lambda 时,它 returns 一个 TesseractNotFound 错误提示未安装 tesseract 或它不在您的 PATH 中。我已经尝试更改 tesseract-cmd 但我无法解决它。我的文件夹结构是 /opt/python/lib/python3.7/site-packages,在 site-packages 里面我有我的库(Pillow、pytesseract、Tesseract-OCR)。我已经尝试使用 this and this 选项创建一个新的 Lambda 函数,但都不起作用。我想我可以使用 环境变量 来解决它,但我不知道该怎么做。
error
my folder structure
如果有人知道如何以更好的方式做到这一点,我也会接受作为一个答案
为了解决这个错误,我需要做很多事情,但最终它起作用了。正如所评论的那样,AWS Lambda 运行s 在 Linux 环境中,因此您需要像在 Linux 环境中执行时一样编译库。就我而言,我没有一台 Linux 机器来做这件事,所以我按照以下步骤操作:
您可以跳过第 1 步,只下载文件 here
1 -(如果你没有 Linux 机器)我用 Amazon Linux AMI 启动了一个 EC2 实例,基本实例可以很好地工作。
sudo yum update
sudo yum install git-core -y
sudo yum install docker -y
sudo service docker start
sudo usermod -a -G docker ec2-user #It will allow ec2-user to call docker
执行最后一段代码后,您需要重启EC2实例(断开并重新连接即可)
git clone https://github.com/amtam0/lambda-tesseract-api.git
cd lambda-tesseract-api/
bash build_tesseract4.sh #It will take some time
bash build_py37_pkgs.sh
之后,您将拥有一个文件夹 (lambda-tesseract-api),其中包含您需要的所有文件。就我而言,我创建了一个 GitHub 存储库并将所有文件上传到那里,然后将其下载到我的计算机上以创建我的 Lambda 层。
2 - 下载文件后,您将把 zip 文件一个接一个地上传到层(open-cv、Pillow、tesseract、pytesseract),然后使用 Lambda 函数上的层来运行 宇宙立方体。
这是您将为 tesseract 工作而创建的 lambda 处理程序函数。 (oem、psm、lang是tesseract参数,大家可以了解更多here)
import base64
import pytesseract
def ocr(img,oem=None,psm=None, lang=None):
config='--oem {} --psm {} -l {}'.format(oem,psm,lang)
ocr_text = pytesseract.image_to_string(img, config=config)
return ocr_text
def lambda_handler(event, context):
# Extract content from json body
body_image64 = event['image64']
oem = event["tess-params"]["oem"]
psm = event["tess-params"]["psm"]
lang = event["tess-params"]["lang"]
# Decode & save inp image to /tmp
with open("/tmp/saved_img.png", "wb") as f:
f.write(base64.b64decode(body_image64))
# Ocr
ocr_text = ocr("/tmp/saved_img.png",oem=oem,psm=psm,lang=lang)
# Return the result data in json format
return {
"ocr": ocr_text,
}
您还需要设置一个环境变量。键将是 PYTHONPATH,值将是 /opt/
参考: