# 印刷文字识别(多语种) API 文档

# 接口说明

  • 基于深度神经网络模型的端到端文字识别系统和讯飞自研的行业先进的光学字符识别技术,将图片(来源如扫描仪或数码相机)中的印刷字体,支持扫描体以及复杂自然场景下的文字识别,直接转换为可编辑文本。支持标准协议中英、保加利亚、塞尔维亚、乌克兰、波斯、普什图、乌尔都、希伯来、立陶宛、挪威、斯洛伐克、塔吉克、土库曼、斯洛文尼亚、荷兰、波兰、孟加拉、捷克、菲律宾、克罗地亚、豪撒、匈牙利、罗马尼亚、瑞典、斯瓦西里、土耳其、乌兹别克、格鲁吉亚、阿塞拜疆、丹麦、芬兰、拉脱维亚、希腊、亚美尼亚、老挝、泰米尔、泰卢固语、德语、法语、西班牙语、葡萄牙语、意大利语、马来语、印尼语、日语、韩语、俄语、越南语、哈萨克语种识别。实现高精准、毫秒级识别体验。适用于资料存档/处理,辅助教学,卡证信息提取。

  • 部分开发语言demo如下,其他开发语言请参照文档进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。
    印刷文字识别(多语种) demo java语言 (opens new window)
    印刷文字识别(多语种) demo python语言 (opens new window)

  • 印刷文字识别(多语种)时,需按照以下要求:

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

# 鉴权说明

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

# 鉴权方法

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

http示例url:

https://cn-east-1.api.xf-yun.com/v1/ocr?host=cn-east-1.api.xf-yun.com&date=Wed%2C+07+Dec+2022+08%3A18%3A43+GMT&authorization=YXBpX2tleT0iYTc0NjZkNmY1YTA5OWQzZWQzOTRiM2Y1OTc0NmNlZGIiLCBhbGdvcml0aG09ImhtYWMtc2hhMjU2IiwgaGVhZGVycz0iaG9zdCBkYXRlIHJlcXVlc3QtbGluZSIsIHNpZ25hdHVyZT0icDdKU3pQUzR3N0NWYndweEprQlBmSk1ueENheTlvbVh0Y1l1SHdhSS9DWT0i

鉴权参数:

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

• date参数生成规则:

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

• authorization参数生成格式:

1)获取接口密钥APIKey 和 APISecret。
在讯飞开放平台控制台,创建一个应用后打开印刷文字识别(多语种)页面可以获取,均为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://cn-east-1.api.xf-yun.com/v1/ocr"
date = "Wed, 07 Dec 2022 08:18:43 GMT"

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

host: cn-east-1.api.xf-yun.com
date: Wed, 07 Dec 2022 08:18:43 GMT
POST /v1/ocr 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, 07 Dec 2022 08:18:43 GMT"

则signature为

signature="p7JSzPS4w7CVbwpxJkBPfJMnxCay9omXtcYuHwaI/CY="

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

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

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

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

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

# 鉴权结果

如果鉴权失败,则根据不同错误类型返回不同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 appid",
		"status": 3
	},
	"parameter": {
		"ocr": {
			"language": "af",
			"ocr_output_text": {
				"encoding": "utf8",
				"compress": "raw",
				"format": "json"
			}
		}
	},
	"payload": {
		"image": {
			"encoding": "jpg",
			"image": "iVBORw0KGg······",
			"status": 3
		}
	}
}

请求参数说明:

参数名 类型 必传 描述
header object 用于上传平台参数
header.app_id string 在讯飞开放平台申请的appid信息
header.status int 请求状态,取值为:3(一次传完)
parameter object 用于上传服务特性参数
parameter.ocr object 服务别名
parameter.ocr.language string 语种
parameter.ocr.ocr_output_text object 数据格式预期,用于描述返回结果的编码等相关约束,不同的数据类型,约束维度亦不相同,此 object 与响应结果存在对应关系。
parameter.ocr.ocr_output_text.encoding string 文本编码,可选值:utf8(默认), gb2312
parameter.ocr.ocr_output_text.compress string 文本压缩格式,可选值:raw(默认), gzip
parameter.ocr.ocr_output_text.format string 文本格式,可选值:plain, json(默认), xml
payload object 用于上传服务特性参数
payload.image object 输入数据
payload.image.encoding stringt 图像编码,可选值:jpg:jpg格式(默认), jpeg:jpeg格式, png:png格式, bmp:bmp格式, webp:webp格式, tiff:tiff格式
payload.image.image string 图像数据,需要base64编码,最小尺寸:1B, 最大尺寸:10485760B
payload.image.status int 数据状态,可选值:3(一次性传完)

