ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

人工智能助力复工复产,模版 OCR 轻松搞定健康码识别

2022-07-26 19:03:41  阅读:181  来源: 互联网

标签:复产 识别 img 模版 base64 import OCR data


背景介绍

在有序推进复工复产过程中,公司为完成常态化核酸筛查工作,北京和上海两地办公室的员工需要每天提交本人所在地的健康宝/随申码和行程码。有关部门收到上传图片后,要核查每位员工的核酸状态,并确认是否去过高风险地区,审核工作需要花费大量的时间和人力,目前急需寻求一种既能高效采集员工健康信息,又能保证员工个人健康数据隐私的人工智能解决方案来应对繁重的健康数据审核工作。

目前该公司遇到的难点可以归结为如下方面:

  • 图片数量暴增:需要审核的健康码/行程码等图片每天都在大量增加。

  • 传统文字识别无法满足需求:由于图片来源不固定,可能为手机截屏(分辨率不固定),或者手机屏幕翻拍(拍摄角度随机),传统文字识别技术无法通过固定位置来准确获取文字内容。

待处理图片示例

image.png
  • 机器学习方面研发能力弱:如果针对三码识别单独研发新功能,开发周期过长,无法满足当下需求。

  • 个人健康数据安全:健康信息属于员工个人隐私数据,要最大程度保证这些数据的安全。

  • 服务器运维成本高,预算有限:图片上传会随时随地发生,需要有稳定的计算资源支持,如果采用传统架构会加大运维成本。

员工健康信息文字识别需求分析

针对三码(健康码/随申码/行程码)内需要提取的文字信息分别为:

image.png

如图所示,三码中要提取的文字信息分别位于图片中相对固定的区域,所以可以使用通用模版文字识别功能来通过预定义模版实现文字内容提取。

亚马逊云科技的 AI Solution Kit 解决方案中的文本识别类功能包括:通用文字识别 OCR(支持简体/繁体),自定义模版文字识别 OCR 和车牌识别,其中自定义模版文字识别功能(Custom OCR)可以基于预定义的模版信息,针对固定版式的票据或表格,自动识别其中的文字内容并返回结果,可以满足健康信息提取的需求。

所以,只需要针对三类截图创建好对应的模版,就可以提取截图中的健康信息了。在使用上只需在亚马逊云平台上部署该解决方案,就可以马上调用模版文字识别功能对应的 URL 发送图片请求,从而获得所需的健康信息,不需要任何额外的机器学习知识,开发量极少,非常符合现有的公司需求。

利用模版 OCR 解决方案识别健康信息

具体操作可以分为四个步骤:部署解决方案,创建自定义模版,开发调用逻辑完成文字识别并结构化输出结果。

image.png

