写点什么

手把手教程|构建无服务器通用文本识别功能

  • 2022 年 3 月 11 日
  • 本文字数:3352 字

    阅读完需:约 11 分钟

​前言

无服务器应用程序可保证您无需配置或管理服务器,即可轻松运行代码内容。本文介绍了一种基于无服务器架构的文本识别 (Optical Character Recognition, OCR) 解决方案可以对自然场景图像中的文字进行精准识别,其底层基于 Amazon Lambda 和 Amazon API Gateway 实现,Amazon Lambda 的按请求付费、自动扩展和易用性使其成为数据科学团队的热门部署选择。采用预训练模型的文本识别是指通过 Amazon Lambda 调用预先训练好的 OCR 机器学习模型,对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程,亦即将图像中的文字进行识别,并以文本的形式返回。该解决方案具有非常广泛的应用场景,可用于印刷体文字识别,手写材料识别,图像内容审核,出版物图像文本电子化等诸多领域。

OCR 识别效果


架构介绍

无服务器架构使用事件驱动型模型。Amazon Lambda 服务运行 Lambda 函数以响应事件。Amazon Lambda 函数可以直接从众多集成的 Amazon 服务(包括 API Gateway)中调用。本方案基于 Amazon CloudFormartion 设计实现,部署后,用户或程序发送 API 请求至 Amazon API Gateway,请求 payload 中需要包含被处理的图片 URL 或 Base64 编码信息,Amazon API Gateway 接收到 HTTP 到请求后,将请求数据发送给对应的 Lambda 函数,Amazon Lambda 函数通过调用存储在 Amazon EFS 里面的预训练模型完成推理,并将文字识别结果(JSON 格式数据)返回给调用发起端。由于基于为无服务器架构设计,所以用户只需按实际调用量付费。

架构图

Amazon API Gateway:一种完全托管的服务,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的 API

Amazon Lambda:一种无服务器的计算服务,让您无需预置或管理服务器、创建可感知工作负载的集群扩展逻辑、维护事件集成或管理运行时,即可运行代码;

Amazon EFS:Amazon Elastic File System (Amazon EFS),提供可扩展性、弹性、可用性和耐用性,可作为企业应用程序和作为服务交付的应用程序的文件存储。为您的开发环境提供一个通用存储库,使您能够以安全有序的方式共享代码和其他文件。

部署方式

首先,请通过浏览器登录您的 Amazon Web Service 账户。登录后在浏览器中打开亚马逊云科技解决方案库首页,然后在方案库里找到 AI Solution Kit 解决方案,点击打开链接后切换到”文本识别(OCR)”选项卡(在页面右上角可以切换显示语言),在页面右侧点击需要部署到的区域(region)按钮在控制台中启动相应的部署模版。


下面,以部署到中国(北京)区域为例,对通用文本识别(OCR)方案进行部署。

请点击“从亚马逊云科技中国(北京)区域控制台中启动方案”按钮启动对应的 Amazon CloudFormation。在创建堆栈页面检查一下 Amazon S3 URL 的链接,然后点击“下一步”按钮继续。


在指定堆栈信息页面您可以修改堆栈名称和认证方式等参数,在参数选项里,由于本解决方案使用 Amazon API Gateway 来接收 API 调用请求,您可以使用 aikitscustomAuthType-xxx 参数指定 API 的调用方式,如果您希望在北京或宁夏区域提供无需身份验证(NONE)即可访问的 API 请求,则需要申请并确保您的 Amazon Web Services 账号已通过 Internet Content Provider (ICP) 备案,80/443 端口可以正常开启。您还可以在“modelType”下选择轻量模型(Lite)。点击“下一步”继续。


  • 模型说明


 

在审核页面上,查看并确认设置。选中确认模板将创建 Amazon Identity and Access Management(IAM)资源的复选框。最后单击“创建堆栈”按钮开始部署。



您可以在 Amazon CloudFormation 控制台的状态列中查看堆栈的状态。大约 15 分钟后看到状态成为 CREATE_COMPLETE 说明创建成功。在堆栈创建成功后,可在 Amazon CloudFormation 的输出/Outputs 标签页中看到以 aikitsInvokeURL 为前缀的记录,请记住对应的调用 URL。


完成这些步骤后,可以打开 Lambda Functions 控制台中的 Lambda 函数检查推理模型调用逻辑,目录结构如下所示,其中,infer_ocr_app.py 为 Lambda Function 调用预训练模型的逻辑代码:


​测试 OCR 功能

REST API 接口

  • HTTP 方法: POST

  • Body 请求参数



  • 请求 Body 示例