# 返回结果

返回参数示例:

{
	"header": {
		"code": 0,
		"message": "success",
		"sid": "ocr000e583f@hu1847a3af5cd05c2882"
	},
	"payload": {
		"ocr_output_text": {
			"compress": "raw",
			"encoding": "utf8",
			"format": "json",
			"seq": "0",
			"status": "3",
			"text": "ewogICAiY2F......"
		}
	}
}

text字段Base64解码后示例:

{
   "category" : "mix6",
   "pages" : [
      {
         "angle" : 359.08724975585938,
         "exception" : 0,
         "height" : 326,
         "lines" : [
            {
               "angle" : 0,
               "conf" : 0.98804998397827148,
               "content" : "荷兰语",
               "coord" : [
                  {
                     "x" : 75,
                     "y" : 46
                  },
                  {
                     "x" : 140,
                     "y" : 46
                  },
                  {
                     "x" : 140,
                     "y" : 72
                  },
                  {
                     "x" : 75,
                     "y" : 72
                  }
               ],
               "exception" : 0,
               "words" : [
                  {
                     "conf" : "1.0",
                     "content" : "荷兰语",
                     "coord" : [
                        {
                           "x" : 75,
                           "y" : 46
                        },
                        {
                           "x" : 139,
                           "y" : 46
                        },
                        {
                           "x" : 139,
                           "y" : 73
                        },
                        {
                           "x" : 75,
                           "y" : 73
                        }
                     ]
                  }
               ]
            },
            {
               "angle" : 0.5509040355682373,
               "conf" : 0.9999803900718689,
               "content" : "Hallo, hoe is het weer",
               "coord" : [
                  {
                     "x" : 44,
                     "y" : 120
                  },
                  {
                     "x" : 328,
                     "y" : 117
                  },
                  {
                     "x" : 328,
                     "y" : 150
                  },
                  {
                     "x" : 44,
                     "y" : 153
                  }
               ],
               "exception" : 0,
               "words" : [
                  {
                     "conf" : "1.0",
                     "content" : "Hallo,",
                     "coord" : [
                        {
                           "x" : 43,
                           "y" : 120
                        },
                        {
                           "x" : 114,
                           "y" : 119
                        },
                        {
                           "x" : 115,
                           "y" : 153
                        },
                        {
                           "x" : 44,
                           "y" : 153
                        }
                     ]
                  },
                  {
                     "conf" : "1.0",
                     "content" : "hoe",
                     "coord" : [
                        {
                           "x" : 129,
                           "y" : 119
                        },
                        {
                           "x" : 164,
                           "y" : 118
                        },
                        {
                           "x" : 165,
                           "y" : 152
                        },
                        {
                           "x" : 130,
                           "y" : 152
                        }
                     ]
                  },
                  {
                     "conf" : "1.0",
                     "content" : "is",
                     "coord" : [
                        {
                           "x" : 183,
                           "y" : 118
                        },
                        {
                           "x" : 196,
                           "y" : 118
                        },
                        {
                           "x" : 197,
                           "y" : 152
                        },
                        {
                           "x" : 184,
                           "y" : 152
                        }
                     ]
                  },
                  {
                     "conf" : "1.0",
                     "content" : "het",
                     "coord" : [
                        {
                           "x" : 210,
                           "y" : 118
                        },
                        {
                           "x" : 245,
                           "y" : 118
                        },
                        {
                           "x" : 246,
                           "y" : 151
                        },
                        {
                           "x" : 211,
                           "y" : 152
                        }
                     ]
                  },
                  {
                     "conf" : "1.0",
                     "content" : "weer",
                     "coord" : [
                        {
                           "x" : 260,
                           "y" : 117
                        },
                        {
                           "x" : 326,
                           "y" : 117
                        },
                        {
                           "x" : 327,
                           "y" : 151
                        },
                        {
                           "x" : 261,
                           "y" : 151
                        }
                     ]
                  }
               ]
            },
            {
               "angle" : 356.71075439453125,
               "conf" : 0.99095529317855835,
               "content" : "vandaag",
               "coord" : [
                  {
                     "x" : 44,
                     "y" : 154
                  },
                  {
                     "x" : 158,
                     "y" : 160
                  },
                  {
                     "x" : 156,
                     "y" : 192
                  },
                  {
                     "x" : 42,
                     "y" : 186
                  }
               ],
               "exception" : 0,
               "words" : [
                  {
                     "conf" : "1.0",
                     "content" : "vandaag",
                     "coord" : [
                        {
                           "x" : 43,
                           "y" : 153
                        },
                        {
                           "x" : 156,
                           "y" : 160
                        },
                        {
                           "x" : 154,
                           "y" : 193
                        },
                        {
                           "x" : 41,
                           "y" : 186
                        }
                     ]
                  }
               ]
            }
         ],
         "width" : 491
      }
   ],
   "protoc" : "2.0",
   "version" : "4.5.0.1120"
}

