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

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

准备工作

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

提交图片同步检测任务

接口描述
接口 功能 支持的Region 描述
ImageSyncScanRequest 同步图片OCR识别。
  • cn-shanghai
  • cn-beijing
  • cn-shenzhen
  • ap-southeast-1
对图片中的文字进行识别(scene=ocr)。
示例代码
  • 传图片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)