Skip to main content

扫描笔云端协议说明

更新记录#

版本更新说明责任人日期
1.00初版定义李逸卿2021.1.14
1.01新增文本翻译接口,用于收藏夹中的句子翻译李逸卿2021.1.19
1.02修改语音翻译和文本翻译协议,新增translation字段李逸卿2021.1.25
1.03新增图像帧数据协议说明梁展晖2021.2.02
1.04新增多行扫描请求方式李逸卿2021.3.2
1.05多行扫描请求更改为实时扫描参数,修改多行扫描交互方式梁展晖2021.3.7
1.06增加翻译语种字段:recognizer.visual_result增加data.from、data.to字段,recognizer.trans_result增加data.from、data.to字段梁展晖2021.3.9
1.07更新单词查询接口地址梁展晖2021.3.11
1.08增加jpeg格式协议说明。帧头数据格式FMT增加JPEG: 0x30,保留数据添加jpeg说明梁展晖2021.3.22
1.09visuale_in请求增加参数image_metadata.reverse,支持竖向拼接图片梁展晖2021.3.24
1.10visual_in请求添加debug, image_debug字段用于调试梁展晖2021.5.27
1.11增加请求上限限制:翻译上限:256字符,ocr上限:4090px李逸卿2021.6.3
1.121. visual_in增加tokenization字段,用于开启/关闭中文分词;2. visual_result增加segs字段,用于返回中文分词结果胡星晨2021.7.16
1.131. 更新词典接口,支持中文单字、单词、成语以及英文单词查询;2. 优化中文分词逻辑胡星晨2021.8.11
1.141. 请求协议visual_in新增词典开关dictionary教育内容开关resources ,返回结果profile新增DICTIONARY代表词典内容返回,RESOURCES代表教育内容返回。;2. 词典中文单字接口返回新增字典strokes.gif,供分辨率低屏幕展示笔画。刘钟蔚2021.9.17
1.151. 修正image_metadata.tokenization字段刘钟蔚2021.9.18
1.16词典查询的英文单词返回新增details_us_pronunce美式发音字段。刘钟蔚2021.9.28
1.17更新口语练习相关协议和接口说明张毅2021.10.22
1.18更新词典诗词返回相关协议和接口说明刘钟蔚2021.12.13
1.19新增语速设置接口说明刘钟蔚2021.12.15
2.00精简文档,只保留EVS协议部分刘钟蔚2022.05.01
2.01新增visual_inprofile字段CUSTOM_JXW_SEARCHTOPIC,用于云端搜题刘钟蔚2022.07.14
2.02搜题协议字段修改为SEARCHTOPIC,用于云端搜题;增加XW01搜题服务刘钟蔚2022.09.20
2.03搜题协议增加WT01搜题服务,增加resolutionratio参数刘钟蔚2022.10.31

已有能力#

在开始对接iFLYOS之前,请先查阅线上文档的已有能力,本文档主要描述新增能力。

在扫描笔的实现过程中,主要需要实现以下能力:

name说明实现要求
recognizer识别器,这是iFLYOS交互的基础必须实现
audio_player音频播放器,在扫描笔项目中播放的内容是TTS语音必须实现
system系统相关必须实现
speaker扬声器控制必须实现
screen屏幕控制可选实现
interceptor自定义拦截器,是iFLYOS 实现自定义语义理解的基础可选实现

扫描翻译#

业务流程图#

在流程图中可以看出:

  1. 设备端一次请求会收到至少4个iFLYOS的回复
  2. 设备端通过流的方式传输图片至iFLYOS云端
  3. 若开启中文分词,且原文包含中文时,iFLYOS将返回原文分词结果,否则返回原文原始文本

请求协议visual_in#