返回参数说明:

参数名 类型 描述
header object 用于描述平台特性的参数
header.code int 0表示会话调用成功(并不一定表示服务调用成功,服务是否调用成功以text字段为准)
header.message string 描述信息
header.sid string 本次会话唯一标识id
payload object 数据段,用于携带响应的数据
payload.ocr_output_text object 响应数据块
payload.ocr_output_text.compress string 文本压缩格式
payload.ocr_output_text.encoding string 文本编码格式
payload.ocr_output_text.format string 文本格式
payload.ocr_output_text.text string 返回的文本数据,需要对其进行base64解码
payload.ocr_output_text.status string 状态码

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

参数名 类型 描述
version string 引擎版本号
category string 引擎调用模式
protocol string 输出协议版本号,当前协议版本号为2.0
pages array 页面集合
pages.height int 页面的高度,以像素为单位
pages.width int 页面的宽度,以像素为单位
pages.exception int 异常信息,0(正常)、-1(异常)
pages.angle float 旋转角度,范围[0,360],顺时针方向
pages.lines array 文本行,若未检测到,则该字段不存在
pages.tables array 表格,若未检测到,则该字段不存在
pages.checkboxes array 复选框,若未检测到,则该字段不存在
pages.seals array 印章,若未检测到,则该字段不存在
pages.fingerprints array 指印区,若未检测到,则该字段不存在
pages.graphs array 插图,若未检测到,则该字段不存在
pages.headers array 页眉,若未检测到,则该字段不存在
pages.footers array 页脚,若未检测,则该字段不存在
pages.blocks array 段落,若未检测到文本行或未开启分块功能,则该字段不存在。在简历、合同文档结构化中默认按照blocks的结构进行输出
pages.page_numbers array 页码,若未检测到,则该字段不存在
pages.expressions array 公式,若未检测到,则该字段不存在
pages.barcodes array 条码,若未检测到,则该字段不存在

pages.lines字段

参数名 类型 描述
id int 文本行编号,取值范围大于等于0的整数
coord array 位置坐标,至少4个点
coord.x int 坐标轴x
coord.y int 坐标轴y
angle float 文本行角度,取值范围[0-360]度
conf float 置信度,取值范围[0-1]
type string 文本行数据类型(handwriting手写、print印刷)
exception int 异常信息(0:正常,-1:异常返回)
content string 识别结果
words array 单词集合
words.content string 识别结果
words.conf float 置信度,取值范围[0-1]
words.coord array 位置坐标,至少4点
words.coord.x int 坐标轴x
words.coord.y int 坐标轴y
word_units array 单字集合(中文单字,英文单个字母)
word_units.content string 识别结果
word_units.conf float 置信度,取值范围[0-1]
word_units.coord array 位置坐标,至少4点
word_units.coord.x int 坐标轴x
word_units.coord.y int 坐标轴y

pages.tables字段

参数名 类型 描述
id int 表格编号,若id相同则说明同属于一个表格
coord array 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
cols int 表格划分出的列数
rows int 表格划分出的行数
height_set array 表格单元格高度的集合,以像素为单位
width_set array 表格单元格宽度的集合,以像素为单位
cells array 单元格的集合
cells.coord array 位置坐标,至少四点
cells.coord.x int 坐标轴x
cells.coord.y int 坐标轴y
cells.col int 单元格的列号
cells.row int 单元格的行号
cells.colspan int 单元格横跨的列数
cells.rowspan int 单元格横跨的行数
cells.lines array 协议2.0不推荐使用
cells.elements array 单元格中插入要素的集合
cells.elements.id int 单元格中插入要素的编号
cells.elements.type string 单元格中插入其他要素的类型(table表格、graph插图、checkbox复选框、seal印章、fingerprint指印、block段落)