{  "url": "https://images-cn.ssl-images-amazon.cn/images/G/28/AGS/LIANG/Deals/2020/Dealpage_KV/1500300.jpg"}
复制代码
  • 示例样图


测试步骤


在配置结束后可以进行 API 调用测试,首先需要下载 Postman 测试工具。

下载地址: https://www.postman.com/downl...

在 Postman 中新建标签页,并把上一步中的 API 调用 URL (aikitsInvokeURL) 粘贴到地址栏。选择 POST 作为 HTTP 调用方法。打开 Body 配置项,选中 raw 和 JSON 数据类型。在 Body 中输入如下测试数据,单击 Send 按钮即可看到相应结果。


  • 返回参数说明


如果在部署 OCR 解决方案时选择的 AWS_IAM 验证方式,需要在请求前打开 Postman 的 Authorization 配置,在下拉列表里选择 Amazon Web Service Signature ,并填写对应账户的 AccessKey、SecretKey 和 Amazon Web Service Region(如 cn-north-1 或 cn-northwest-1 )。

另外,也可以通过 Python 程序来进行测试,在命令行窗口执行如下命令,通过 pip3 安装好相关认证依赖项 aws_requests_auth。

pip3 install aws_requests_auth

把如下 python 源代码保持到本地,并以.py 为文件的后缀名。

import requestsimport jsonfrom aws_requests_auth.boto_utils import BotoAWSRequestsAuth
auth = BotoAWSRequestsAuth(aws_host='[YOUR-API-ID].execute-api.us-east-1.amazonaws.com', aws_region='us-east-1', aws_service='execute-api')
url = 'https://[YOUR-API-ID].execute-api.us-east-1.amazonaws.com/standard/ocr'payload = { 'url': 'https://images-cn.ssl-images-amazon.cn/images/G/28/AGS/LIANG/Deals/2020/Dealpage_KV/1500300.jpg'}response = requests.request("POST", url, data=json.dumps(payload), auth=auth)print(json.loads(response.text))
复制代码

在 Amazon CloudFormation 控制台页面,切换到“输出/Outputs”,找到 aikitsInvokeURL 字段,复制 value 里面的 URL,用于替换 python 源代码里面 url 的地址,并且使用 URL 里面的 API ID 替换 Python 文件里面的[YOUR-API-ID],保存后执行 python3 ocr-iam-auth.py,即可看到如下的测试文本输出结果:

% python3 ocr-iam-auth.py[{'words': 'SALE', 'location': {'top': 38, 'left': 939, 'width': 73, 'height': 26}, 'score': 0.9969024062156677}, {'words': '镇店之宝', 'location': {'top': 89, 'left': 348, 'width': 194, 'height': 47}, 'score': 0.9993890523910522}, {'words': '同步全球天天低价', 'location': {'top': 156, 'left': 367, 'width': 192, 'height': 27}, 'score': 0.9992773532867432}, {'words': '海外购', 'location': {'top': 208, 'left': 348, 'width': 68, 'height': 28}, 'score': 0.9987406730651855}, {'words': '折', 'location': {'top': 241, 'left': 664, 'width': 30, 'height': 25}, 'score': 0.9383366107940674}]
复制代码

最后

AI 解决方案合集中的通用文本识别方案通过自动部署预训练的文本识别模型,结合精准的语言模型和大词库,增强了对中文语言的处理与识别能力,提高输入转化效率。基于亚马逊云科技的 Amazon CloudFormation 自动在 Amazon API Gateway 中创建调用 RESTful API ,用户在部署解决方案后只需将 HTTP(s) 请求参数提交到 Amazon API Gateway 自动创建的 URL 即可实现文本识别功能,就可以得到准确的返回结果。并且,该方案基于 Amazon Lambda 、 Amazon API Gateway 等无服务架构,用户无需担心在云中或本地管理和运行服务器或运行时。只需按实际使用量支付费用。整个无服务器架构中不会存储用户数据,从而保护了用户的隐私。敬请关注了解 AI 解决方案合集以体验更多的开箱即用的云上 AI 功能。

本篇作者


 严一

亚马逊云科技创新解决方案架构师,负责基于亚马逊云科技 的云计算方案的架构设计,在应用开发, Serverless, 大数据方向有丰富的实践经验。


 何孝霆


亚马逊云科技创新解决方案架构师,负责基于亚马逊云科技的云计算方案的架构设计,在应用开发, 人工智能,Serverless 方向有丰富的实践经验。

用户头像

还未添加个人签名 2019.09.17 加入

还未添加个人简介

评论

发布
暂无评论
手把手教程|构建无服务器通用文本识别功能_架构_亚马逊云科技 (Amazon Web Services)_InfoQ写作平台