本文介绍了调用图片同步检测接口(/green/image/scan)进行结构化票据OCR识别的方法。结构化票据OCR能够识别票据类图像中的文字并以结构化的方式返回文字内容。使用该场景的前提是您知道要检测的图像包含哪种类型的票据。

结构化票据OCR目前支持识别以下票据类型:增值税发票、定额发票、火车票、出租车票。

接口说明

业务接口:/green/image/scan,表示图片同步检测。

您可以调用该接口创建图片同步检测任务。关于如何构造HTTP请求,请参见请求结构;您也可以直接选用已构造好的HTTP请求,具体请参见SDK概览

  • 计费信息

    该接口为收费接口,具体计费方式请参见内容安全产品定价

  • 检测超时

    同步检测允许的最长检测时间是6秒,如果检测在该时间限制内没有完成,系统会强制返回超时错误码。如果您对实时性要求不高,可以选择异步检测,其他情况下请选择同步检测,同步检测接口的调用相对简单些。对于同步检测接口的调用,建议您将超时时间设置为6秒。

  • 返回结果

    同步检测请求一般会在一秒内返回结果,但在一些特殊场景(例如系统繁忙导致堆积严重、图片较大、含有OCR内容较多等),耗时可能会增加。OCR的处理速度依赖图片中文字的字数,字数越多处理时间越长。如果您检测的场景中文字较多,推荐您使用图片异步检测接口。

  • 图片要求
    • 图片链接支持以下协议:HTTP和HTTPS。
    • 图片支持以下格式:PNG、JPG、JPEG、BMP、GIF、WEBP。
    • 图片大小限制为10 MB以内(适用于同步和异步调用)。如您有特殊需求(大图片),可以提交工单进行调整。
    • 图片下载时间限制为3秒内,如果下载时间超过3秒,返回下载超时。
    • 图片像素建议不低于256*256,像素过低可能会影响识别效果。
    • 图片检测接口响应时间依赖图片的下载时间。请保证被检测图片所在的存储服务稳定可靠,建议您使用阿里云OSS存储或者CDN缓存等。

请求参数

名称 类型 是否必须 描述
bizType 字符串 该字段用于标识您的业务场景。您可以通过内容安全控制台创建业务场景(具体操作请参见自定义机审标准),或者提交工单联系我们帮助您创建业务场景。
scenes 字符串数组 指定检测场景,取值:ocr
tasks JSON数组 指定检测对象,JSON数组中的每个元素是一个OCR图文检测任务结构体。最多支持10个元素,即对10张图片进行识别。每个元素的具体结构描述请参见task
extras JSON结构体 指定要识别的票据类型,格式为{"card":"${CardType}"}CardType表示票据类型,取值:
  • invoice:增值税发票
  • quota-account-permit:定额发票
  • train-ticket:火车票
  • taxi-ticket: 出租车票
表 1. task
名称 类型 是否必须 描述
dataId 字符串 数据ID。需要保证在一次请求中所有的ID不重复。
url 字符串 待检测图像的URL。

返回数据

名称 类型 描述
code 整型 错误码,和HTTP的status code一致。
msg 字符串 错误描述信息。
dataId 字符串 检测对象对应的数据ID。
说明 如果在检测请求参数中传入了dataId,则此处返回对应的dataId
taskId 字符串 检测任务的ID。
url 字符串 检测对象的URL。
extras JSON结构体 额外调用参数,对应检测请求参数中的extras
说明 该参数可能会被调整,目前请勿依赖该参数的返回值。
results 数组 返回结果。调用成功时(code=200),返回结果中包含一个或多个元素。每个元素是个结构体,具体结构描述请参见result
表 2. result
名称 类型 描述
scene 字符串 检测场景,取值:ocr
label 字符串 检测结果的分类。取值:
  • normal:图片中未识别出文字信息。
  • ocr:图片中包含文字信息。
suggestion 字符串 建议用户执行的操作,取值:
  • pass:无需关注返回结果。
  • review:关注识别出的文字信息。
rate 浮点数 在OCR图文识别场景中,可以不用关注该返回值。
invoiceInfo 结构体 识别出来的增值税发票信息,具体结构描述请参见invoiceInfo
说明 只有在请求参数extras中指定了{"card":"invoice"}才会返回该参数。
ocrCardInfo 结构体 识别出来的其他票据的OCR信息,具体结构请参见ocrCardInfo
说明 只有在请求参数extras中指定了以下内容,才会返回相应结果:
  • {"card":"quota-account-permit"}:返回定额发票信息。
  • {"card":"train-ticket"}:返回火车票信息。
  • {"card":"taxi-ticket"}:返回出租车票信息。
