setting alipay wechat success appmanage dollor user cart order workorder logout left1 left2 app unfree free chart coupon note copy pencil price-tag database cog bin list link plus minus codepen 审核 cross table search user-tie eye github cancel-circle checkmark icon-upload icon-smartphon icon-auth-user icon-arroba-symbol icon-check-pass icon-red-cross icon-pwd-key icon-used icon-expired android appleinc tux windows8 java webAPI mail vip

    # 通用文字识别 API 文档

    # 接口说明

    通用文字识别(Universal Character Recognition),基于深度神经网络模型的端到端文字识别系统,将图片中印刷或手写的文字转化为计算机可编码的文字(目前支持中文、英文)。

    # 接口Demo

    示例demo请点击 这里 下载。
    demo 覆盖部分语言,其他语言参照下方接口文档进行开发。
    欢迎热心的开发者到“讯飞开放平台社区 (opens new window)” 分享你们的demo。

    # 接口要求

    集成通用文字识别时,需按照以下要求。

    内容 说明
    传输方式 http[s] (为提高安全性,强烈推荐https)
    请求地址 http[s]: //api.xf-yun.com/v1/private/sf8e6aca1
    注:服务器IP不固定,为保证您的接口稳定,请勿通过指定IP的方式调用接口,使用域名方式调用
    请求行 POST /v1/private/sf8e6aca1 HTTP/1.1
    接口鉴权 签名机制,详情请参照下方鉴权认证
    字符编码 UTF-8
    响应格式 统一采用JSON格式
    开发语言 任意,只要可以向讯飞云服务发起HTTP请求的均可
    适用范围 任意操作系统,但因不支持跨域不适用于浏览器
    图片格式 jpg/jpeg/png/bmp
    图片大小 base64编码后大小不超过10M

    # 接口调用流程

    • 通过接口密钥基于hmac-sha256计算签名,将签名以及其他参数加在请求地址后面。详见下方 鉴权认证
    • 将请求参数以及图片数据放在Http Request Body中,以POST表单的形式提交,详见下方 请求参数
    • 向服务器端发送Http请求后,接收服务器端的返回结果。

    # 鉴权认证

    在调用业务接口时,请求方需要对请求进行签名,服务端通过签名来校验请求的合法性。

    # 鉴权方法

    通过在请求地址后面加上鉴权相关参数的方式,请注意影响鉴权结果的值有url、apiSecret、apiKey、date,如果调试鉴权,请务必按照示例中给的值进行调试,具体参数如下:

    http示例url:

    https://api.xf-yun.com/v1/private/sf8e6aca1?authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iL21nMmg5QkNrZXNwaWxaOTRIVUJhUVZQcTJ2N1B4WUY5MHRlVEJsYXhkOD0i&host=api.xf-yun.com&date=Wed%2C+11+Aug+2021+06%3A55%3A18+GMT
    

    鉴权参数:

    参数 类型 必须 说明 示例
    host string 请求主机 api.xf-yun.com
    date string 当前时间戳,RFC1123格式("EEE, dd MMM yyyy HH:mm:ss z") Wed, 11 Aug 2021 06:55:18 GMT
    authorization string 使用base64编码的签名相关信息(签名基于hamc-sha256计算) 参考下方详细生成规则

    • date参数生成规则:

    date必须是UTC+0或GMT时区,RFC1123格式(Wed, 11 Aug 2021 06:55:18 GMT)。
    服务端会对date进行时钟偏移检查,最大允许300秒的偏差,超出偏差的请求都将被拒绝。

    • authorization参数生成格式:

    1)获取接口密钥APIKey 和 APISecret。
    在讯飞开放平台控制台,创建一个应用后打开OCR中英文字识别页面可以获取,均为32位字符串。
    2)参数authorization base64编码前(authorization_origin)的格式如下。

    api_key="$api_key",algorithm="hmac-sha256",headers="host date request-line",signature="$signature"
    

    其中 api_key 是在控制台获取的APIKey,algorithm 是加密算法(仅支持hmac-sha256),headers 是参与签名的参数(见下方注释)。
    signature 是使用加密算法对参与签名的参数签名后并使用base64编码的字符串,详见下方。

    注: headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。

    3)signature的原始字段(signature_origin)规则如下。

    signature原始字段由 host,date,request-line三个参数按照格式拼接成,
    拼接的格式为(\n为换行符,’:’后面有一个空格):

    host: $host\ndate: $date\n$request-line
    

    假设

    请求url = "https://api.xf-yun.com/v1/private/sf8e6aca1"
    date = "Wed, 11 Aug 2021 06:55:18 GMT"
    

    那么 signature原始字段(signature_origin)则为:

    host: api.xf-yun.com
    date: Wed, 11 Aug 2021 06:55:18 GMT
    POST /v1/private/sf8e6aca1 HTTP/1.1
    

    4)使用hmac-sha256算法结合apiSecret对signature_origin签名,获得签名后的摘要signature_sha。

    signature_sha=hmac-sha256(signature_origin,$apiSecret)
    

    其中 apiSecret 是在控制台获取的APISecret

    5)使用base64编码对signature_sha进行编码获得最终的signature。

    signature=base64(signature_sha)
    

    假设

    APISecret = "apisecretXXXXXXXXXXXXXXXXXXXXXXX"	
    date = "Wed, 11 Aug 2021 06:55:18 GMT"
    

    则signature为

    signature="/mg2h9BCkespilZ94HUBaQVPq2v7PxYF90teTBlaxd8="
    

    6)根据以上信息拼接authorization base64编码前(authorization_origin)的字符串,示例如下。

    api_key="apikeyXXXXXXXXXXXXXXXXXXXXXXXXXX", algorithm="hmac-sha256", headers="host date request-line", signature="/mg2h9BCkespilZ94HUBaQVPq2v7PxYF90teTBlaxd8="
    

    注: headers是参与签名的参数,请注意是固定的参数名("host date request-line"),而非这些参数的值。

    7)最后再对authorization_origin进行base64编码获得最终的authorization参数。

    authorization = base64(authorization_origin)
    示例结果为:
    authorization=YXBpX2tleT0iYXBpa2V5WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0iL21nMmg5QkNrZXNwaWxaOTRIVUJhUVZQcTJ2N1B4WUY5MHRlVEJsYXhkOD0i
    

    # 鉴权结果

    如果鉴权失败,则根据不同错误类型返回不同HTTP Code状态码,同时携带错误描述信息,详细错误说明如下:

    HTTP Code 说明 错误描述信息 解决方法
    401 缺少authorization参数 {"message":"Unauthorized"} 检查是否有authorization参数,详情见authorization参数详细生成规则
    401 签名参数解析失败 {“message”:”HMAC signature cannot be verified”} 检查签名的各个参数是否有缺失是否正确,特别确认下复制的api_key是否正确
    401 签名校验失败 {“message”:”HMAC signature does not match”} 签名验证失败,可能原因有很多。
    1. 检查api_key,api_secret 是否正确。
    2.检查计算签名的参数host,date,request-line是否按照协议要求拼接。
    3. 检查signature签名的base64长度是否正常(正常44个字节)。
    403 时钟偏移校验失败 {“message”:”HMAC signature cannot be verified, a valid date or x-date header is required for HMAC Authentication”} 检查服务器时间是否标准,相差5分钟以上会报此错误

    时钟偏移校验失败示例:

    HTTP/1.1 403 Forbidden
    Date: Mon, 30 Nov 2020 02:34:33 GMT
    Content-Length: 116
    Content-Type: text/plain; charset=utf-8
    {
        "message": "HMAC signature does not match, a valid date or x-date header is required for HMAC Authentication"
    }
    

    # 请求参数

    在调用业务接口时,都需要在 Http Request Body 中配置以下参数,请求数据均为json字符串。 请求参数示例:

    {
      "header": {
        "app_id": "your_app_id",
        "status": 3
      },
      "parameter": {
        "sf8e6aca1": {
          "category": "ch_en_public_cloud",
          "result": {
            "encoding": "utf8",
            "compress": "raw",
            "format": "json"
          }
        }
      },
      "payload": {
        "sf8e6aca1_data_1": {
          "encoding": "jpg",
          "status": 3,
          "image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDA..."
        }
      }
    }
    
    参数名 类型 必传 描述
    header object 用于上传平台参数
    header.app_id string 在讯飞开放平台申请的appid信息
    header.status int 请求状态,取值为:3(一次传完)
    parameter object 用于上传服务特性参数
    parameter.sf8e6aca1 object 用于上传功能参数
    parameter.sf8e6aca1.category string ch_en_public_cloud:中英文识别
    parameter.sf8e6aca1.result object 用于上传响应数据参数
    parameter.sf8e6aca1.result.encoding string 文本编码,可选值:utf8(默认值)
    parameter.sf8e6aca1.result.compress string 文本压缩格式,可选值:raw(默认值)
    parameter.sf8e6aca1.result.format string 文本格式,可选值:json(默认值)
    payload object 用于上传请求数据
    payload.sf8e6aca1_data_1 object 用于上传图像数据
    payload.sf8e6aca1_data_1.encoding string 图像编码,jpg格式(默认值)/jpeg格式/png格式/bmp格式
    payload.sf8e6aca1_data_1.status int 上传数据状态,可选值:3(一次传完)
    payload.sf8e6aca1_data_1.image string 图像数据,需保证图像文件大小base64编码后不超过10MB

    # 返回参数

    返回参数示例:

    {
      "header": {
        "code": 0,
        "message": "success",
        "sid": "ase000d1688@hu17b34308ea40210882"
      },
      "payload": {
        "result": {
          "compress": "raw",
          "encoding": "utf8",
          "format": "json",
          "text": "ewogImNhdGVnb3J5IjogImNoX2VuX3B1YmxpY19jbG91ZC..."
        }
      }
    }
    

    text字段Base64解码后示例:

    {
      "pages": [
        {
          "exception": 0,
          "width": 189,
          "angle": 0,
          "lines": [
            {
              "exception": 0,
              "coord": [
                {
                  "x": 23,
                  "y": 7
                },
                {
                  "x": 154,
                  "y": 7
                },
                {
                  "x": 154,
                  "y": 38
                },
                {
                  "x": 23,
                  "y": 38
                }
              ],
              "words": [
                {
                  "coord": [
                    {
                      "x": 23,
                      "y": 7
                    },
                    {
                      "x": 153,
                      "y": 7
                    },
                    {
                      "x": 153,
                      "y": 39
                    },
                    {
                      "x": 23,
                      "y": 39
                    }
                  ],
                  "conf": 0.971542418,
                  "content": "爱我中华"
                }
              ],
              "angle": 0,
              "conf": 0.971542418,
              "word_units": [
                {
                  "center_point": {
                    "x": 35,
                    "y": 22
                  },
                  "coord": [
                    {
                      "x": 23,
                      "y": 7
                    },
                    {
                      "x": 47,
                      "y": 7
                    },
                    {
                      "x": 47,
                      "y": 39
                    },
                    {
                      "x": 23,
                      "y": 39
                    }
                  ],
                  "conf": 0.996019065,
                  "content": "爱"
                },
                {
                  "center_point": {
                    "x": 67,
                    "y": 23
                  },
                  "coord": [
                    {
                      "x": 48,
                      "y": 7
                    },
                    {
                      "x": 86,
                      "y": 7
                    },
                    {
                      "x": 86,
                      "y": 39
                    },
                    {
                      "x": 48,
                      "y": 39
                    }
                  ],
                  "conf": 0.894925296,
                  "content": "我"
                },
                {
                  "center_point": {
                    "x": 101,
                    "y": 23
                  },
                  "coord": [
                    {
                      "x": 87,
                      "y": 7
                    },
                    {
                      "x": 115,
                      "y": 7
                    },
                    {
                      "x": 115,
                      "y": 39
                    },
                    {
                      "x": 87,
                      "y": 39
                    }
                  ],
                  "conf": 0.997506082,
                  "content": "中"
                },
                {
                  "center_point": {
                    "x": 134,
                    "y": 23
                  },
                  "coord": [
                    {
                      "x": 116,
                      "y": 7
                    },
                    {
                      "x": 153,
                      "y": 7
                    },
                    {
                      "x": 153,
                      "y": 39
                    },
                    {
                      "x": 116,
                      "y": 39
                    }
                  ],
                  "conf": 0.997719347,
                  "content": "华"
                }
              ]
            }
          ],
          "height": 47
        }
      ],
      "category": "ch_en_public_cloud",
      "version": "3.5.0.2094"
    }
    
    参数名 类型 描述
    header object 用于描述平台特性的参数
    header.code int 0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段为准)
    其它表示会话调用异常,详情请参考错误码
    header.message string 描述信息
    header.sid string 本次会话唯一标识id
    payload object 数据段,用于携带响应的数据
    payload.result object 响应数据块
    payload.result.compress string 文本压缩格式
    payload.result.encoding string 文本编码格式
    payload.result.format string 文本格式
    payload.result.text string 返回的文本数据, 需要对其进行base64解码,解码后的返回字段如下

    payload.result.text字段base64解码后信息如下,请重点关注:

    参数名 类型 描述
    pages array 页面集合
    pages[n].exception int 正常返回 0
    异常返回 -1
    pages[n].width int 页面宽度
    pages[n].height int 页面高度
    pages[n].angle float 图像的旋转角度
    pages[n].lines array 文本行集合
    pages[n].lines[n].exception int 正常返回 0
    异常返回 -1
    pages[n].lines[n].angle float 文本行的旋转角度
    pages[n].lines[n].conf float 置信度,取值范围[0-1]
    pages[n].lines[n].coord array 文本行坐标,记录4个顶点位置
    pages[n].lines[n].coord[n].x int 文本行坐标4个顶点x轴的位置信息
    pages[n].lines[n].coord[n].y int 文本行坐标4个顶点y轴的位置信息
    pages[n].lines[n].words array 单词集合
    pages[n].lines[n].words[n].conf float 置信度,取值范围[0-1]
    pages[n].lines[n].words[n].content string 识别结果文本
    pages[n].lines[n].words[n].coord array 单词坐标,记录4个顶点位置
    pages[n].lines[n].words[n].coord[n].x int 单词坐标4个顶点x轴的位置信息
    pages[n].lines[n].words[n].coord[n].y int 单词坐标4个顶点y轴的位置信息
    pages[n].lines[n].word_units array 单字集合
    pages[n].lines[n].word_units[n].content string 字符(中文单字,英文单个字母)
    pages[n].lines[n].word_units[n].conf float 置信度,取值范围[0-1]
    pages[n].lines[n].word_units[n].center_point object 单字中心点的坐标
    pages[n].lines[n].word_units[n].center_point.x int 单字中心点的坐标的x轴位置信息
    pages[n].lines[n].word_units[n].center_point.y int 单字中心点的坐标的y轴位置信息
    pages[n].lines[n].word_units[n].coord array 单字坐标,记录4个顶点位置
    pages[n].lines[n].word_units[n].coord[n].x int 单字坐标的x轴位置信息
    pages[n].lines[n].word_units[n].coord[n].y int 单字坐标的y轴位置信息
    category string 附加信息
    version string 引擎版本号

    # 错误码

    备注:如出现下述列表中没有的错误码,可到 这里 (opens new window) 查询。

    错误码 错误描述 错误说明与处理策略
    10009 input invalid data 输入数据非法,请根据文档检查输入数据的合法性
    10139 invalid param 参数错误,请根据文档检查参数名称与是否必传
    10160 parse request json error 请求数据格式非法,检查请求数据是否是合法的json
    10161 parse base64 string error base64解码失败,检查发送的数据是否使用base64编码了
    10313 invalid appid appid和apikey不匹配,检查appid是否合法

    # 调用示例

    通用文字识别demo java语言 (opens new window)

    通用文字识别demo python语言 (opens new window)

    注: 其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。

    # 常见问题

    # 通用文字识别的主要功能是什么?

    答:将图片中印刷或手写的文字转化为计算机可编码的文字,目前支持中文、英文。

    # 通用文字识别支持什么应用平台?

    答:目前支持Web API应用平台。

    # 通用文字识别对图片有什么要求吗?

    答:图片格式支持jpg格式、jpeg格式、png格式、bmp格式,且需保证图像文件大小base64编码后不超过10MB。