自定义模板文字识别
客户可自定义OCR模板,提取卡证票据中结构化文字信息,并以键值对应关系的形式展现结果。
适用场景
可应用于卡证票据类图片的结构化识别场景,如物流单据、发票、营业执照、行程单、火车票等。
API参数说明
增加模板
进行文字识别之前,您需要通过增加模板API创建模板。为了提高文字识别准确性,请选择与被识别图像细节近似并且文字内容清晰的图片创建模板。同一个模板可以包含多个识别区域。
要创建模板,每个待识别区域都需要指定矩形框的四个坐标点和该区域的名称,您可以使用常见的图像处理软件来辅助获取坐标点,或者使用本方案工具来创建模版。以下为本方案工具来说明:
- 点击工具链接。
- 点击选择本地图片。
- 把鼠标移动到图片上,对待识别内容,点击左上角,然后滑动鼠标到右下角,释放鼠标,在弹出的对话框中输入对应的标识名。
- 如果有多个待识别内容,重复第3步。
- 点击复制结果到剪贴板,此内容为请求Body,创建自定义模板,并在创建成功后记录的模板ID。
- 创建好模板后,首先用原图片和模板ID进行文字识别测试,以确保模板能够准确识别到所需信息。
- (可选)如果发现提取信息不完整的情况,请确认坐标点是否标注正确,并适当扩大识别区域重新创建模板。
重要说明
矩形框区域必须完全覆盖要识别的文字内容,请在不遮盖其他识别矩形区域的前提下,在识别区域四边留出足够的容错空间,从而获得准确的识别能力。
以下为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 Explorer为yes。
- 设置参数API Gateway Authorization为NONE。
否则,在API资源浏览器中只能看到该API的参考定义,而不能进行在线测试等操作。
操作步骤
- 访问AWS CloudFormation控制台。
-
从堆栈列表中选择方案的根堆栈,而不是嵌套堆栈。列表中嵌套堆栈的名称旁边会显示嵌套(NESTED)。
-
打开输出(Outputs)标签页,找到APIExplorer对应的URL。
-
点击URL访问API资源浏览器。页面将显示在部署解决方案时选中的API。
-
点击API右侧的向下箭头,展开显示API标准模型的请求方法。
- 点击右侧的测试(Try it out)按钮,并在Request body中输入正确的Body请求数据进行测试,并查看测试结果。
- 确认格式正确后,点击下方的Execute。
- 在Responses body中查看返回的JSON结果。您还可以通过右侧复制或下载按钮保存处理结果。
- 在Response headers中查看响应头的相关信息。
- (可选)点击Execute右侧Clear按钮,即可清空Request body与Responses测试结果。
Postman(AWS_IAM认证)
- 访问AWS CloudFormation控制台。
- 从堆栈列表中选择方案的根堆栈。
- 打开输出标签页,找到以 CustomOCR 为前缀的URL。
-
在Postman中新建标签页,并把URL粘贴到地址栏,选择POST作为HTTP调用方法。
-
打开Authorization配置,在下拉列表里选择Amazon Web Service Signature,并填写对应账户的AccessKey、SecretKey和Amazon Web Service Region(例如,cn-north-1或cn-northwest-1)。
-
打开Body配置项,选中raw和JSON数据类型。
-
在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 分钟