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

背景信息

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

准备工作

在进行具体的服务调用之前,请完成以下准备工作:

提交图片同步检测任务

接口 描述 支持的Region
ImageSyncScanRequest 提交图片OCR同步识别任务,对图片中的文字进行识别(scene=ocr)。
  • cn-shanghai
  • cn-beijing
  • cn-shenzhen
  • ap-southeast-1
  • ap-southeast-5
示例代码
  • 传图片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
    
    # 请使用您自己的AccessKey信息。
    clt = client.AcsClient("yourAccessKeyId", "yourAccessKeySecret","cn-shanghai")
    # 每次请求时需要新建request,请勿复用request对象。
    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)
    # 设置待检测的图片,一张图片对应一个检测任务。
    # 多张图片同时检测时,处理时间由最后一张处理完的图片决定。
    # 通常情况下批量检测的平均响应时间比单任务检测长,一次批量提交的图片数越多,响应时间被拉长的概率越高。
    # 代码中以单张图片检测作为示例,如果需要批量检测多张图片,请自行构建多个任务。
    # 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')
    
    # 上传本地文件到服务端。请修改成您自己的本地文件路径。
    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)