pages.checkboxes字段

参数名 类型 描述
id int 复选框编号
coord object 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴x
type string tick: 勾选(涂黑)框 cross: 叉选框 blank: 空白框

pages.seals字段

参数名 类型 描述
id int 印章编号
coord array 目标区域位置信息,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
elements array 印章中插入要素的集合
elements.id int 印章中插入要素的编号
elements.type string 印章中插入要素的类型,table(表格)、graph( 插图)、 checkbox(复选框)、seal(印章)、fingerprint(指印)、 block(段落)

pages.fingerprints字段

参数名 类型 描述
id int 指印编号
coord object 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y

pages.graphs字段

参数名 类型 描述
id int 插图中插入要素的编号
coord array 位置信息,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
elements array 插图中插入要素的集合
elements.id float 默认值:1
elements.type string 插图中插入要素的类型,可选值:block(段落)

pages.headers字段

参数名 类型 描述
id int 页眉编号
coord array 目标区域位置信息,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
elements array 页眉中插入要素的集合
elements.id int 页眉中插入要素的编号
elements.type string 页眉中插入要素的类型,table(表格)、graph(插图)、checkbox( 复选框)、seal(印章)、fingerprint(指印)、block(段落)

pages.footers字段

参数名 类型 描述
id int 页脚编号
coord array 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
elements array 页脚中插入要素的集合,取值范围:min: 10 ~ max: 100
elements.id int 插入要素编号
elements.type string 页脚中插入要素的类型,table(表格)、graph(插图)、checkbox(复选框)、seal(印章)、fingerprint(指印)、block(段落)

pages.blocks字段

参数名 类型 描述
id int 段落编号,对于跨栏,跨页的文本块区域,其编号是相同的
coord array 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
line_ids array 段落中的文本行,采用lines中的id进行索引
line_ids.level int 层级:目前只在简历、文档结构化中出现。表示当前块在该份简历中所属的嵌套层数。取值范围大于等于1的整数。
line_ids.parent_id int 父节点:目前只在简历、文档结构化中出现。当前块所对应的父节点。取值范围大于等于-1的整数
line_ids.type string 段落块的类别(目前只在简历、文档结构化中出现)
head: 标题 line: 文本

pages.page_numbers字段

参数名 类型 描述
id int 页码编号
coord array 目标区域位置信息,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
elements array 页码中插入要素的集合
elements.id int 页码中插入要素的编号
elements.type string 页码中插入要素的类型

pages.expressions字段

参数名 类型 描述
id int 公式编号
coord array 目标区域位置信息,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y

pages.barcodes字段

参数名 类型 描述
id int 条码编号
coord array 位置坐标,至少4点
coord.x int 坐标轴x
coord.y int 坐标轴y
type string 条码类型,barcode(条形码)、qrcode(二维码)
content string 识别结,默认值:1

# language语言特性参数列表:

语言 参数
荷兰 af
阿塞拜疆 az
保加利亚 bg
孟加拉 bn
中英 ch_en
捷克 cs
丹麦 da
德语 de
希腊 el
西班牙语 es
波斯 fa
芬兰 fi
法语 fr
豪撒 ha
希伯来 he
克罗地亚 hr
匈牙利 hu
亚美尼亚 hy
印尼语 id
意大利语 it
日语 ja
格鲁吉亚 ka
哈萨克语 kka
韩语 ko
老挝 lo
立陶宛 lt
拉脱维亚 lv
内蒙语 mn
马来语 ms
挪威 nb
波兰 pl
普什图 ps
葡萄牙语 pt
罗马尼亚 ro
俄语 ru
斯洛伐克 sk
斯洛文尼亚 sl
塞尔维亚 sr
瑞典 sv
斯瓦西里 sw
泰米尔 ta
泰卢固 te
塔吉克 tg
土库曼 tk
菲律宾 tl
土耳其 tr
乌克兰 uk
乌尔都 ur
乌兹别克 uz
越南语 vi
印地语 hi
泰语 th

# 常见问题

# 印刷文字识别(多语种)的主要功能是什么?

答:将图片中印刷的文字转化为计算机可编码的文字。

# 印刷文字识别(多语种)支持什么应用平台?

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

# 印刷文字识别(多语种)对图片有什么要求吗?

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

在线
咨询
建议
反馈
体验
中心