表 3. invoiceInfo
名称 类型 描述
invoice_name 字符串 发票名称。
invoice_id 整型 发票代码。
invoice_number 整型 发票号码。
invoice_date 整型 开票日期。
invoice_bcompany 字符串 购买方名称。
invoice_bcode 字符串 购买方纳税人识别号。
invoice_baddress 字符串 购买方地址、电话。
invoice_baccount 字符串 购买方开户行及账号。
invoice_password 字符串 发票密码。
invoice_detail 数组 发票明细。具体结构描述请参见invoice_detail
invoice_totalamount 浮点型 合计金额。
invoice_totaltax 浮点型 合计税额。
invoice_totalamountupper 字符串 价税合计(大写)。
invoice_totalamountlower 字符串 价税合计(小写)。
invoice_scompany 字符串 销售方名称。
invoice_scode 字符串 销售方纳税人识别号。
invoice_saddress 字符串 销售方地址、电话。
invoice_saccount 字符串 销售方开户行及账号。
invoice_remark 字符串 备注。
invoice_payee 字符串 收款人。
invoice_reviewer 字符串 复核。
invoice_drawer 字符串 开票人。
表 4. invoice_detail
名称 类型 描述
detail_name 字符串 货物或应税劳务、服务名称。
detail_type 字符串 规格型号。
detail_unit 字符串 单位。
detail_count 浮点型 数量。
detail_unitprice 浮点型 单价。
detail_amount 浮点型 金额。
detail_rate 字符串 税率。
detail_tax 浮点型 税额。
ocrCardInfo
  • 定额发票信息
    名称 类型 描述
    amountInWords 字符串 大写金额。
    invoiceSerial 字符串 发票代码解析。
    amountInFigures 字符串 小写金额。
    invoiceNumber 字符串 发票号码。
    invoiceCode 字符串 发票代码。
    batchNumber 字符串 批次号。
    year 字符串 年份。
    taxBureauCode 字符串 税务局代码。
    invoiceIndustryCode 字符串 发票行业代码。
    amountVersion 字符串 金额版。
    regionalismCode 字符串 行政区划代码。
    invoiceCategoryCode 字符串 发票类别代码。
    type 字符串 票据的类型,取值固定为quota-invoice,表示定额发票。
  • 火车票信息
    名称 类型 描述
    price 字符串 票价。
    ticketNumber 字符串 票号。
    departureTime 字符串 开车时间。
    seatType 字符串 座位类型。
    trainNumber 字符串 车次。
    departure 字符串 出发站。
    departurePhonics 字符串 出发站拼音。
    seatNumber 字符串 座位号。
    destination 字符串 到达站。
    destinationPhonics 字符串 到达站拼音。
    passengerInfo 字符串 旅客信息。
    type 字符串 票据的类型,取值固定为train-ticket,表示火车票。
  • 出租车票信息
    名称 类型 描述
    actualCollection 字符串 实收金额。
    carNumber 字符串 车号。
    date 字符串 日期。
    invoiceCode 字符串 发票代码。
    invoiceNumbe 字符串 发票号码。
    mileage 字符串 里程。
    amount 字符串 金额。
    getOffTime 字符串 下车时间。
    boardingTime 字符串 上车时间。
    totalAmount 字符串 合计。
    type 字符串 票据的类型,取值固定为taxi-ticket,表示出租车票。

示例

