跳转至

自定义模板文字识别

客户可自定义OCR模板,提取卡证票据中结构化文字信息,并以键值对应关系的形式展现结果。

适用场景

可应用于卡证票据类图片的结构化识别场景,如物流单据、发票、营业执照、行程单、火车票等。

API参数说明

增加模板

进行文字识别之前,您需要通过增加模板API创建模板。为了提高文字识别准确性,请选择与被识别图像细节近似并且文字内容清晰的图片创建模板。同一个模板可以包含多个识别区域。

要创建模板,每个待识别区域都需要指定矩形框的四个坐标点和该区域的名称,您可以使用常见的图像处理软件来辅助获取坐标点,或者使用本方案工具来创建模版。以下为本方案工具来说明:

  1. 点击工具链接
  2. 点击选择本地图片
  3. 把鼠标移动到图片上,对待识别内容,点击左上角,然后滑动鼠标到右下角,释放鼠标,在弹出的对话框中输入对应的标识名。
  4. 如果有多个待识别内容,重复第3步。
  5. 点击复制结果到剪贴板,此内容为请求Body,创建自定义模板,并在创建成功后记录的模板ID。
  6. 创建好模板后,首先用原图片和模板ID进行文字识别测试,以确保模板能够准确识别到所需信息。
  7. (可选)如果发现提取信息不完整的情况,请确认坐标点是否标注正确,并适当扩大识别区域重新创建模板。

重要说明

矩形框区域必须完全覆盖要识别的文字内容,请在不遮盖其他识别矩形区域的前提下,在识别区域四边留出足够的容错空间,从而获得准确的识别能力。

以下为API的参数说明。

  • HTTP 方法: POST

  • Body 请求参数

名称 类型 是否必选 说明
url String 与 img 参数二选一 图像的 URL 地址。支持 HTTP/HTTPS 和 S3 协议。要求图像格式为 jpg/jpeg/png/bmp ,最长边不超过 4096px。
img String 与 url 参数二选一 进行Base64编码的图像数据
type String 增加模板需要将type指定为add
template List 每个元素为一个待提取区域坐标及其名称,请参考 请求 Body 示例
  • 请求 Body 示例
{
    "type": "add", 
    "url": "图像的URL地址", 
    "template": [
        [
            [[421, 465], [909, 471], [911, 503], [419, 495]], "名称"
        ], 
        [
            [[419, 495], [911, 503], [909, 533], [415, 527]], "识别号"
        ], 
        [
            [[345, 339], [595, 343], [583, 397], [341, 385]], "发票号"
        ]
    ]
}
{
  "type": "add", 
  "img": "Base64编码的图像数据",
  "template": [
        [
            [[421, 465], [909, 471], [911, 503], [419, 495]], "名称"
        ], 
        [
            [[419, 495], [911, 503], [909, 533], [415, 527]], "识别号"
        ], 
        [
            [[345, 339], [595, 343], [583, 397], [341, 385]], "发票号"
        ]
    ]
}
  • 返回参数
名称 类型 说明
template_id String 模板的ID
  • 返回示例
{
    "template_id": "模板的ID",
}

内容识别

在创建好模板后,可以通过对应的模板 ID 对图片进行文字识别,返回值为模板中识别区域名称与文本内容。

  • HTTP 方法: POST

  • Body 请求参数

名称 类型 是否必选 说明
url String 与 img 参数二选一 图像的 URL 地址。支持 HTTP/HTTPS 和 S3 协议。要求图像格式为 jpg/jpeg/png/bmp ,最长边不超过 4096px。
img String 与 url 参数二选一 进行Base64编码的图像数据
type String 固定为query
template_id String 已存在的模板ID
  • 请求 Body 示例
{
  "template_id": "已存在的模板ID",
  "url": "图像的URL地址"
}
  • 返回参数
名称 类型 说明
key String 字段名
value String 提取到的值
score Float 置信度
  • 返回示例