首先是部署 AI Solution Kit 解决方案,通过 AI solution kit 解决方案的部署链接与实施手册(https://awslabs.github.io/aws-ai-solution-kit/zh/),可以在10分钟内将方案部署完成。由于方案整体设计是基于无服务器架构的,所以只会按调用量付费,不用担心会有额外的支出(成本预估:https://awslabs.github.io/aws-ai-solution-kit/zh/deploy-custom-ocr/#_7 ),在 AWS CloudFormation 堆栈(Stack)创建成功后,就可以在 AWS CloudFormation 的输出(Outputs)页面看到基于 Amazon API Gateway 的调用 URL,对应 URL 名称(Key)为 CustomOCR。

image.png

接下来我们可以测试一下生成的 API 调用 URL,首先需要新建一个行程码识别模版。这里我们使用开源图像处理软件 GIMP (https://www.gimp.org/downloads/ )来获取坐标点。如下图所示,先在在电脑上用 GIMP 打开行程码手机截图后,再把鼠标移动到图片上,就可以看到指定位置坐标点 X,Y 值,请按照左上,右上,右下,左下的顺时针顺序创建矩形框四个坐标点序列。

先把鼠标移动到行程卡中日期的四个角上(下图中矩形框位置),分别记录下四角对应坐标(坐标值显示在 GIMP 窗口的左下角区域)并指定该识别区域名称为“更新时间”。

image.png

用同样的方式,继续标注“手机号码”与“途径地区”的文字识别区域,标注好后的完整 JSON 数据如下:

[[[116, 335], [410, 335], [410, 374], [116, 374]], "手机号码"],
[[[176, 387], [452, 384], [452, 429], [176, 429]], "更新时间"],
[[[53, 710], [465, 710], [465, 837], [54, 837]], "途经地区"]

接下来需要把图片转码成模版 OCR 能够处理的 Base64 格式,我们可以使用 Base64Guru(https://base64.guru/converter/encode/image)在线上传图片,即可将图片转换为 Base64 编码的格式,转换完成后,与刚才标注的识别区域 JSON 合并成完整的 JSON 数据,如下:

{
        "type" : "add",
        "img": "行程码图片的Base64编码",
        "template": [
        [[[116, 335], [410, 335], [410, 374], [116, 374]], "手机号码"],
        [[[176, 387], [452, 384], [452, 429], [176, 429]], "更新时间"],
        [[[53, 710], [465, 710], [465, 837], [54, 837]], "途经地区"]
        ]
}

然后我们通过如下 Python 代码,把创建模版的请求发送到模版 OCR 调用 URL,完成行程码模版的创建。

import json
import requests
import base64

jkb_img = open('jkb-template.png', 'rb')
base64_data = base64.b64encode(jkb_img.read())
payload = json.dumps({
    "type" : "add",
"img": str(base64_data, encoding="utf-8"),
"template": [
        [[[116, 335], [410, 335], [410, 374], [116, 374]], "手机号码"],
        [[[176, 387], [452, 384], [452, 429], [176, 429]], "更新时间"],
        [[[53, 710], [465, 710], [465, 837], [54, 837]], "途经地区"]
    ]
})
url = "https://[API-ID].execute-api.[REGION-ID].amazonaws.com.cn/prod/custom-ocr/"
response = requests.request("POST", url, data=payload)
json.loads(response.text)

输出结果:

{'template_id': '3e2183c63b139f6870c7d0ac53ffdc138bd21c95'}

在输出中里我们看到模版已经创建好了,对应的模版 ID(template_id)为‘3e2183c63b139f6870c7d0ac53ffdc138bd21c95’,请记下模版 ID 用于后面的文字识别。

我们找来另一张翻拍格式的行程码图片,用来测试识别效果

image.png

我们用了短短12行代码,就完成了行程码健康信息的提取任务。

import base64
import json
import requests
import pandas as pd

jkb_img = open('scan-xjm-1.jpeg', 'rb')
base64_data = base64.b64encode(jkb_img.read())
payload = json.dumps({
    "template_id": "3e2183c63b139f6870c7d0ac53ffdc138bd21c95",
    "img": str(base64_data, encoding="utf-8")
})
url = "https://gqi4z1k9fl.execute-api.cn-northwest-1.amazonaws.com.cn/prod/custom-ocr/"
response = requests.request("POST", url, data=payload)
df = pd.DataFrame.from_dict(json.loads(response.text))
image.png

可以看出,AI Solution Kit 的模版文字识别功能能够自动将不同手机分辨率截图甚至是翻拍的图像,准确检测识别区域,并进行精准文字识别,提取到所需的行程码信息。

接下来,我们用与创建行程码模版相同的方法,创建健康宝模版,创建健康宝模版的 JSON 数据如下:

{
    "type" : "add",
    "img": "健康宝图像的Base64编码",
    "template": [
    [[[173, 177], [364, 173], [364, 210], [173, 210]], "日期"],
    [[[211, 206], [319, 210], [319, 233], [208, 231]], "时间"],
    [[[190, 575], [361, 575], [361, 628], [191, 629]], "状态"],
    [[[217, 668], [317, 671], [309, 709], [205, 710]], "核酸"],
    [[[386, 658], [424, 660], [424, 708], [386, 708]], "核酸时间"],
    [[[263, 810], [483, 828], [483, 864], [289, 867]], "姓名"],
    [[[220, 876], [482, 870], [479, 909], [222, 908]], "身份证号"],
    [[[277, 917], [478, 909], [482, 954], [272, 950]], "查询时间"],
    [[[272, 955], [483, 956], [475, 990], [269, 992]], "失效时间"]
    ]
}
image.png

进行测试验证后,输出结果如下:

import base64
import json
import requests
import pandas as pd

jkb_img = open('jkb-1.png', 'rb')
base64_data = base64.b64encode(jkb_img.read())
payload = json.dumps({
    "template_id": "158ad1b39a4cba9ce4a1cade1fae2bb0740ccb10",
    "img": str(base64_data, encoding="utf-8")
})
url = "https://[API-ID].execute-api.[REGION-ID].amazonaws.com.cn/prod/custom-ocr/"
response = requests.request("POST", url, data=payload)
df = pd.DataFrame.from_dict(json.loads(response.text))

输出结果:

image.png

可见,模版 OCR 同样可以完成较复杂的北京健康宝的识别任务。最后,让我们来创建随申码的模版,创建随申码模版的 JSON 数据如下:

{
    "type" : "add",
    "img": "随申码参考样图的Base64编码"
    "template": [
    [[[189, 256], [257, 261], [261, 293], [192, 296]], "姓名"],
    [[[140,366], [356,369], [350,406], [138,402]], "查询时间"],
    [[[208,673], [285,675], [284,713], [211,712]], "状态"],
    [[[108,774], [181,777], [181,838], [114,839]], "天数"]
    ]
}
image.png

随申码识别结果如下:

import base64
import json
import requests
import pandas as pd

jkb_img = open('xsm_1.png', 'rb')
base64_data = base64.b64encode(jkb_img.read())
payload = json.dumps({
    "template_id": "531030f86c071571e54c19c9ac5c63751e97cddf",
    "img": str(base64_data, encoding="utf-8")
})
url = "https://[API-ID].execute-api.[REGION-ID].amazonaws.com.cn/prod/custom-ocr/"
response = requests.request("POST", url, data=payload)
df = pd.DataFrame.from_dict(json.loads(response.text))

输出结果:

image.png

示例代码

文中示例代码请参考如下链接:

https://github.com/awslabs/aws-ai-solution-kit/tree/main/samples/custom-ocr-healthy-code

总结

AI Solution Kit 解决方案中的模版文本识别功能通过自动部署预训练的文本识别模型,结合大词库,增强了对中文语言的处理与识别能力,能够通过预定义模版自动校正并识别结构化信息,从而提高了输入转化效率。基于亚马逊云科技的 Amazon CloudFormation 自动在 Amazon API Gateway 中创建调用 RESTful API ,用户在部署解决方案后只需将 HTTP(s) 请求参数提交到 Amazon API Gateway 自动创建的 URL 即可实现文本识别功能。该解决方案基于 Amazon Lambda 等无服务架构,用户无需运维任何基础设施,只需按实际使用量支付费用。用户数据全程不做持久化存储,计算和存储资源在API执行完毕后即销毁。AI Solution Kit 开源解决方案中更多更有意思的功能等待您去探索。https://github.com/awslabs/aws-ai-solution-kit

本篇作者

image.png

严一

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

 

image.png

何孝霆

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

标签:复产,识别,img,模版,base64,import,OCR,data
来源: https://www.cnblogs.com/AmazonwebService/p/16522175.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有