{ "iflyos_header": {...}, "iflyos_context": {...}, "iflyos_request": { "header": { "name": "recognizer.visual_in", "request_id": "xxxxxxxx" }, "payload": { "profile": "OCR_TRANS_TTS", "realtime": "true", "image_metadata":{ "reverse": "true", "tokenization":"true", "dictionary":"true", // 20210917新增: 词典开关 "dict_type":"xuewang", // 20220520新增: 词典类型 "resources":"true", // 20210917新增: 教育内容开关 "height": "128", "image_data_debug": "false", "debug": "false" "searchtopic_ability": "01", // 20210920新增:搜题能力 "searchtopic_service": "XW01" // 20210920新增:搜题服务方 } } }}
参数类型说明必填
iflyos_headerObject构建的通用 iflyos_header
iflyos_contextObject构建的通用 iflyos_context
profileString请求操作,具体取值见下表
realtimeBoolean实时识别,多行扫描时必须开启,会实时返回识别结果。实时识别也支持单行扫描,与原单行扫描协议一致。
image_metadataObject图像相关信息
image_metadata.heightInt图片高度,单位是px
image_metadata.reverseboolean竖向拼接图片,默认为false
image_metadata.tokenizationBoolean中文分词,设置为true且原文为中文,则返回中文分词结果。若未开启或原文为英文,则返回原文原始文本。
image_metadata.dictionaryBoolean词典开关,设置为true时调用词典接口
image_metadata.dict_typeBoolean词典类型
image_metadata.resourcesBoolean教育内容开关,设置为true时调用教育内容接口
image_metadata.image_debugboolean设置为true时,云端暂存设备上报的数据用于从调试接口获取图片等数据,仅供开发调试使用。此时请务必将原图使用jpeg算法压缩后传输。默认为false
image_metadata.debugboolean设置为true时,云端收集ocr相关信息用于算法调试,仅供开发调试使用,默认为false 。处于debug模式时扫描图片,云端不会返回识别结果,只会将采集后的图片保存,用于后续算法优化。
image_metadata.searchtopic_abilitystring01:扫描搜题;
image_metadata.searchtopic_servicestringJXW01:学王搜题,需要申请商务授权;XW01:小蛙搜题,不返回搜题结果;WT01(玩瞳搜题,需要申请商务授权)
image_metadata.searchtopic_resolutionratiostring设备分辨率

profile取值

profile 取值说明
OCR图像识别,返回识别结果
OCR_TTS图像识别,语音合成识别结果
OCR_TRANS图像识别,翻译识别结果
OCR_TRANS_TTS图像识别,翻译识别结果,合成原文和译文
SEARCHTOPIC用于云端搜题(注:具体请求服务需要在image_metadata.searchtopic中定义)
TEXTBOOK教材指读,暂未开放
发送图像数据#

在发送image_in请求后,客户端流传图像二进制元数据。通过__END__标记数据发送完成。

注意:

  • 传输图片时,按列从上到下,从左到右传输。
  • 多行扫描时,开始扫描发一个visual_in请求,发送图片数据,换行时发送换行帧。当用户在超时时间(建议2s)内没有扫描新的数据,发送__END__标记结束识别。
图像帧数据协议说明#

1

多行扫描换行帧#

协议格式与图像帧数据协议一致,仅图像类型固定为0xFF,其他字段任意,无帧数据。

换行帧示例

2

帧头保留数据说明#
JPEG#

当图像格式为JPEG(0x30)时,保留数据为数据帧长度: uint16, 小端字节序

请求协议text_in#

{ "iflyos_header": {...}, "iflyos_context": {...}, "iflyos_request": { "header": { "name": "recognizer.text_in", "request_id": "xxxxxxxx" }, "payload": { "query": "请求的文本", "with_tts": true, "reply_key": "xxxxxx" "profile": "OCR_TRANS_TTS", //0614新增 } }}
参数类型说明必填
iflyos_headerObject构建的通用 iflyos_header
iflyos_contextObject构建的通用 iflyos_context
queryString需要请求的文本
profileString请求操作,具体取值见下表(不填则默认请求云端语义链路)
with_ttsBool是否需要语音回复,如果你希望用户点击按钮的时候,不要出现提示音,那么可以设置为 false,默认为:true
reply_keyString如果接收到 name 为 recognizer.expect_reply 的响应的话,重新打开麦克风识别的时候,需要填入响应中返回的 reply_key 中的取值

profile取值

profile 取值说明
OCR_TRANS_TTS返回翻译结果、原文TTS结果、译文TTS结果、中文分词结果
OCR_TRANS_TTS_DIC返回翻译结果、原文TTS结果、译文TTS结果、词典结果、教育内容结果、中文分词结果
OCR_TRAN_DIC返回翻译结果、词典结果、教育内容结果、中文分词结果
OCR_TTS_DIC原文TTS结果、词典结果、教育内容结果、中文分词结果

返回示例#

OCR结果/翻译结果#
{ "iflyos_responses": [ ..., { "header": { "name": "recognizer.visual_result" }, "payload": { "is_last": true, "profile": "OCR", "data": { "code": 0, "description": "success", "sid": "xxxxxxx", "content":"null", segs:['欢迎','购买','聆','思','智能','扫描','笔',] "from": null, "to": null } } } ]}
参数类型说明必有
is_lastBool是否为最终结果,true表示当前文本为最终结果,false表示当前文本不是最终状态,只有在原文识别,实时扫描的情况下会出现取值为false
profileStringAI引擎名称,取值为OCRTRANSTEXTBOOK(暂未开放)
dataObject引擎处理结果
data.codeInt请求结果代码,0代表成功。错误码查询
data.descriptionString请求结果说明
data.sidString图像识别请求的唯一标识
data.contentString1. 若profile取值为OCRis_lastfalse 时,返回扫描识别的文本结果(需注意的是:content默认返回为null,识别结果默认在segs显示,设备端只需要那segs的分词后结果即可)is_lasttrue 时,返回null;2. 若profile取值为TRANS,则这里返回的是翻译的结果。;3. 若设备处于debug模式,则这里固定返回”原图已采集完成“
Data.segsString1. 若设备开启分词,处于单行扫描模式,且原文包含中文;或处于多行扫描, 且 is_lasttrue 时,返回分词结果,词与词之间通过英文逗号隔开;2. 其余情况此处返回null
data.fromString1. 若profileTRANS时表示翻译原语种。取值:;cn(中文);en(英文);2. 若profile为其他时值为null
data.toString1. 若profileTRANS时表示翻译结果语种。取值:;cn(中文);en(英文);2. 若profile为其他时值为null
词典结果#
{ "iflyos_responses": [ ..., { "header": { "name": "recognizer.visual_result" }, "payload": { // 新增profile: "DICTIONARY" "profile": "DICTIONARY", // data中内容与词典接口返回结果相同 "data": { "content":"愚公移山", "type":"idiom", "details":[ { "pronunce":[ { "symbol":[ "yú", "gōng", "yí", "shān" ], "url":"http://dict.cn/mp3.php?q=efVw7 " } ], "definition":[ { "description":[ "比喻坚持不懈地改造自然和坚定不移地进行斗争。" ] } ], "origin":"《列子·汤问》记载:愚公家门前有两大座山挡着路,他决...", "synonyms":[ "锲而不舍", "持之以恒" ], "antonyms":[ "虎头蛇尾", "有头无尾" ], "story":"传说古代有两座大山间住着一个90岁的愚公,他每次出门因大山阻隔,要绕很大的弯子......", "poem":[ "太行、王屋二山,方七百里,高万仞,本在冀州之南,河阳之北。", "北山愚公者,年且九十,面山而居...", "河曲智叟笑而止之曰..." ] } ]}
参数类型说明必有
profileStringDICTIONARY为词典返回内容
dataObjectdata中内容与词典接口返回结果相同,可参考本文档词典查询接口
教育内容结果#
{ "iflyos_meta": { …… }, "iflyos_responses": [ { "header": { "name": "recognizer.visual_result" }, "payload": { "is_last": true, "profile": "RESOURCES", "data": { "resources": [ { "type": "poem", "title": "静夜思", "score": 10001.4380398989, "extra": { "review": [ [ { "url": "https://cdn.iflyos.cn/public/ocr_resources/poem_review/7a53928fa4dd31e82c6ef826f341daec.mp3", "title": "创作背景", "content_url": "https://console.iflyos.cn/api/v1/ocr/resources/value?type=poem&id=10&key=review_0" } ], [ { "url": "https://cdn.iflyos.cn/public/ocr_resources/poem_review/1905aedab9bf2477edc068a355bba31a.mp3", "title": "赏析", "content_url": "https://console.iflyos.cn/api/v1/ocr/resources/value?type=poem&id=10&key=review_1" } ], [ { "url": "https://cdn.iflyos.cn/public/ocr_resources/poem_review/28267ab848bcf807b2ed53c3a8f8fc8a.mp3", "title": "版本说明", "content_url": "https://console.iflyos.cn/api/v1/ocr/resources/value?type=poem&id=10&key=review_2" } ], [ { "url": "https://cdn.iflyos.cn/public/ocr_resources/poem_review/1141938ba2c2b13f5505d7c424ebae5f.mp3", "title": "评析", "content_url": "https://console.iflyos.cn/api/v1/ocr/resources/value?type=poem&id=10&key=review_3" } ] ], "explain": [ [ { "url": "https://cdn.iflyos.cn/public/ocr_resources/poem_explain/7f5d04d189dfb634e6a85bb9d9adf21e.mp3", "title": "译文及注释", "content_url": "https://console.iflyos.cn/api/v1/ocr/resources/value?type=poem&id=10&key=explain_0" } ] ], "author": "李白", "audio_url": "https://cdn.iflyos.cn/public/ocr_resources/poem_audio/1d8cf949089ce92c96a3e8e60c6cc19e.mp3" }, "content": "床前明月光,疑是地上霜。举头望明月,低头思故乡。" }, { "type": "poem", "title": "满庭芳·静夜思", "score": 10000.9036120772, "extra": { "review": [], "explain": [], "author": "辛弃疾", "audio_url": "https://cdn.iflyos.cn/public/ocr_resources/poem_audio/16537a893ccfbec9727293bb3cdd4962.mp3" }, "content": "云母屏开,珍珠帘闭,防风吹散沉香。离情抑郁,金缕织硫黄。柏影桂枝交映,从容起,弄水银堂。连翘首,惊过半夏,凉透薄荷裳。一钩藤上月,寻常山夜,梦宿沙场。早已轻粉黛,独活空房。欲续断弦未得,乌头白,最苦参商。当归也!茱萸熟,地老菊花黄。" }, { "type": "audio", "title": "静夜思", "score": 10001.4380398989, "extra": { "audio_url": "http://mp3play.61gequ.com/audio/33/1604-1532945740516.mp3" }, "content": null } ] } } } ]}
参数类型说明必有
profileStringRESOURCES为教育内容库的内容返回
dataObject返回结果
resourcesObject资源结果
typeString单词、词语、四字成语、文言文、古诗词、歇后语
titleString内容标题
scorefloat内容匹配置信度
contentString详细内容
extraObject更多的内容,不同类型资源不同
extra.reviewObject故事、文言文复习相关内容
extra.review.titleString内容类型
extra.review.urlString复习音频链接
extra.review.content_urlString复习音频文本
extra.explainObject故事、文言文译文
extra.explain.titleString内容类型
extra.explain.urlString译文音频链接
extra.explain.content_urlString译文音频文本
TTS#
{ "iflyos_responses": [ ..., { "header": { "name": "audio_player.audio_out" }, "payload": { "type": "TTS", "url": "http://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "secure_url": "https://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "behavior": "SERIAL", "resource_id": "e52e7xxxxxxxxxxxe52e7" "content_type": "original" } } ]}
参数类型说明必有
typeString播放器类型,此处取值TTS
behaviorString资源播放方式。<br>当type取值为TTS时,behavior取值:<br>- SERIAL:串行TTS,执行时阻塞,播完TTS才可以执行下一个指令)<br>- PARALLEL:并行,执行不阻塞,开始播放TTS时可以同时执行后续指令。若该字段未出现,默认为SERIAL
urlString内容播放地址,可能放的是http的链接,设备解析速度会更快,但有可能会被劫持
secure_urlString内容播放的安全地址,放的是不会被劫持的https链接,但设备解析速度可能会相对慢一些
resource_idString内容ID
content_typeStringTTS类型,取值为 original代表原文,取值为translation代表译文。仅在图片/语音/文本翻译过程中会出现

上限说明#

  • OCR识别服务最长支持4090px长度的图片,若扫描内容超长,云端将会回复报错的TTS。
  • 翻译服务最多支持256字符的翻译长度,若翻译内容超长,云端会在译文文本和TTS处返回报错提示。

注意:

当设备端处于debug模式时,每次完成扫描,云端均会下发”原图已采集完成“的TTS音频,表示本次数据采集已完成。

语音翻译#

流程图

请求示例#

语音翻译请求

{ "iflyos_header": {...}, "iflyos_context": {...}, "iflyos_request": { "header": { "name": "recognizer.audio_in", "request_id": "xxxxxxxx" }, "payload": { "enable_vad": false, "profile": "CLOSE_TALK", "format": "AUDIO_L16_RATE_16000_CHANNELS_1", "translation": true } }}
参数类型说明必填
iflyos_headerObject构建的通用 iflyos_header
iflyos_contextObject构建的通用 iflyos_context
enable_vadBool是否使用云端VAD,此处需取值为false
profileString音频输入的处理引擎。近场取值CLOSE_TALK,远场取值FAR_FIELD
formatString音频编码类型,取值见下表
translationBool本次请求是否需要翻译。默认取值为FALSE,若取值为TRUE,将只翻译不请求NLU

返回示例#

语音识别结果#
{ "iflyos_responses": [ ..., { "header": { "name": "recognizer.intermediate_text" }, "payload": { "text": "明天的天气怎么样", "is_last": false } } ]}
语音翻译结果#
{ "iflyos_responses": [ ..., { "header": { "name": "recognizer.trans_result" }, "payload": { "code": 0, "description": "success", "sid": "xxxxxxx", "data":{ "dst": "Hello World ", "src": "你好世界", "from": "cn", "to": "en" } } } ]}
参数类型说明必有
codeInt请求结果代码,0代表成功。错误码查询
descriptionString请求结果说明
sidString图像识别请求的唯一标识
dataObject图像识别请求的结果
data.dstString译文文本
data.srcString原文文本
data.fromString翻译原语种。取值:;cn(中文);en(英文)
data.toString翻译结果语种。取值:;cn(中文);en(英文)
TTS#
{ "iflyos_responses": [ ..., { "header": { "name": "audio_player.audio_out" }, "payload": { "type": "TTS", "url": "http://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "secure_url": "https://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "behavior": "SERIAL", "resource_id": "e52e7xxxxxxxxxxxe52e7" "content_type": "translation" } } ]}
参数类型说明必有
typeString播放器类型,此处取值TTS
behaviorString资源播放方式。<br>当type取值为TTS时,behavior取值:<br>- SERIAL:串行TTS,执行时阻塞,播完TTS才可以执行下一个指令)<br>- PARALLEL:并行,执行不阻塞,开始播放TTS时可以同时执行后续指令。若该字段未出现,默认为SERIAL
urlString内容播放地址,可能放的是http的链接,设备解析速度会更快,但有可能会被劫持。
secure_urlString内容播放的安全地址,放的是不会被劫持的https链接,但设备解析速度可能会相对慢一些
resource_idString内容ID
content_typeStringTTS类型,取值为 original代表原文,取值为translation代表译文。仅在图片/语音/文本翻译过程中会出现

上限说明#

翻译服务最多支持256字符的翻译长度,若翻译内容超长,云端会在译文文本和TTS处返回报错提示。

文本翻译#

请求示例#

{ "iflyos_header": {...}, "iflyos_context": {...}, "iflyos_request": { "header": { "name": "recognizer.text_in", "request_id": "xxxxxxxx" }, "payload": { "query": "请求的文本", "with_tts": true, "translation": true } }}
参数类型说明必填
iflyos_headerObject构建的通用 iflyos_header
iflyos_contextObject构建的通用 iflyos_context
queryString请求文本
with_ttsBool是否需要语音回复,如果你希望用户点击按钮的时候,不要出现提示音,那么可以设置为 false,默认为:true
translationBool本次请求是否需要翻译。默认取值为FALSE,若取值为TRUE,将只翻译不请求NLU

返回示例#

文本翻译结果#
{ "iflyos_responses": [ ..., { "header": { "name": "recognizer.trans_result" }, "payload": { "code": 0, "description": "success", "sid": "xxxxxxx", "data":{ "dst": "Hello World ", "src": "你好世界", "from": "cn", "to": "en" } } } ]}
参数类型说明必有
codeInt请求结果代码,0代表成功。错误码查询
descriptionString请求结果说明
sidString图像识别请求的唯一标识
dataObject图像识别请求的结果
data.dstString译文文本
data.srcString原文文本
data.fromString翻译原语种。取值:;cn(中文);en(英文)
data.toString翻译结果语种。取值:;cn(中文);en(英文)
TTS#
{ "iflyos_responses": [ ..., { "header": { "name": "audio_player.audio_out" }, "payload": { "type": "TTS", "url": "http://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "secure_url": "https://tts.iflyos.cn/tts/sadf.mp3?token=xxxxxxxx", "behavior": "SERIAL", "resource_id": "e52e7xxxxxxxxxxxe52e7" "content_type": "translation" } } ]}
参数类型说明必有
typeString播放器类型,此处取值TTS
behaviorString资源播放方式。<br>当type取值为TTS时,behavior取值:<br>- SERIAL:串行TTS,执行时阻塞,播完TTS才可以执行下一个指令)<br>- PARALLEL:并行,执行不阻塞,开始播放TTS时可以同时执行后续指令。若该字段未出现,默认为SERIAL
urlString内容播放地址,可能放的是http的链接,设备解析速度会更快,但有可能会被劫持。
secure_urlString内容播放的安全地址,放的是不会被劫持的https链接,但设备解析速度可能会相对慢一些
resource_idString内容ID
content_typeStringTTS类型,取值为 original代表原文,取值为translation代表译文。仅在图片/语音/文本翻译过程中会出现

上限说明#

翻译服务最多支持256字符的翻译长度,若翻译内容超长,云端会在译文文本和TTS处返回报错提示。

  • 没帮助 0