[
    {
        "key": "名称", 
        "value": "亚马逊通技术服务(北京)有限公司", 
        "score": 97.98
    }, 
    {
        "key": "识别号", 
        "value": "911101165900000000", 
        "score": 99.62
    }, 
    {
        "key": "发票号", 
        "value": "4403212222", 
        "score": 96.58
    }
]

删除模板

如果需要删除模板,可通过指定需要删除的模板 ID 进行删除。请注意,模板被删除后不能恢复。

  • HTTP 方法: POST

  • Body 请求参数

名称 类型 是否必选 说明
template_id List 已存在模板的id
type String 固定为del
  • 请求 Body 示例
{
    "type": "del", 
    "template_id": "已存在模板ID"
}
  • 返回参数
名称 类型 说明
template_id String 已删除模板的ID
  • 返回示例
{
    "template_id": "已删除模板的ID"
}

列出所有模板

可以把已经创建的模板通过 ID 列表的方式列出。

  • HTTP 方法: POST

  • Body 请求参数

名称 类型 是否必选 说明
type String 固定为list
  • 请求 Body 示例
{
    "type": "list"
}
  • 返回参数
名称 类型 说明
template_id_list List 已存在模板的列表
  • 返回示例
{
    "template_id_list": ["已存在模板的列表"]
}

开始使用

API资源浏览器

前提条件

通过AWS CloudFormation部署解决方案时,您需要:

  • 设置参数API Exploreryes
  • 设置参数API Gateway AuthorizationNONE

否则,在API资源浏览器中只能看到该API的参考定义,而不能进行在线测试等操作。

操作步骤

  1. 访问AWS CloudFormation控制台
  2. 从堆栈列表中选择方案的根堆栈,而不是嵌套堆栈。列表中嵌套堆栈的名称旁边会显示嵌套(NESTED)。

  3. 打开输出(Outputs)标签页,找到APIExplorer对应的URL。

  4. 点击URL访问API资源浏览器。页面将显示在部署解决方案时选中的API。

  5. 点击API右侧的向下箭头,展开显示API标准模型的请求方法。

  6. 点击右侧的测试(Try it out)按钮,并在Request body中输入正确的Body请求数据进行测试,并查看测试结果。
  7. 确认格式正确后,点击下方的Execute
  8. Responses body中查看返回的JSON结果。您还可以通过右侧复制或下载按钮保存处理结果。
  9. Response headers中查看响应头的相关信息。
  10. (可选)点击Execute右侧Clear按钮,即可清空Request bodyResponses测试结果。

Postman(AWS_IAM认证)

  1. 访问AWS CloudFormation控制台。
  2. 从堆栈列表中选择方案的根堆栈。
  3. 打开输出标签页,找到以 CustomOCR 为前缀的URL。
  4. 在Postman中新建标签页,并把URL粘贴到地址栏,选择POST作为HTTP调用方法。

  5. 打开Authorization配置,在下拉列表里选择Amazon Web Service Signature,并填写对应账户的AccessKey、SecretKey和Amazon Web Service Region(例如,cn-north-1或cn-northwest-1)。

  6. 打开Body配置项,选中raw和JSON数据类型。

  7. 在Body中输入测试数据,单击Send按钮即可看到相应返回结果。

{
  "url": "图像的URL地址"
}

cURL

  • Windows
curl --location --request POST "https://[API_ID].execute-api.[AWS_REGION].amazonaws.com/[STAGE]/custom_ocr" ^
--header "Content-Type: application/json" ^
--data-raw "{\"url\": \"图像的URL地址\"}"
  • Linux/MacOS
curl --location --request POST 'https://[API_ID].execute-api.[AWS_REGION].amazonaws.com/[STAGE]/custom_ocr' \
--header 'Content-Type: application/json' \
--data-raw '{
  "url":"图像的URL地址"
}'

Python(AWS_IAM认证)

import requests
import json
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth

auth = BotoAWSRequestsAuth(aws_host='[API_ID].execute-api.[AWS_REGION].amazonaws.com',
                           aws_region='[AWS_REGION]',
                           aws_service='execute-api')