请求示例
说明 以增值税发票识别为例(extras传入{"card": "invoice"})。如果需要识别其他类型的票据,传入对应的票据类型即可,具体请参见请求参数
{
    "scenes": [
        "ocr"
    ],
    "extras": {
        "card": "invoice"
    },
    "tasks": [
        {
            "dataId": "test_data_xxxx",
            "url": "https://test_image_xxxx.png"
        }
    ]
}
正常返回示例
  • 增值税发票信息
    {
        "msg":"OK",
        "code":200,
        "data":[
            {
                "msg":"OK",
                "code":200,
                "dataId":"test_data_xxxx",
                "extras":{
                    "md5":"303f7159179153a94033724ffd28ea44"
                },
                "results":[
                    {
                        "invoiceInfo":{
                            "invoice_bcompany":"****软件有限公司",
                            "invoice_baccount":"**银行某支行****",
                            "invoice_drawer":"张某某",
                            "invoice_totalamountupper":"肆仟玖佰肆拾圆整",
                            "invoice_name":"**增值税专用发票",
                            "invoice_date":"20170422",
                            "invoice_totaltax":"717.78",
                            "invoice_reviewer":"",
                            "invoice_totalamountlower":"4940.00",
                            "invoice_id":"110015****",
                            "invoice_number":"5795****",
                            "invoice_scompany":"****有限责任公司",
                            "invoice_saccount":"****支行1105011012340000****",
                            "invoice_saddress":"****",
                            "invoice_remark":"KP12****",
                            "invoice_totalamount":"4222.22",
                            "invoice_password":"1<000+0000-0000>79*27<>7295<-123020-8>07+63*683-80+>314-9+0+/<0-<-/1++35*958*6>98709/+9323858+8745<72461****",
                            "invoice_payee":"",
                            "invoice_detail":[
                                {
                                    "detail_amount":"888.89",
                                    "detail_name":"荣莉龙芽花茶",
                                    "detail_rate":"17%",
                                    "detail_count":"20",
                                    "detail_type":"",
                                    "detail_unitprice":"44.4444444",
                                    "detail_tax":"151.11",
                                    "detail_unit":""
                                },
                                {
                                    "detail_amount":"3333.33",
                                    "detail_name":"大佛龙井绿茶",
                                    "detail_rate":"17%",
                                    "detail_count":"50",
                                    "detail_type":"",
                                    "detail_unitprice":"66.6666667",
                                    "detail_tax":"566.67",
                                    "detail_unit":""
                                }
                            ],
                            "invoice_baddress":"****",
                            "invoice_bcode":"91330000000000****",
                            "invoice_scode":"91110000000000****"
                        },
                        "rate":99.91,
                        "suggestion":"review",
                        "label":"ocr",
                        "scene":"ocr"
                    }
                ],
                "taskId":"img1CVBf$Vgrno7wF75H5LaRm-1pPFFA",
                "url":"https://test_image_xxxx.png"
            }
        ],
        "requestId":"81121B0B-2BFE-44BA-9825-C15CA5E99551"
    }
  • 火车票信息
    {
        "msg": "OK",
        "code": 200,
        "data": [
            {
                "msg": "OK",
                "code": 200,
                "dataId": "test_data_xxxx",
                "extras": {
    
                },
                "results": [
                    {
                        "rate": 99.91,
                        "suggestion": "review",
                        "label": "ocr",
                        "ocrCardInfo": {
                            "departureTime": "2019年01月01日00:00开",
                            "ticketNumber": "A000001",
                            "seatType": "二等座",
                            "price": "0.0",
                            "destination": "终到站",
                            "passengerInfo": "1234567890****0000姓名",
                            "trainNumber": "G0000",
                            "departure": "始发站",
                            "destinationPhonics": "Zhongdao",
                            "type": "train-ticket",
                            "seatNumber": "01车01F号",
                            "departurePhonics": "Shifa"
                        },
                        "scene": "ocr"
                    }
                ],
                "taskId": "img5ubtZeVSXxd7010wn9mHhd-1sWeJo",
                "url": "https://test_image_xxxx.png"
            }
        ],
        "requestId": "C55D1390-B1D0-4B27-83F3-7335006525E2"
    }
  • 定额发票信息
    {
        "msg": "OK",
        "code": 200,
        "data": [
            {
                "msg": "OK",
                "code": 200,
                "dataId": "test_data_xxxx",
                "extras": {
    
                },
                "results": [
                    {
                        "rate": 99.91,
                        "suggestion": "review",
                        "label": "ocr",
                        "ocrCardInfo": {
                            "amountInWords": "壹佰元",
                            "amountInFigures": "",
                            "invoiceSerial": {
                                "amountVersion": "电脑版",
                                "year": "2015",
                                "invoiceCategoryCode": "发票换票证",
                                "taxBureauCode": "国税",
                                "invoiceIndustryCode": "None",
                                "regionalismCode": "南充市",
                                "batchNumber": "01"
                            },
                            "invoiceNumber": "0145****",
                            "type": "quota-invoice",
                            "invoiceCode": "15113159****"
                        },
                        "scene": "ocr"
                    }
                ],
                "taskId": "imgzX$vkjvXxi4o74s5NEBba-1sWeII",
                "url": "https://test_image_xxxx.png"
            }
        ],
        "requestId": "B5E137FF-668F-48D9-90F7-CE55A9FCC89D"
    }
  • 出租车票信息
    {
        "msg": "OK",
        "code": 200,
        "data": [
            {
                "msg": "OK",
                "code": 200,
                "dataId": "test_data_xxxx",
                "extras": {
    
                },
                "results": [
                    {
                        "rate": 99.91,
                        "suggestion": "review",
                        "label": "ocr",
                        "ocrCardInfo": {
                            "carNumber": "A•T****",
                            "date": "2008109月16日",
                            "totalAmount": "",
                            "getOffTime": "16:58",
                            "amount": "",
                            "invoiceNumber": "5485G0****",
                            "type": "taxi-ticket",
                            "boardingTime": "[K068016:50",
                            "invoiceCode": "25000071****",
                            "actualCollection": "",
                            "mileage": "42.0km"
                        },
                        "scene": "ocr"
                    }
                ],
                "taskId": "img1FrkyyOQXK$7YvhRGMCWb9-1sWeM9",
                "url": "https://test_image_xxxx.png"
            }
        ],
        "requestId": "D1E56B7A-3876-4284-939A-8004B150D879"
    }