本文介绍了如何使用Python SDK图片OCR接口,识别图片中的文字或卡证信息。
功能描述
通用OCR除了能够识别普通图片中的文字,还能识别结构化的卡证上的文字。关于参数的详细说明,请参见图片OCR检测API文档。
前提条件
安装Python依赖。关于安装Python依赖的具体操作,请参见安装Python依赖。
说明请一定按照安装Python依赖页面中的版本安装,否则会导致调用失败。
下载并在项目工程中引入Extension.Uploader工具类。
提交图片同步检测任务
接口 | 描述 | 支持的Region |
ImageSyncScanRequest | 提交图片OCR同步识别任务,对图片中的文字进行识别(scene=ocr)。 |
|
示例代码
传图片URL进行检测
#coding=utf-8 # 以下代码将调用OCR图片检测接口并实时返回检测结果。 from aliyunsdkcore import client from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest from aliyunsdkgreenextension.request.extension import HttpContentHelper import json import uuid # 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。 # 常见获取环境变量方式: # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] clt = client.AcsClient("建议从环境变量中获取RAM用户AccessKey ID", "建议从环境变量中获取RAM用户AccessKey Secret", "cn-shanghai") # 每次请求时需要新建request,请勿复用request对象。 request = ImageSyncScanRequest.ImageSyncScanRequest() request.set_accept_format('JSON') task = {"dataId": str(uuid.uuid1()), "url":"https://example.com/test.jpg" } # 卡证识别的检测类型通过extras参数设置,具体请参见API文档。 extras = {"card" : "id-card-front"} print(task) # 设置待检测的图片,一张图片对应一个检测任务。 # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。 # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。 # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。 # OCR检测按照实际检测的图片张数*检测的卡证类型单价计费。 request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["ocr"], "extras": extras })) response = clt.do_action_with_exception(request) print(response) result = json.loads(response) if 200 == result["code"]: taskResults = result["data"] for taskResult in taskResults: if (200 == taskResult["code"]): sceneResults = taskResult["results"] print(sceneResults)
传本地图片文件进行检测
#coding=utf-8 # 以下代码将调用OCR图片检测接口并实时返回检测结果。 from aliyunsdkcore import client from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest from aliyunsdkgreenextension.request.extension import HttpContentHelper from aliyunsdkgreenextension.request.extension import ClientUploader import json import uuid # 设置编码规则,以便支持本地中文路径。 # Python2中添加以下内容,Python3无需添加。 if sys.version_info[0] == 2: reload(sys) sys.setdefaultencoding('utf-8') # 注意:此处实例化的client尽可能重复使用,提升检测性能。避免重复建立连接。 # 常见获取环境变量方式: # 获取RAM用户AccessKey ID:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'] # 获取RAM用户AccessKey Secret:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'] clt = client.AcsClient("建议从环境变量中获取RAM用户AccessKey ID", "建议从环境变量中获取RAM用户AccessKey Secret", "cn-shanghai") # 每次请求时需要新建request,请勿复用request对象。 request = ImageSyncScanRequest.ImageSyncScanRequest() request.set_accept_format('JSON') # 上传本地文件到服务端。请修改成您的本地文件路径。 uploader = ClientUploader.getImageClientUploader(clt) url = uploader.uploadFile('d:/test/test.jpg') task = {"dataId": str(uuid.uuid1()), "url":url } # 卡证识别的检测类型通过extras参数设置,具体请参见API文档。 extras = {"card" : "id-card-front"} print(task) # 设置待检测的图片,一张图片对应一个检测任务。 # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。 # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。 # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。 # OCR检测按照实际检测的图片张数*检测的卡证类型单价计费。 request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["ocr"], "extras": extras })) response = clt.do_action_with_exception(request) print(response) result = json.loads(response) if 200 == result["code"]: taskResults = result["data"] for taskResult in taskResults: if (200 == taskResult["code"]): sceneResults = taskResult["results"] print(sceneResults)
传图片二进制字节组数据进行检测
#coding=utf-8 # 以下代码将调用OCR图片检测接口并实时返回检测结果。 from aliyunsdkcore import client from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest from aliyunsdkgreenextension.request.extension import HttpContentHelper from aliyunsdkgreenextension.request.extension import ClientUploader import json import uuid # 设置编码规则,以便支持本地中文路径。 # Python2中添加以下内容,Python3无需添加。 if sys.version_info[0] == 2: reload(sys) sys.setdefaultencoding('utf-8') # 请使用您的AccessKey信息。 clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai") # 每次请求时需要新建request,请勿复用request对象。 request = ImageSyncScanRequest.ImageSyncScanRequest() request.set_accept_format('JSON') # 读取本地文件作为二进制数据,模拟二进制数据检测。 # 请修改成您的本地文件路径。 f = open('d:/test/test.jpg', "rb+") imageBytes = f.read() f.close() # 上传二进制文件到服务端。 uploader = ClientUploader.getImageClientUploader(clt) url = uploader.uploadBytes(imageBytes) task = {"dataId": str(uuid.uuid1()), "url":url } # 卡证识别的检测类型通过extras参数设置,具体请参见API文档。 extras = {"card" : "id-card-front"} print(task) # 设置待检测的图片,一张图片对应一个检测任务。 # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。 # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。 # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。 # OCR检测按照实际检测的图片张数*检测的卡证类型单价计费。 request.set_content(HttpContentHelper.toValue({"tasks": [task], "scenes": ["ocr"], "extras": extras })) response = clt.do_action_with_exception(request) print(response) result = json.loads(response) if 200 == result["code"]: taskResults = result["data"] for taskResult in taskResults: if (200 == taskResult["code"]): sceneResults = taskResult["results"] print(sceneResults)
文档内容是否对您有帮助?