url = 'https://[API_ID].execute-api.[AWS_REGION].amazonaws.com/[STAGE]/custom_ocr'
payload = {
    'url': '图像的URL地址'
}
response = requests.request("POST", url, data=json.dumps(payload), auth=auth)
print(json.loads(response.text))

Python(NONE认证)

import requests
import json

url = "https://[API_ID].execute-api.[AWS_REGION].amazonaws.com/[STAGE]/custom_ocr"

payload = json.dumps({
  "url": "图像的URL地址"
})
headers = {
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)

Java

OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"url\":\"图像的URL地址\"\n}");
Request request = new Request.Builder()
  .url("https://xxxxxxxxxxx.execute-api.xxxxxxxxx.amazonaws.com/[STAGE]/custom_ocr")
  .method("POST", body)
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();

成本预估

您需要承担运行解决方案时使用亚马逊云科技各个服务的成本费用。截至这次发布的版本,影响解决方案的成本因素主要包括:

  • Amazon API Gateway调用次数
  • Amazon API Gateway数据输出量
  • Amazon CloudWatch Logs存储量
  • Amazon Elastic Container Registry存储量

如果您选择基于Amazon Lambda架构部署,影响成本的因素还包括:

  • Amazon Lambda调用次数
  • Amazon Lambda运行时间

与之对应的Amazon SageMaker架构部署,影响成本的因素还包括:

  • Amazon SageMaker终端节点实例类型
  • Amazon SageMaker终端节点数据输入量
  • Amazon SageMaker终端节点数据输出量

成本预估示例1

以由西云数据运营的亚马逊云科技中国(宁夏)区域(cn-northwest-1)为例,处理1MB图像,处理时间1秒

使用本方案处理此图像所需的成本费用如下表所示:

服务 用量 费用
AWS Lambda 调用百万次 ¥1.36
AWS Lambda 内存8192MB,每次运行1秒 ¥907.8
Amazon API Gateway 调用百万次 ¥28.94
Amazon API Gateway 数据输出以每次10KB计算,¥0.933/GB ¥9.33
Amazon CloudWatch Logs 每次10KB,¥6.228/GB ¥62.28
Amazon Elastic Container Registry 0.5GB存储,每月每GB¥0.69 ¥0.35
合计 ¥1010.06

成本预估示例2

以美国东部(俄亥俄州)区域(us-east-2)为例,处理1MB图像,处理时间1秒

使用本方案处理此图像所需的成本费用如下表所示:

服务 用量 费用
AWS Lambda 调用百万次 $0.20
AWS Lambda 内存8192MB,每次运行1秒 $133.3
Amazon API Gateway 调用百万次 $3.5
Amazon API Gateway 数据输出以每次10KB计算,$0.09/GB $0.9
Amazon CloudWatch Logs 每次10KB,$0.50/GB $5
Amazon Elastic Container Registry 0.5GB存储,每月每GB$0.1 $0.05
合计 $142.95

成本预估示例3

以美国东部(俄亥俄州)区域(us-east-2)为例,用户一整天都有稳定的图像流,所需QPS约为2。其中Amazon SageMaker终端节点实例开启时会一直计费。

使用本方案的成本费用如下表所示:

服务 用量 费用
Amazon API Gateway 调用5 百万次 $17.5
Amazon API Gateway 数据输出以每次10KB计算,$0.09/GB $4.5
Amazon CloudWatch Logs 每次10KB,$0.50/GB $25
Amazon Elastic Container Registry 0.5GB存储,每月每GB$0.1 $0.05
Amazon SageMaker 终端节点实例运行1个月,730小时,ml.g4dn.xlarge $0.736/小时 $537.28
Amazon SageMaker 终端节点数据输入以每次1MB计算,$0.016/GB $16
Amazon SageMaker 终端节点数据输出以每次10KB计算,$0.016/GB $78.13
合计 $678.46

卸载部署

您可以通过AWS CloudFormation卸载 自定义模板文字识别 功能,具体步骤请见部署解决方案:更新AWS CloudFormation堆栈(添加或删除AI功能),并在参数部分确认 CustomOCR 参数设置为no

卸载时间:20 分钟