栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

通过virtualenv在AWS Lambda上的Tesseract OCR

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过virtualenv在AWS Lambda上的Tesseract OCR

它不起作用的原因是因为这些python软件包只是tesseract的包装。您必须使用AWS
Linux实例编译tesseract,然后将二进制文件和库复制到lambda函数的zip文件中。

1)使用64位Amazon Linux启动EC2实例;

2)安装依赖项:

sudo yum install gcc gcc-c++ makesudo yum install autoconf aclocal automakesudo yum install libtoolsudo yum install libjpeg-devel libpng-devel libpng-devel libtiff-devel zlib-devel

3)编译安装leptonica:

cd ~mkdir leptonicacd leptonicawget http://www.leptonica.com/source/leptonica-1.73.tar.gztar -zxvf leptonica-1.73.tar.gzcd leptonica-1.73./configuremakesudo make install

4)编译并安装tesseract

cd ~mkdir tesseractcd tesseractwget https://github.com/tesseract-ocr/tesseract/archive/3.04.01.tar.gztar -zxvf 3.04.01.tar.gzcd tesseract-3.04.01./autogen.sh./configuremakesudo make install

5)将语言训练有素的数据下载到tessdata

cd /usr/local/share/tessdatawget https://github.com/tesseract-ocr/tessdata/raw/3.04.00/eng.traineddataexport TESSDATA_PREFIX=/usr/local/share/

此时,您应该可以在此EC2实例上使用tesseract。要复制tesseract的二进制文件并将其用于lambda函数,您需要将一些文件从该实例复制到您上传到lambda的zip文件中。我将发布所有命令以获取包含所需所有文件的zip文件。

6)压缩在lambda上运行tesseract所需的所有内容

cd ~mkdir tesseract-lambdacd tesseract-lambdacp /usr/local/bin/tesseract .mkdir libcd libcp /usr/local/lib/libtesseract.so.3 .cp /usr/local/lib/liblept.so.5 .cp /usr/lib64/libpng12.so.0 .cd ..mkdir tessdatacd tessdatacp /usr/local/share/tessdata/eng.traineddata .cd ..cd ..zip -r tesseract-lambda.zip tesseract-lambda

tesseract-
lambda.zip文件包含lambda运行tesseract所需的所有内容。最后要做的是在zip文件的根目录中添加lambda函数,并将其上传到lambda。这是一个我尚未测试但应该可以工作的示例。

7)创建一个名为main.py的文件,编写一个上面的lambda函数,并将其添加到tesseract-lambda.zip的根目录中:

from __future__ import print_functionimport urllibimport boto3import osimport subprocessscript_DIR = os.path.dirname(os.path.abspath(__file__))LIB_DIR = os.path.join(script_DIR, 'lib')s3 = boto3.client('s3')def lambda_handler(event, context):    # Get the bucket and object from the event    bucket = event['Records'][0]['s3']['bucket']['name']    key = urllib.unquote_plus(event['Records'][0]['s3']['object']['key']).depre('utf8')    try:        print("Bucket: " + bucket)        print("Key: " + key)        imgfilepath = '/tmp/image.png'        jsonfilepath = '/tmp/result.txt'        exportfile = key + '.txt'        print("Export: " + exportfile)        s3.download_file(bucket, key, imgfilepath)        command = 'LD_LIBRARY_PATH={} TESSDATA_PREFIX={} {}/tesseract {} {}'.format( LIB_DIR, script_DIR, script_DIR, imgfilepath, jsonfilepath,        )        try: output = subprocess.check_output(command, shell=True) print(output) s3.upload_file(jsonfilepath, bucket, exportfile)        except subprocess.CalledProcessError as e: print(e.output)    except Exception as e:        print(e)        print('Error processing object {} from bucket {}.'.format(key, bucket))        raise e

在AWS控制台上创建AWS Lambda函数时,上传zip文件并将Hanlder设置为main.lambda_handler。这将告诉AWS
Lambda在zip内查找main.py文件并调用函数lambda_handler。

重要

AWS Lambda的环境有时会发生变化。例如,lambda env的当前图像是amzn-ami-
hvm-2017.03.1.20170812-x86_64-gp2(当您阅读此答案时,可能不是这个图像)。如果tesseract开始返回分段错误,请在Lambda函数上运行“
ldd tesseract”,并查看输出所需的lib(当前为libtesseract.so.3 liblept.so.5 libpng12.so.0)。

感谢您的评论,SergioArcos。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651043.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号