标定绘本识别接入文档
文档状态
| 文件标识: | TuringOS-TextBook-V1.0 |
|---|---|
| 系统版本: | SDK |
| 完成日期: | 2022年08月20日 |
文档修订记录
| 文档版本号 | 修订日期 | 修订原因 |
|---|---|---|
| V1.0 | 2022.8.20 | 创建文档 |
| V1.1 | 2022.11.1 | 增加物理页码physicsPageNum字段 |
| V1.2 | 2023.01.16 | 相似绘本: -中英文信息返回,见zhEnData字段 - 多版本相似信息返回,见similarBooks字段 - 更新绘本识别优先级的接口,见 updatePriorityRecognition() |
| V1.3 | 2023.05.10 | 中英文绘本返回封面音频,见zhEnData#nameUrl字段 |
概述
主要用来识别儿童绘本、教材,提供对应绘本教材的音频和内容。
集成步骤
1. 添加依赖库
//必须依赖库
implementation 'com.google.code.gson:gson:2.6.2'
implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation "org.java-websocket:Java-WebSocket:1.4.0"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.aliyun.dpa:oss-android-sdk:2.9.11'//SDKV2.4.1.25 以后需加入
// 指尖&绘本
implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'
2. AndroidManifest配置
添加权限
<!--网络-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--文件读写-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--deviceID-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--绘本、指尖查词-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- 读取手机状态,获取IMEI -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
<!-- android 10 在application节点添加以下适配高版本 -->
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true"
3. 代码混淆
代码混淆文件proguard-project.txt,添加如下内容
-keep class com.turing.**{ *;}
-dontwarn com.turing.**
-keep class com.tuling.**{ *;}
-dontwarn com.tuling.**
-keep class org.java_websocket.**{*;}
-dontwarn org.java_websocket.**
-keep class org.slf4j.**{*;}
-dontwarn org.slf4j.**
-keep class org.eclipse.** { *; }
-dontwarn org.eclipse.**
4. SDK 初始化
使用绘本识别功能前调用,请先调用SDK初始化代码。SDK初始化详情见《Android SDK接入指南说明文档》
TuringInitializer.getInstance().initV3XXX()
5. 参数配置
需要在 turing_config.json 中添加 globalConfig.camera 、textbook 、_bookCamera_节点。
textbook参数如下:
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| sceneMode | int | N | 场景模式选择: sceneMode=0 :表示图片横拍非镜像,例如绘本机器人、绘本台灯等(默认) sceneMode=1 :表示图片竖拍且镜像,例如手机+反光镜 sceneMode=2 :表示图片横拍且镜像,例如平板+反光镜 |
| zipUrlFlag | int | N | 是否需要内页音频压缩包 zipUrlFlag=0 :表示不需要(默认) zipUrlFlag=1:表示需要 |
| categories | List | N | 设置目标匹配的内容: 1=中文绘本 2=英文绘本 3=语文教材 4=英语教材 5=数学教材 6=卡片 默认参数=[1,2,3,4,5],全部绘本教材 |
| regMode | int | N | 阅读模式: 当 regMode=0 时:领读模式(默认) 当 regMode=1 时:指读模式 当 regMode=2 时:兼容模式(领读+指读) 其中,指读模式(=1)和兼容模式(=2)需要商务授权许可 |
| innerAudio | int | N | 整页音频数据(指读识别时是否需要内页整页音频,翻读不存在此字段): 0:不需要(默认) 1:需要 |
| languageOrder | int | N | 针对多语言版本绘本,设置版本顺序。 languageOrder=1 :中文绘本优先(默 认) languageOrder=2:英文绘本优先 |
| accessMode | int | N | 设置目标匹配的绘本库: accessMode=0 :公有库+私有库(默认) accessMode=1 :仅公有库 accessMode=2 :仅私有库 |
| textFlag | int | N | 是否返回文本: textFlag=0 :表示不返回(默认) textFlag=1 :表示返回(需要商务授权许可) textFlag=3 :只返回整读文本 textFlag=4 时:返回整读+热区文本 |
| audioType | int | N | 选择绘本音频类型: audioType=0 :选择高品质音频(需要商务授权许可) audioType=1 :表示选择默认音频(默认) 不推荐使用高品质音频,会增大链路延时 |
| osState | string | N | 清除休眠状态,非休眠状态下不可使用。 (绘本休眠详情见官网说明) |
示例如下
{
"authorization": {
"apikey": "您的apikey",
"secret": "您的secret"
},
"globalConfig": {
"brandModel":"您的品牌型号",
"camera": {
"cameraId": 1,
"cameraApi": 2,
"turingCameraId": 118,
"preMirror": false,
"mirror": true,
"zoom": 0,
"preRotation": -1,
"rotation": 180
}
},
"ability": {
"bookCamera": {
"previewWidth": 640,
"previewHeight": 480,
"imgQuality": 90,
"smallImgQuality": 100
}
"textBook":{
"sceneMode":0,
"zipUrlFlag": 0,
"categories": [
1,2,3,4,5
],
"regMode": 2,
"innerAudio": 0,
"languageOrder":1,
"accessMode": 1,
"textFlag": 3,
"audioType": 1,
"osState": ""
},
}
}
修改参数值的几种方式:
方式一:在清单文件 turing_config.json 中赋值
方式二:修改全局变量值
调用 TuringConfig.getInstance(this).configData 动态设置入参,参数同 turing_config.json。(注:需要在 startTextBookOcr() 前调用 )
val configData: ConfigData = TuringConfig.getInstance(this).configData
configData.ability.textBook.sceneMode = 2
configData.ability.textBook.regMode = 2
configData.ability.textBook.textFlag = 4
configData.ability.textBook.languageOrder = 1
方式三:动态调整
仅对本次识别生效,可设置参数有限,方法见【功能集成】中【动态设置绘本参数】
(注:需要在模型初始化成功( 成功事件见 【开启指尖OCR识别】输出说明中【MessageEvent 说明】 )后,才能调用postFingerConfig。)
6. 开启功能集成
使用说明见下面【功能集成】描述。
实例化
var turingTextBook = TuringTextBook.getInstance(this);
功能集成
1. 开启绘本识别
使用 SDK 内部相机,调用 startTextBookOcr() 就可以开始使用绘本识别功能。
流程图
start=>start: 开始
init=>operation: 设置默认参数turing_config.json
startBook=>operation: 启动预览startTextBookOcr
postParam=>operation: 动态设置参数postBookParam
deal=>operation: 处理回调onSuccecc
release=>end: 释放资源release
start->init->startBook->postParam->deal->release
方法
void startTextBookOcr(ViewGroup layout, BookListener<BaseResponse<TextBookParameters>> listener);
输入说明
| 参数 | 类型 | 说明 |
|---|---|---|
| layout | ViewGroup | 预览界面的布局,建议使用FrameLayout |
| listener | BookListener |
回调接口 |
请求示例
TuringTextBook.getInstance(this).startTextBookOcr(binding.frameLayer,new BookListener<NlpResponseBean<TextBookParameters>>() {
@Override
public void onSuccess(NlpResponseBean<TextBookParameters> result) {
if (null == result) {
return;
}
mUIHandler.post(() -> {
// 下面只是简单的列出了部分操作。具体代码根据实际需求,结合字段含义来实现
TextBookParameters bookParameters = result.getIntent().getParameters();
if (intentCode == 200 || intentCode == 205 || intentCode == 206 || intentCode == 209) {
// 200-识别绘本封面成功 205-封面识别成功,热区识别成功 206-封面识别成功,热区识别失败 209-
TitleDataBean titleDataBean = bookParameters.getTitleData();
FuncDataBean fundataBean = bookParameters.getFuncData();
if (fundataBean != null) {
//封面识别成功之后会返回该书籍是否是ocr识别,是否支持指读
}
if (titleDataBean != null) {
// 显示封面信息
}
if (intentCode == 200) {
List<SimilarBookBean> similarBooks = bookParameters.getSimilarBooks();
if (similarBooks != null && !similarBooks.isEmpty()) {
// 多版本相似返回的数据
}
List<ZhEnDataBean> zhEnData = bookParameters.getTitleData().getZhEnData();
if (zhEnData != null && !zhEnData.isEmpty()) {
// 中英文相似返回的数据
}
}
} else if (intentCode == 201 || intentCode == 208) {
//201内页识别成功 208代表指读识别失败
} else if (intentCode == 207) {
//intentCode == 207代表内页识别成功,指读识别成功
} else {
// 识别失败,可根据 intentCode 判断,例如:intentCode == 300绘本封面识别失败 301绘本内页识别失败。
}
});
}
@Override
public void onImageData(byte[ ] image) {
}
@Override
public void onError(int errorCode, String errMsg) {
showToast(errMsg);
}
@Override
public void onEvent(MessageEvent event) {
Log.e(TAG, "MessageEvent.Code:" + event.getCode());
}
})
输出说明
- BookListener 说明
接口回调为异步线程,如有更新UI操作,请切换至主线程。
public interface BookListener<T> {
void onSuccess(T result);//成功回调
void onImageData(byte[] image);//图文绘本识别图片,非必须
void onError(int errorCode,String errMsg);//错误回调,errorCode:错误码,errMsg错误信息
void onEvent(MessageEvent event); // 事件回调
}
- MessageEvent 说明
类具体包名:com.turing.book.eventbus.MessageEvent
- MessageEvent.CODE_START_ORC 开始识别,即检测到运动
- MessageEvent.CODE_RECOGNIZE_FINGER 识别手指
- MessageEvent.CODE_START_QUERY 开始查词查句
- MessageEvent.CODE_OCR_RESULT 识别结果(包含未识别到字符、识别到字符事件)
- MessageEvent.CODE_TIPS 提示信息
- MessageEvent.CAMERA_STATES_OPENING 时机:调用了开启相机方法
- MessageEvent.CAMERA_STATES_OPENED 时机:CameraDevice.StateCallback#onOpened
- MessageEvent.CAMERA_STATES_CLOSEING 时机:调用了关闭相机方法
- MessageEvent.CAMERA_STATES_DISCONNECTED 时机:CameraDevice.StateCallback#onDisconnected
- MessageEvent.CAMERA_STATES_CLOSED 时机:CameraDevice.StateCallback#onClosed
- MessageEvent.CAMERA_STATES_ERROR 时机:CameraDevice.StateCallback#onError
- MessageEvent.CODE_CV_MODEL 算法模型状态的回调事件
code = MessageEvent.CODE_CV_MODEL 详解:
event.arg1:表示模型状态(-1: 未初始化 1: 开始初始化 2: 初始化成功 3: 初始化失败 4: 开始释放 5: 释放成功 6: 释放失败)。
event.arg2:表示模型初始化失败(arg1=3)、释放失败(arg1=6)的具体原因。
intent 字段
- intent-operateState 字段
注:1. 文本\音频输入使用通用方案输入即可(需要robotSkill中useQa设置为true);
- 文本\音频输入关闭后,继续使用文本\音频输入,接口将返回operateState=1008;
- 文本\音频输入关闭后,继续使用文本\音频输入,接口将返回operateState=1008;
- intent-code 字段
TextBookParameters 字段
| 参数 | 类型 | 说明 |
|---|---|---|
| intentCode | int | 绘本状态 |
| msg | String | 返回信息(英文) |
| commandUrl | String | 提示语音 |
| bookSign | String | 绘本标识 |
| titleData | TitleData | 封面识别返回信息 |
| titleExt | TitleExtBean | 封面附加信息 |
| innerData | InnerData | 内页识别返回信息 |
| cardData | CardData | 卡片信息 |
| debugData | DebugData | 调试信息 |
| funcData | FuncData | 功能参数,支持OCR和指读结果 |
| hotZone | HotZone | 点读热区信息 |
| hotZoneExt | HotZoneExtBean | 指读信息附加输出信息 |
| pageExt | PageExtBean | 内页附加输出信息 |
| similarBooks | List | 多版本相似信息(biz平台需要开通权限) |
| sleepSec | int | 休眠状态,距离下次可请求绘本识别时间 |
| ext | map | 附加输出信息 |
| answerTimeoutSec | int | 问答状态,上传已读题目状态或回答题目时返回问题剩余可回答时间 |
| questionTimeoutSec | int | 问答状态,等待用户确认题目播放状态时间,有效期内图片问题不能作答,文本与音频类型可以回答 |
| backEvent | boolean | 问答状态事件回溯:如果上下文中的题目因为未读受保护而导致最近一次识别事件没有请求新题,记录该次事件的时间。规定时间内用于用户上传状态readQuestion=FALSE/CANCEL则事件回溯。 |
| success | boolean | 问答状态,用户回答是否正确 |
| qParam | QParamBean | 问答状态,题目问题其他参数 |
| aParam | map | 问答状态,题目答案其他参数 |
TitleData
封面信息
| 参数 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| name | String | Y | 绘本名称 |
| nameUrl | String | Y | 绘本名称的url |
| zipUrl | String | Y | 绘本压缩包的url |
| bookVersion | Integer | Y | 绘本版本,音频版本,判断是否需要更新 |
| cover | String | N | 封面图片的url(版本2.0.0新增字段) |
| bookName | String | Y | 绘本模型标识 |
| author | String | N | 绘本作者名称(版本2.0.0新增字段) |
| publisher | String | N | 出版社名称(版本2.0.0新增字段) |
| finger | int | N | 0无指读 1有指读 |
| bookId | Long | N | 绘本Id |
| isbn | String | N | 绘本的isbn |
| bookSort | int | 绘本类型 1=中文绘本 2=英文绘本 3=语文教材 4=英语教材 5=数学教材 6=卡片 | |
| zhEnData | List | N | 中英文数据 |
ZhEnDataBean
| 参数 | 类型 | 说明 |
|---|---|---|
| bookId | long | 绘本id |
| bookSign | String | 绘本标识 |
| name | String | 绘本名称 |
| nameUrl | String | 绘本名称音频 |
| author | String | 绘本作者名称 |
| cover | String | 封面图片的url |
| publisher | String | 出版社名称 |
| language | int | 1所属中文,2 所属英文 |
| modified | long | 更新时间 |
TitleExtData
封面附加信息
| 参数 | 类型 | 说明 |
|---|---|---|
| bookEvalFlag | boolean | true:书本包含口语评测 false:书本不包含口语评测 |
| bookSupportQa | List | 封面识别返回 书本支持的多元互动类型 TEXT=问答;AUDIO=口语评测;IMAGE=图片(如:指答) |
| customData | Map |
自定义数据 |
InnerData
内页信息
| 参数 | 类型 | 说明 |
|---|---|---|
| bookId | Long | 绘本Id |
| dbKey | String | 绘本所属key |
| pageNum | Integer | 绘本页数 |
| pageUrl | String | 绘本内页音频 |
| physicsPageNum | int | 绘本物理页,可为空(非绘本页数) |
PageExt
内页附加信息
| 参数 | 类型 | 说明 |
|---|---|---|
| multiAudios | Map | 自定义热区多音频内容,其中map的key=textKey,map中的value其他值意义不变 |
multiAudios 参数
"multiAudios": {
"0": {
"audioUrl": "http://universe-file-limit.turingapi.com/202303231421/a54417e4e1df34df5b70b17894/hint/error-1.mp3",
"audioText": "让我们拼读,听和唱。读,听,打勾(√)。猫蛋糕爸爸约会帽子讨厌听,圈和写。a, e, a, e, a, e, a, e, a, e, cap我们来谈谈让我们打扫教室"
},
"1": {
"audioUrl": "http://universe-audio.turingapi.com/202303231420/robot_story/9641a1ae4026cc2d5464982.mp3",
"audioText": "Let's spell Read,listen and chant. cake face name make Read,listen and tick (√). cat cake dad date hat hate Listen,circle and write. a a-e a a-e a a-e a a-e cap Let's talk Let's clean the class"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| text | String | 热区文本 |
| url | String | 热区音频文件URL或音频ID: URL有效时间为10分钟(自己上传的URL除外) |
| textKey | String | 音频名称 textKey=0:中文 textKey=1:英文 textKey=2:粤语 textKey=3:讲解 textKey=4:视频 |
HotZone
点读热区信息
| 参数 | 类型 | 介绍 |
|---|---|---|
| pieceIndex | int | 热区索引 |
| pieceUrl | String | 热区在线的音频链接 |
| pieceContent | String | 热区文本 |
| transContent | String | 热区文本对应的中文文本 |
HotZoneExt
热区附加信息
| 参数 | 类型 | 说明 |
|---|---|---|
| evalFlag | int | 1进入口语评测;0或者没有则不需要 |
| multiAudios | Map | 自定义热区多音频内容,其中map的key=textKey,map中的value其他值意义不变 |
| languageType | int | 书本语言版本,0,中文;1英文 |
| charDetail | Array | 自定义热区中文汉字详情 |
| transContent | String | 热区文本对应的中文文本(热区资源,有则输出) |
- evalFlag:指读热区识别成功之后,evalFlag为1标识改热区文字支持口语评测,为0表示不支持口语评测。
multiAudios 参数
"multiAudios": {
"0": {
"text": "请打开门。",
"url": "http://universe-file-limit.turingapi.com/202303211836/192092962f5b676f4b25199b60d83a5d/book_audio/70104/70104-21-647.mp3"
},
"1": {
"text": "Open the door,please.",
"url": "http://universe-file-limit.turingapi.com/202303211836/c627c4a829017dcd00a76794ab10c561/robot_story/70104/70104-21-647.mp3"
}
}
| 参数 | 类型 | 说明 |
|---|---|---|
| text | String | 热区文本 |
| url | String | 热区音频文件URL或音频ID: URL有效时间为10分钟(自己上传的URL除外) |
| textKey | String | 音频名称 textKey=0:中文 textKey=1:英文 textKey=2:粤语 textKey=3:讲解 textKey=4:视频 |
FuncData
功能参数信息
| 参数 | 类型 | 说明 |
|---|---|---|
| ocr | int | 0:普通;1:ocr 0是普通绘本,英语,数学教材,不需要更改分辨率。 1是文本类型的绘本,语文教材,需要传入大分辨率的图片,比如正常320分辨率的图片。 如果ocr为1就要传入640的图片 |
| finger | int | 0:无指读;1:可支持指读 |
SimilarBookBean
多版本相似信息
| 参数 | 类型 | 介绍 |
|---|---|---|
| cover | String | 封面url |
| author | String | 绘本作者名称 |
| name | String | 绘本名称 |
| nameUrl | String | 绘本名称的url |
| publisher | String | 出版社名称 |
| bookId | long | 绘本id |
| bookSign | String | 绘本标识 |
| online | boolean | |
| updateTimeMills | long | 更新时间 值不为0,表示当前信息为默认绘本 |
DebugData
| 参数 | 类型 | 说明 |
|---|---|---|
| imgOriginalUrl | String | 原图片链接 |
| imgProcessedUrl | String | 算法处理后的图片链接 |
2. 传输图片开启绘本识别
适用于客户端自定义相机开发,传输图片给SDK,开启绘本识别功能。
流程图
start=>start: 开始
init=>operation: 设置默认参数turing_config.json
setListener=>operation: 设置回调setBookOcrListener
postParam=>operation: 动态设置参数postBookParam
camera=>operation: 自行实现Camera
putImage=>operation: 传入图片startBookDetect
deal=>operation: 处理回调onSuccecc
release=>end: 释放资源release
start->init->setListener->postParam->camera->putImage->deal->release
方法
/**
* 设置绘本识别回调,与startBookDetect配套使用
*
* @param listener
*/
void setBookOcrListener(BookListener<BaseResponse<TextBookParameters>> listener);
/**
* 开始图文检测识别
*
* @param imageData 相机预览返回的原始。
* 图片分辨率:如果使用云端参数,请与云端配置保持一致;如果使用本地参数,请与turing_config.json 中 bookCamera#previewWidth、previewHeight值保持一致。
* 图片角度、镜像:如果使用云端参数,请与云端配置保持一致;如果使用本地参数,请在turing_config.json 中填写 globalConfig#camera#rotation、mirror 值。
* 图片+角度+镜像,最终得到 倒向无镜像 图片。
*
* @param format 仅支持android.graphics.ImageFormat.NV21、 android.graphics.ImageFormat.YUV_420_888
*/
void startBookDetect(byte[] imageData, int format);
请求示例
-
先初始化回调监听
java // textBookListener回调同【1. 开启绘本识别】 turingTextBook.setBookOcrListener(textBookListener); -
客户端开启相机,传输图片进行识别
```java // SDK不包含CameraView,下面给出客户端自定义相机开发调用方法示例 int width = mainView.getWidth(); int height = mainView.getHeight(); cameraView = new CameraView(TextBookActivity.this, width, height, mainView, 0, "", 640, 480, 640, 480, 0, true, 0, false); cameraView.setOnFrameListener(new OnFrameListener() {
@Override public void onError(int code, String error) {
}
@Override public void onFrameData(byte[] videodata, int length) { if (videodata != null && videodata.length != 0) { // 传输图,进行识别 turingTextBookPro.startBookDetect(videodata); } }
@Override public void onCameraEvent(int event) {
}
@Override public void onPicture(byte[] data, int length) {
} }); ```
输入说明
| 参数名称 | 类型 | 是否必须 | 描述 |
|---|---|---|---|
| imageData | byte[] | Y | 相机预览返回的原始数据 |
| format | int | Y | 图片格式 仅支持android.graphics.ImageFormat.NV21、 android.graphics.ImageFormat.YUV_420_888 |
客户端开发相机,图片要求如下;SDK处理图片(图片+角度+镜像)得到 倒向无镜像 图片。
图片分辨率:如果使用云端参数,请与云端配置保持一致;如果使用本地参数,请与turing_config.json 中 bookCamera#previewWidth、previewHeight值保持一致。
图片角度、镜像:如果使用云端参数,请与云端配置保持一致;如果使用本地参数,请在turing_config.json 中填写 globalConfig#camera#rotation、mirror 值。
输出说明
3. 更新绘本识别优先级
仅用于相似绘本功能。先通过startTextBookOcr()识别封面,得到相似书籍(中英文或多版本)的列表,再更新识别书的优先级,如果相似书籍返回的时多版本列表则type=1,返回中英文列表则type=2。
注:切换中英文绘本时,turing_config.json中textBook可以不指定languageOrder,否则默认的数据优先输出languageOrder的绘本。
方法
void updatePriorityRecognition(int type, String bookSign, boolean languageZn, TuringListener<Boolean> listener);
输入说明
| 参数 | 类型 | 说明 |
|---|---|---|
| type | int | 1-设置多版本优先级 2-设置中英文优先级 |
| bookSign | String | 指定切换到目标绘本的booksign |
| languageZn | boolean | true-中文 false-英文 (type=2时才有效) |
| listener | TuringListener |
回调接口 |
输出说明
listener 中 result值说明:true-更新成功,false- 更新失败。
4. 初始化绘本状态
绘本初始化接口,清除云端状态。
避免在上次封面识别成功的情况下,第二次进入绘本页直接拿内页识别,能识别成功 或 提示内页识别失败。
方法
void resetBookState(TuringListener<String> listener);
输出说明
listener 中 result值说明:"状态重置成功"-成功。
5. 动态设置参数
动态设置绘本参数,需在startBookOcr之后调用。
方法
void postBookParam(TextBookParamListener listener);
输入说明
| 参数 | 类型 | 说明 |
|---|---|---|
| listener | TextBookParamListener | 实现该接口,修改onBookParam方法中返回的配置参数。 |
请求示例
turingTextBook.postBookParam(new TextBookParamListener() {
@Override
public TextBookRequestConfig onBookParam(TextBookRequestConfig.Builder builder) {
builder.textFlag(3); // 只返回整读信息
return builder.build();
}
});
6. 指定书籍
可固定识别某一本书籍。
方法
boolean setBookSign(String bookSign);
输入
| 参数 | 类型 | 说明 |
|---|---|---|
| bookSign | String | 书籍的bookSign |
输出
| 参数 | 类型 | 说明 |
|---|---|---|
| result | boolean | 是否设置成功 |
7. 停止/启动识别
调用 pause() 只会停止识别,预览画面会实时显示。 调用resume() 恢复识别。
方法
/**
* 暂停识别
*/
void pause();
/**
* 重新开始识别
*/
void resume();
8. 停止预览识别/ 重新开始预览识别
此方法影响预览画面,调用了stopPreView() 后画面不会实时刷新。若想恢复请调用 resumePreview()。
方法
/**
* 暂停预览
*/
void stopPreview();
/**
* 重新开始预览
*/
void resumePreview();
9. 资源释放
方法
void release();
其他
intent-code 说明
下面列出绘本识别时intent code字段值说明
| intent code | 说明 |
|---|---|
| 200 | 识别绘本封面成功 |
| 201 | 识别绘本内页成功 |
| 202 | 绘本扉页识别成功 |
| 203 | 绘本无文本内页识别成功 |
| 204 | 绘本无意义内页识别成功 |
| 205 | 封面识别成功,热区识别成功 |
| 206 | 封面识别成功,热区识别失败 |
| 207 | 内页识别成功,热区识别成功 |
| 208 | 内页识别成功,热区识别失败 |
| 209 | 卡片识别成功,无指读判断 |
| 210 | 卡片识别成功,指读识别成功 |
| 211 | 卡片识别成功,指读识别失败 |
| 212 | 小卡片识别成功 |
| 300 | 绘本封面识别失败 |
| 301 | 绘本内页识别失败 |
| 302 | 非缺省参数未找到 |
| 303 | 摄像头ID信息未找到 |
| 304 | 图片无法打开 |
| 305 | 图片尺寸异常 |
| 306 | 绘本内容未录入 |
| 307 | 当前绘本页音频缺失 |
| 308 | 未开通OCR功能 |
| 309 | 未开通指读功能 |
| 310 | 暂不支持该功能 |
| 311 | 此绘本为私有绘本 |
| 312 | 非法bookId |
| 313 | 此书不支持指读 |
| 314 | 不支持此资源类型 |
| 315 | 卡片识别失败(预留) |
| 350 | 小卡模式识别失败 |
| 400 | 封面算法识别超时 |
| 401 | 内页算法识别超时 |
| 402 | 绘本算法未知异常 |
intent-operateState 说明
下面列出绘本识别时intent operateState字段值说明
| operateState | 说明 |
|---|---|
| 1010 | 上传状态错误 |
| 1110 | 上传状态正确 |
| 1120 | 上传状态重复 |
| 1200 | 休眠状态 |
| 2000 | 绘本识别正常 |
| 3000 | 文本类问题数据输出,开启文本输入 |
| 3100 | 回答问题结束状态, 不再处理非图片类型请求 |
| 3200 | 回答问题状态(所有类型)-继续回答问题 |
| 3240 | 图片类问题-回答问题时被判断为无效的输入(不参与答题,前端可忽略该输出) |
| 3300 | 音频类问题数据输出,开启音频输入(注意音频类型!) |
| 3400 | 图片类问题数据输出。 |
| 1001 | 绘本图片识别异常,有intentCode |
| 1005 | 图片内容大小非法(取值范围:1,200kb) |
| 1006 | 图片内容处理异常 |
| 1007 | 请求Type非法 |
| 1008 | 请求中无图片信息 |
| 1009 | 错误输入(非法使用唤醒功能) |
云端限流
由于设备在绘本模式使用过程中,设备受到翻页检测触发会不断的进行请求,云端已经对绘本请求做了限流。具体表现为下面输出参数intentCode=1200,即触发了云端限流。
具体返回示例如下:
{
"code":200,
"globalId":"116456280610447001",
"message":"success",
"nlpResponse":{
"intent":{
"code":1000056,
"operateState":1200
},
"results":[
{
"groupType":0,
"resultType":"text",
"values":{
"text":"休眠中,请3秒后再试试吧。"
}
}
]
}
}
-
当接收到请求识别返回的intentCode=1200时,说明触发了云端的限流开关。
-
此时图灵云端返回信息中会告知休眠状态和提醒距离下次自动唤醒的时间,该时间会随着无效请求进入休眠次数不断叠加。
-
云端唤醒:增加传参osState=clean可以唤醒休眠状态,或者等待提示的时间之后将会重新获得识别机会