使用Python SDK图片OCR识别接口识别图片中的文字或卡证信息,并同步返回识别出来的结果。

说明 通用OCR除了能够识别除了普通图片中的文字,还能识别结构化的卡证上的文字,具体请参考图片OCR检测API说明

准备工作

在进行具体的服务调用之前,请参考以下步骤,完整准备工作:
  1. 创建阿里云AccessKeyId和AccessKeySecret。具体请参考创建AccessKey
  2. 安装Python依赖。具体请参考安装Python依赖

传图片url检测示例代码

以下示例针对互联网图片链接进行身份证信息识别:
#coding=utf-8
#OCR图片检测服务接口, 会实时返回检测的结果
from aliyunsdkcore import client
from aliyunsdkgreen.request.v20180509 import ImageSyncScanRequest
from aliyunsdkgreen.request.extension import HttpContentHelper
import json
import uuid

clt = client.AcsClient("您自己的AccessKeyId", "您自己的AccessKeySecret","cn-shanghai")
request = ImageSyncScanRequest.ImageSyncScanRequest()
request.set_accept_format('JSON')
task = {"dataId": str(uuid.uuid1()),
         "url":"https://xxx/test.jpg"
        }

# 检测的实际类型在extras参数中表示,具体请参考api文档
extras = {"card" : "id-card-front"}
print(task)
# 设置待检测图片, 一张图片一个task,
# 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
# 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
# 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个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 aliyunsdkgreen.request.extension import HttpContentHelper
from aliyunsdkgreen.request.extension import ClientUploader
import json
import uuid

# 设置一下编码, 以支持本地中文路径
# python2使用,python3中请去掉
if sys.version_info[0] == 2:
    reload(sys)
    sys.setdefaultencoding('utf-8')

clt = client.AcsClient("您自己的AccessKeyId", "您自己的AccessKeySecret","cn-shanghai")
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)
# 设置待检测图片, 一张图片一个task,
# 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
# 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
# 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个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 aliyunsdkgreen.request.extension import HttpContentHelper
from aliyunsdkgreen.request.extension import ClientUploader
import json
import uuid

# 设置一下编码, 以支持本地中文路径
# python2使用,python3中请去掉
if sys.version_info[0] == 2:
    reload(sys)
    sys.setdefaultencoding('utf-8')
      
clt = client.AcsClient("您自己的AccessKeyId", "您自己的AccessKeySecret","cn-shanghai")
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)
# 设置待检测图片, 一张图片一个task,
# 多张图片同时检测时,处理的时间由最后一个处理完的图片决定。
# 通常情况下批量检测的平均rt比单张检测的要长, 一次批量提交的图片数越多,rt被拉长的概率越高
# 这里以单张图片检测作为示例, 如果是批量图片检测,请自行构建多个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)