亚马逊AWS官方博客

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

前言

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

OCR识别效果

自然语言处理
实战
利用Python理解、
分析和生成文本
Natural
Language
Processing
IN ACTION

架构介绍

无服务器架构使用事件驱动型模型。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;

https://www.amazonaws.cn/api-gateway/

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

https://www.amazonaws.cn/lambda/

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

https://www.amazonaws.cn/efs/

部署方式

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

https://www.amazonaws.cn/solutions/ai-solution-kit/

下面,以部署到中国(北京)区域为例,对通用文本识别(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)。点击“下一步”继续。

  • 模型说明
名称 描述
Standard 包含通用规范汉字库,支持常用简、繁体中文、英文、数字和常用符号,识别准确率高
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 请求参数
名称 类型 是否必选 说明
url String 与 img 参数二选一,优先级高于 img 图像的 URL 地址。支持 HTTP/HTTPS 和 S3 协议。要求图像格式为 jpg/jpeg/png/bmp ,最长边不超过 4096px。
img String 与 url 参数二选一 进行 base64 编码的图像数据
  • 请求 Body 示例
{
  "url": "https://images-cn.ssl-images-amazon.cn/images/G/28/AGS/LIANG/Deals/2020/Dealpage_KV/1500300.jpg"
}
PowerShell
  • 示例样图

测试步骤

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

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

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

  • 返回参数说明
名称 类型 说明
words String 识别文本字符串内容
location JSON 识别文本在图像中的的坐标值,包含 top,left,width,height的整数值
score String 识别文本的置信度值,为0到1区间内 Float 型数值

如果在部署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 requests
import json
from 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))
PowerShell

在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}]
PowerShell

最后

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

本篇作者

严一

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

何孝霆

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