跳转至

Android SDK接入指南说明文档

文档修订记录

文档版本号 修订日期 修订原因 备注
V1.0.0 2022.7.20 创建文档
V1.0.1 2022.8.3 更新混淆规则
v1.0.2 2022.8.18 新增vad参数 vadThreshold,模型判定门限
V1.0.3 2023年3月23日 更新鉴权接口,更新code释义,更新参数说明
V1.0.4 2023年4月10日 更新第三方依赖库说明
V1.0.5 2023年6月20日 turing_config.json新增brandModel,获取免标定云端配置参数,详情见5.2 globalConfig 使用免标定指尖:填写brandModel则使用云端配置参数,不填写brandModel则使用本地配置参数。

turingCameraId 如何填写:
· 只使用标定版指尖&绘本,填写标定的摄像头id;
· 只使用免标定版指尖&绘本,填写0;
· 标定与免标定版混合使用,填写标定的摄像头id;
V1.0.6 2023年7月6日 新增接口:getLicenseToken(String SN, TuringInitListener listener)
V1.0.7 2024年4月30日 新增Demo下载地址

一、简介及运行环境

1.1 概述

此文档包括图灵SDK接入指南,以及图灵鉴权接入说明,在接入图灵任何能力前,都需要鉴权成功后才能使用。

1.2 能力硬件要求

基于对摄像头拍摄清晰程度的要求,分类如下: 高端要求:查拼音、查句子、查段落:属于高端OCR 能力,一般需要客户产品的前摄像头具备800W及以上像素 中端要求:查词,一般需要客户产品的前摄像头具备500W及以上像素 低端要求:翻读、指读对客户产品的前摄要求较低。

能力名称 可支持摄像头 内存 CPU 分类
标定版绘本翻指读 30W 2GB -- 标定版
标定版指尖查词 500W 2GB -- 标定版
标定版指尖查句 800W 4GB -- 标定版
免标定绘本翻指读 500W 4GB -- 免标定
免标定指尖查词 800W 4GB -- 免标定
免标定指尖查句 800W 4GB -- 免标定
免标定指尖查拼音 800W 4GB -- 免标定
免标定指尖查段 800W 4GB -- 免标定

目前图灵针对翻读,指读,查词,查句,查拼音,查段等AI能力具有两套解决方案,分别是标定和免标定,图灵售前同事会根据您的具体产品,推荐您选择合适的方案。 核心的参考指标有两个:图像的清晰度设备性能 图像清晰度: 指设备采集图片的清晰程度,影响因素有很多,例如:多少万像素,是否针对摄像头进行过调优等 图灵针对客户的图灵质量建立了标准并具体相应的工具,可以方便评估客户的设备是否支持查词,查句等。 设备性能: 设备性能主要用于评估设备是否满足免标定方案,相对于标定方案,免标定方案需要前端具体一定的算力来满足算法要求,目前根据手头设备的具体情况,也建立了基本的标准,但这一指标仅具有参考意义,因为最终的响应时间,还和客户采用的分辨率,系统的内存管理,图片渲染等多因素影响,但低于图灵标准,则不建议用免标定方案

1.3 创建机器人

使用前,请在平台地址图灵官网注册登录。在机器人管理界面中创建机器人,并在机器人信息界面获取APIKey与Secret。

开发集成儿童版SDK前需要申请APIKey与Secret,请在平台地址 图灵官网 注册登录。在机器人管理界面中创建机器人,并在机器人信息界面获取APIKey与Secret

标定版绘本识别和指尖查词需要提前给设备标定摄像头,具体参考摄像头标定流程

1.4 兼容性

类别     兼容范围                                                   
系统 支持Android 5.0 以上版本 API LEVEL 21         
硬件要求 要求设备上有麦克风、摄像头                                       
网络     支持移动网络、WIFI等网络环境                      
开发环境 建议使用最新版本Android Studio 进行开发

1.5 SDK库文件

资源名称             资源描述
turingsdk-release.aar aar 库 

二、集成指南

2.1 添加依赖库

将turingsdk-release.aar复制到您的项目的app/libs/目录下,修改您的项目的app/build.gradle文件,将下面依赖库添加到您的依赖目录中。

// 下面列出的依赖如果有重复,只保留一个

implementation(name: 'turingsdk-release', ext: 'aar')
//motiondetect-release是绘本和指尖查词模块需要的,其他模块不需要
implementation(name: 'motiondetect-releaseV1.0.7', ext: 'aar')

//必须依赖库
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 'com.squareup.moshi:moshi:1.9.3'
implementation "androidx.security:security-crypto:1.1.0-alpha03"

// 指尖&绘本(标定、免标定)
implementation 'net.sourceforge.jexcelapi:jxl:2.6.12'

// 免标定指尖绘本
def room_version = "2.4.2"
def corotine_version ="1.3.9"
api "androidx.room:room-runtime:${version["room_version"]}"
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:${version["corotine_version"]}"
api "org.jetbrains.kotlinx:kotlinx-coroutines-android:${version["corotine_version"]}"
kapt "androidx.room:room-compiler:${rootProject.ext.version["room_version"]}"

// 指尖&词典
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'

// 口算批改
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
implementation "com.squareup.retrofit2:converter-moshi:2.6.0"
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'
implementation "com.squareup.moshi:moshi-kotlin:1.13.0"
kapt "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"
implementation "androidx.work:work-runtime-ktx:2.7.1"

2.2 AndroidManifest.xml 权限

    <!--网络-->
    <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" />    
    <!--录音 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />    
    <!--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"

备注:android 6.0 以上版本权限需动态申请。

2.3 build.gradle配置

android{
    defaultConfig {
        ndk {
            abiFilters "armeabi-v7a","arm64-v8a"
        }
    }
    sourceSets {
        main {
            jniLibs.srcDirs = ['src/main/jniLibs']
        }
    }
}

2.4 添加配置文件

将turing_config.json配置文件放在main/assets文件夹下,手动修改参数值,详细配置如下,字段说明见“配置文件参数说明”。

{
  "authorization": {
    "apikey": "您的apikey",
    "secret": "您的secret"
  },
  "globalConfig": {
    "brandModel":"您的品牌型号",
    "camera": {
      "cameraId": 1,
      "cameraApi": 3,
      "turingCameraId": 118,
      "preMirror": false,
      "mirror": true,
      "zoom": 0,
      "preRotation": -1,
      "rotation": 180
    }
  },
  "ability": {
    "bookCamera": {
      "previewWidth": 640,
      "previewHeight": 480,
      "imgQuality": 90,
      "smallImgQuality": 100
    },
    "book": {
      "useQa": false,
      "deviceType": 5,
      "innerUrlFlag":true,
      "cameraHeight":-1.0,
      "languageOrder": 1,
      "textFlag": 1,
      "accessModel": 1,
      "modelOrder": 1,
      "imageType": "jpg",
      "osState": "",
      "readQuestion": false
    },
    "textBook":{
      "sceneMode":0,
      "zipUrlFlag": 0,
      "categories": [
        1,2,3,4,5
      ],
      "regMode": 2,
      "innerAudio": 0,
      "languageOrder":1,
      "accessMode": 1,
      "textFlag": 3,
      "audioType": 1,
      "osState": ""
    },
    "finger": {
      "imgQuality": 100,
      "showPoint": true,
      "horMirror": false,
      "verMirror": false,
      "pointColor": "#FC0202",
      "pointWidth": 10,
      "appMode": 0,
      "maxLen": 4,
      "selectType": "wordV",
      "dictType": "tuling",
      "ocrMode": 0,
      "optMode": 1,
      "openTts": true,
      "motionSensitivity": 64.0,
      "previewWidth": 640,
      "previewHeight": 480,
      "pictureWidth": 2560,
      "pictureHeight": 1920,
      "cropRatio": [0.0,1,0.0,1]
    },
    "nlp": {
      "codes": [],
      "robotSkills": {
      }
    },
    "tts": {
      "tone": "huiting",
      "format": "MP3_16_16",
      "speed": 5,
      "volume": 5,
      "pitch": 5,
      "arousal": 6
    },
    "asr": {
      "asrSrcFormatEnum": -1,
      "asrFormatEnum": 0,
      "asrLanguageEnum": 0,
      "asrRateEnum": 16000,
      "channel": 1,
      "enableITN": true,
      "enablePunctuation": false,
      "enableVoiceDetection": true,
      "intermediateResult": true,
      "maxEndSilence": 1000,
      "maxStartSilence": 5000,
      "vadThreshold": 0.1,
      "vadReviseTime": 1200,
      "interactionTime": 20,
      "enableCloudVad": false,
      "enableVolume": false,
      "audioSource": 1
    }
  }
}

2.5 动态配置参数

方法一:(推荐)

val configData: ConfigData = TuringConfig.getInstance(this).configData
configData.authorization.apikey ="*******"
configData.authorization.secret ="*******"
configData.globalConfig.camera.turingCameraId ="118"
TuringInitializer.getInstance(this).setGlobalConfig(configData)

方法二:

TuringConfig.getInstance(this).configData.authorization.apikey = "*******"
TuringConfig.getInstance(this).configData.authorization.secret = "*******"
TuringConfig.getInstance(this).configData.globalConfig.camera.turingCameraId = 118

注意:

如果是动态修改TuringCameraId,则需要在鉴权前设置。

2.6 其他配置

Android 10以上(包括10),需在清单文件中,application标签下,加入如下配置

android:usesCleartextTraffic="true"

如果需要保存文件到sdcard中,则需要加入权限及配置

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<application
android:requestLegacyExternalStorage="true">

2.7 混淆

-keep class com.iflytek.**{ *;}
-dontwarn com.iflytek.**

-keep class com.turing.**{ *;}
-dontwarn com.turing.**

-keep class com.sdk.finger.**{ *;}
-dontwarn com.sdk.finger.**  

-keep class org.java_websocket.**{*;}
-dontwarn org.java_websocket.**
-keep class org.slf4j.**{*;}
-dontwarn org.slf4j.**

-keep class org.eclipse.** { *; }
-dontwarn org.eclipse.**

-keep class net.idik.lib.cipher.so.encrypt.**{
    *;
}
-keep class com.Posture.detection**{
    *;
}
-keep class com.tcl.detection.**{
    *;
}
-keep class com.aiworks.**{
    *;
}
-keep class com.youdao.sdk.** { *;}
-keep class com.youdao.zhiyun.sdk.** { *;}
-keep class com.youdao.compositioncorrection.**{*;}

三、鉴权初始化

随着Android版本的更新,设备唯一标识无法保证都能获取到。图灵的鉴权方法有多个可供使用,每个鉴权方法读取或使用的deviceID方式不一样,客户需要根据自己的实际情况选择不同的鉴权方法。

注意:使用图灵SDK的任何模块功能时,都需要调用鉴权接口。请在鉴权成功之后,再使用其他能力。

3.1 实例化

com.turing.license.api.TuringInitializer

TuringInitializer turingInitializer = TuringInitializer.getInstance(this)

3.2 接口说明

public interface InitializeInterface {

    /**
     * 初始化,设备唯一标识根据不同系统版本有不同的值
     *
     * @param initListener 回调接口
     */
    void init(TuringInitListener initListener);

    /**
     * 初始化
     *
     * @param deviceID     设置唯一标识
     * @param initListener 回调接口
     */
    void init(String deviceID, TuringInitListener initListener);

    /**
     * V3鉴权,使用离线功能,需使用V3鉴权,不传SN,用于普通SDK接入
     *
     * @param initListener
     */
    void initV3(TuringInitListener initListener);

    /**
     * V3鉴权,使用离线功能,需使用V3鉴权,用于普通SDK接入,推荐使用此方法
     *
     * @param initListener
     * @param customId     唯一标识,用于对比鉴权数量。
     */
    void initV3(TuringInitListener initListener, String customId);

    /**
     * V3鉴权,使用离线功能,需使用V3鉴权,传SN,用于混合SDk接入方式
     *
     * @param sn
     * @param initListener
     */
    void initV3(@NonNull String sn, TuringInitListener initListener);


    /**
     * V3鉴权,使用离线功能
     * @param deviceType 用于鉴权的唯一标识,可选择:SN,MAC,IMEI
     * @param listener
     */
    void initV3(@DeviceIdType.DeviceType int deviceType, TuringInitListener listener);

    /**
     * V3鉴权,使用离线功能,需使用V3鉴权
     *
     * @param deviceId     鉴权使用的唯一标识
     * @param initListener
     */
    void initV3Uid(@NonNull String deviceId, TuringInitListener initListener);

    /**
     * 纯离线能力的V3鉴权,不传SN,用于普通SDK接入
     *
     * @param initListener
     */
    void initOfflineV3(TuringInitListener initListener,InitParams initParams);

    /**
     * 纯离线能力的V3鉴权,传SN,用于混合SDk接入方式
     *
     * @param initListener
     */
    void initOfflineV3(String SN, TuringInitListener initListener, InitParams initParams);

    /**
     * V4鉴权,工厂鉴权方式,需提前使用云端鉴权接口鉴权,获取到authInfo写入设备,调用该接口时,从设备读取并传入。
     *
     * @param deviceId  鉴权使用的唯一标识,必须与调用云端API接口传入的Id一致
     * @param authInfo  鉴权信息
     * @param initListener 回调接口
     */
    void initV4Uid(@NonNull String deviceId, String authInfo,TuringInitListener initListener);

    /**
     * 设置服务器环境,内部测试接口,开发者不需要设置,默认正式环境
     * 已弃用,如要设置服务器环境,请使用 setDebugParams(com.turing.common.params.GlobalParams)
     * @param type
     */
    @Deprecated
    void setRequestPath(@UserData.ServerChannel int type);

    /**
     * 设置写入log文件接口
     * 已弃用,如要设置服务器环境,请使用 setDebugParams(com.turing.common.params.GlobalParams)
     * @param debugPath 日志路径
     * @param isWrite 是否写入
     */
    @Deprecated
    void setWriteLog(String debugPath, boolean isWrite);

    /**
     * 设置全局调试参数,可用于设置debug日志输出,文件保存,音频文件,图片保存等参数
     * @param globalParams 全局调试参数
     */
    void setDebugParams(GlobalParams globalParams);

    GlobalParams getDebugParams();


    /**
     * 获取鉴权信息
     * @return 鉴权信息
     */
    AuthUserInfo getLicenseInfo();

    /**
     * 获取token,仅支持提前上传设备号的apikey
     * @param SN 提前上传的设备唯一Id
     * @param listener 回调接口,成功回调返回token值
     */
    void getLicenseToken(String SN, TuringInitListener listener);
    /**
     * 动态设置配置参数
     *
     * @param configData 参数配置类
     */
    void setGlobalConfig(ConfigData configData);
    /**
     * 获取SDK版本
     *
     * @return
     */
    String getSDKVersion();

    interface TuringInitListener {
        /**
         * 初始化成功回调
         *
         * @param deviceID 设备唯一标识
         */
        void onSuccess(String deviceID);

        /**
         * 初始化失败回调
         *
         * @param errorCode 错误码,错误码见{ TuringCode}
         * @param errorMsg  鉴权失败信息
         */
        void onError(int errorCode, String errorMsg);
    }

}

3.2.1 TuringInitListene接口说明

interface TuringInitListener {
    /**
     * 初始化成功回调
     *
     * @param deviceID 设备唯一标识
     */
    void onSuccess(String deviceID);
    /**
     * 初始化失败回调
     *
     * @param errorCode 错误码,错误码见{ TuringCode}
     * @param errorMsg  鉴权失败信息
     */
    void onError(int errorCode, String errorMsg);
}

3.2.2 InitParams

参数 类型 说明
tryTime int 重试请求次数
licensePath String 图灵鉴权文件路径

3.2.3 GlobalParams

参数 类型 说明
serverType int 设置运行环境,ALPHA:1,BETA:2,PRODUCT:3,默认使用PRODUCT正式环境
openLog boolean 是否开启日志打印,默认true
logLevel int 日志级别;1:重要日志,INFO及以上,2:DEBUG日志,DEBUG及以上(默认),3:所有日志
debugPath String 文件保存路径,图片、日志文件、音频等
isWriteImg boolean 是否写入debug图片,绘本、指尖查词等,默认false
isWriteFingerTip boolean 是否写入指尖识别图片,默认false
isSaveRecord boolean 是否保存音频文件,默认false
isWriteLog boolean 是否写入日志文件,默认false
isRemoteDebug boolean 是否打开绘本云端debug,默认false

3.2.4 AuthUserInfo

参数 类型 说明
code int 0:正常,40005:无授权信息,但设备已激活 ,40008:请求异常,见message
apiKey String 您的apikey,开放平台申请
secret String 您的secret,开放平台申请
productSN String 设备SN号
deviceId String 设备鉴权的唯一标识
userId String sdkV3 合法设备调用时返回云端系统分配id
activateStatus String sdkV3 合法设备调用时返回激活状态; 0:正常激活,1:已激活设备
activateTime String sdkV3 合法设备调用时返回设备激活时间戳(毫秒)

四、能力接入

接入详情见各个能力的接入说明文档。

五、配置文件参数说明

5.1 authorization(授权参数)

参数 类型 是否必须 取值范围 说明
apikey String Y - 您的apikey
secret String Y - 您的secret

5.2 globalConfig(全局参数)

    "globalConfig": {
        "brandModel":"您的品牌型号",
        "camera": {
          "cameraId": 1,
          "cameraApi": 3,
          "turingCameraId": 118,
          "preMirror": false,
          "mirror": true,
          "zoom": 0,
          "preRotation": -1,
          "rotation": 180
        }
      }

全局调试参数,已弃用配置文件中的参数,使用InitializeInterface#setDebugParams(GlobalParams globalParams)替代

5.2.1 GlobalConfig.camera(全局camera参数)

参数 类型 是否必须 取值范围 说明
cameraId int N 0,1 摄像头ID,1-前置,0-后置
cameraApi int Y 1,2,3,4 CAMERA_1 = 1; CAMERA_2 = 2; CAMERA_USB = 3;
//USB摄像头
turingCameraId int N - 只使用标定版指尖&绘本,填写标定的摄像头id;
只使用免标定版指尖&绘本,填写0;
标定与免标定版混合使用,填写标定的摄像头id;
preMirror booleab N - 预览视图是否镜像
mirror boolean N - 是否开启镜像,标定后优先使用云端配置
preRotation int N 90、180、270、360 预览旋转角度,-1表示不设置
rotation int N 90、180、270、360 图片旋转角度,标定后优先使用云端配置
zoom int N Camera1:0~Camera1支持的最大变焦值;
Camera2:0~Camera2支持的最大变焦值*10
变焦镜头
gestureZoom boolean N - 是否开启手势触摸变焦

a. 目前全局 cameraId 作用于绘本和指尖查词能力。

b. Camera支持的最大变焦值,可调用SDK提供方法获取:com.turing.common.util.CameraDeviceUtil#getCamera1SupportMaxZoom()|getCamera2SupportMaxZoom()。

5.2.2 GlobalConfig.brandModel

参数 类型 是否必须 取值范围 说明
brandModel String N -- 填写biz平台上创建的品牌型号。

使用免标定指尖:填写则使用云端配置参数,不填写则使用本地配置参数。

5.3 bookCamera(绘本camera参数)

    "bookCamera": {
          "previewWidth": 640,
          "previewHeight": 480,
          "imgQuality": 90,
          "smallImgQuality": 60
        }
参数 类型 是否必须 取值范围 说明
previewWidth int N - 预览图片像素宽
previewHeight int N - 预览图片像素高
imgQuality int Y 0-100 大图片质量
smallImgQuality int N 0-100 小图片质量(320*240)

5.4 book(绘本2.0请求参数)

参数 类型 是否必须 取值范围 说明
deviceType int N - 设备类型,请求类型。0-普通类型(默认),1-⼿机app。设置1时,不需要传入摄像头其他参数。固定传入cameraId=1
cameraHeight float N - 摄像头高度(支架参数,若有则覆盖默认参数)
innerUrlFlag Boolean N - 方案商是否需要每页的音频URL链接,(非必填,默认为false)
languageOrder int N - 绘本语言版本顺序(针对多语言版本绘本):languageOrder=1:中文版本绘本优先,languageOrder=2:英文版本绘本优先。
textFlag int N - 是否返回文本,0不返回,1返回热区文本 默认0
accessModel int N - 访问模型;1:公有库+私有库;2:公有库;3:私有库,默认1
modelOrder int N - 优先级顺序;1:公有库优先;2:私有库优先,默认2
useQa Boolean N - 开启QA模式:false(default),使用需要管理平台开通对应题库
imageType String N - 图片类型
readQuestion String N TRUE,FALSE,CANCEL 问答状态,客户端是否完成题目信息的输出(result-values中包含"contentType":"question"的为题目内容)。不上传状态,默认不可以回答指读类题目
osState String N clean 清除休眠状态,非休眠状态不可使用(异常1009)

5.5 textBook(绘本3.0请求参数)

详细说明见《标定绘本识别接入文档》《免标定绘本识别接入文档》

5.6 finger(指尖查词配置)

详细说明见《标定指尖识别接入文档》《免标定指尖识别接入文档》

5.7 nlp(语音对话、NLP)

详细说明见《语义理解接入文档》

5.8 tts(语音对话、TTS)

详细说明见《在线TTS接入文档》

5.9 asr(语音对话、ASR)

详细说明见《在线ASR接入文档》

六、错误码

6.1 intentCode

intentCode 说明
200 识别绘本封面成功
201 识别绘本内页成功
202 绘本扉页识别成功
203 绘本无文本内页识别成功
204 绘本无意义内页识别成功
205 封面识别成功,热区识别成功
206 封面识别成功,热区识别失败
207 内页识别成功,热区识别成功
208 内页识别成功,热区识别失败
209 卡片识别成功,输出协议与绘本封面识别成功一致

6.2 intent-operateState

operateState 说明
1010 上传状态错误
1110 上传状态正确
1120 上传状态重复
1200 休眠状态
2000 绘本识别正常
3000 文本类问题数据输出,开启文本输入
3100 回答问题结束状态, 不再处理非图片类型请求
3200 回答问题状态(所有类型)-继续回答问题
3240 图片类问题-回答问题时被判断为无效的输入(不参与答题,前端可忽略该输出)
3300 音频类问题数据输出,开启音频输入(注意音频类型!)
3400 图片类问题数据输出。
1001 绘本图片识别异常,有intentCode
1005 图片内容大小非法(取值范围:[1,200]kb)
1006 图片内容处理异常
1007 请求Type非法
1008 请求中无图片信息
1009 错误输入(非法使用唤醒功能)

6.3 云端Code

code 说明
200 正确结果返回
210 参数初始化成功
220 参数上传完成,正在请求nlp/tts
230 ASR/NLP正确处理,但tts功能处理失败(单独请求TTS功能,异常时也返回该code)
240 输入参数为空,nlp/tts不处理
250 robot TTS调用次数耗尽
260 TTS 流式处理状态
261 AIGC生成内容中间结果
262 AIGC生成内容结束
270 测评中间结果
280 测评最终结果
291 OCR文本TTS结果
292 OCR,TTS处理失败,请稍后再试。
293 OCR文本分词结果
294 OCR分词处理失败
295 OCR中间结果返回-无分词
300 无效数据:二进制参数已完成传输,不要发送该数据
4004 机器人类型非法
4005 apikey信息错误
4006 deviceId信息错误
4007 解密失败,您的加密逻辑存在异常
4008 数据内容格式错误
4009 机器人被禁用
4010 试用期已过
4011 系统不支持二进制参数
4012 今天我们已经聊了很多啦,明天再来找我聊天吧。
4013 这一小时的对话次数已经超过我的极限啦,让我休息一下,待会再聊
4014 这一分钟里我们已经聊了很多啦,休息,休息一下吧
4015 二进制参数错误,请确定binarysId是否对应
4016 单次交互时间过长,请查看文档!
4017 二进制参数错误,有重复binarysId!
4018 二进制参数输入状态异常
4019 二进制参数处理时间超时/第三方引擎参数错误
4020 ASR权限异常
4021 TTS权限异常
4022 二进制传输内容过大!
4023 单次交互同类型的二进制参数只允许输入一个
4025 上传数据失败,请稍后~
4026 nlp/tts请求内容过长
4027 请求类型不能为空
4028 丢弃任务:同一用户不允许同时处理一个以上的ASR请求
4029 robot ASR调用次数耗尽
4030 robot NLP调用次数耗尽
4031 uri不支持
4032 请求时间戳偏与服务器时间偏差太大,message为服务器时间戳
4033 OCR权限异常
4100 服务正在升级 请稍后再试
4101 请求没有正确初始化!
4102 长时间未请求业务,关闭连接
4200 robot信息异常
4201 nlp/tts处理异常
4202 tts数据为空
5001 音频信息参数错误
5002 未上传任何二进制数据
5003 ASR音频格式不支持
5004 ASR引擎链接异常
5005 ASR引擎异常超时
5006 ASR引擎异常
5007 ASR数据传输失败,没有初始化
5008 ASR二进制数据转码失败
5010 ASR不支持混合模式识别
5100 评测启动失败,请稍后再试
5101 评测状态错误,请正确上传文件
5102 评测类型非法
5103 评测内容为空
5104 userid并发请求测评功能
5105 测评失败,请查看错误信息
5200 OCR引擎链接异常
5201 OCR客户端非法并发请求
5202 OCR处理异常

6.4 TuringCode

应用端处理code时,建议使用TuringCode类的常量,不要直接使用固定值

常量名称 code 说明
NETWORK_ERROR 100001 网络未连接
DEVICEID_ERROR 100002 获取Device ID异常!
VAD_STATE_BEGIN 100100 VAD开始状态
VAD_STATE_FINISH 100101 VAD结束状态
AUTHORITY_HAS_EXPIRED 100003 Apikey过期
CLIENT_PARAM_NULL 200002 输入参数为空
CLIENT_PARAM_ERROR 200003 输入参数错误
CLIENT_REQUEST_OVER 200004 请求任务栈溢出,默认限制200个任务
CLIENT_TIMEOUT 200005 单轮请求20s限制超时
CLIENT_OVER 200006 请求动作太过频繁
CLIENT_ASR_NOINIT 200007 ASR已经结束或者通道没有初始化,请停止传入数据
CLIENT_ASR_INIT_TIMEOUT 200008 ASR初始化时网络请求超时
CLIENT_ASR_END_TIMEOUT 200009 ASR结束时网络请求超时
VAD_INITIALIZE_FAILED 200010 VAD初始化失败
VAD_READ_ONE_FRAME_FAILED 200011 VAD处理数据异常
VAD_READ_NO_DATA 200012 VAD未读取到数据
VOICE_DATA_TIMEOUT 200013 长时间未发送音频数据
VOICE_DATA_ERROR 200014 音频数据为空或者音频数据不合法,音频数据长度不能大于1280个byte,而且要求必须是
CLIENT_BOOK_OVERFLOW 200015 绘本请求频繁
CLIENT_SEND_TIMEOUT 200016 网络请求超时
CLIENT_BOOK_INIT_TIMEOUT 200017 绘本初始化时网络请求超时
CLIENT_BOOK_END_TIMEOUT 200018 绘本结束时网络请求超时
CLIENT_BOOK_NOSTATE 200019 当前不在绘本识别状态
OPUS_CODEC_INITIALIZE_FAILED 200020 opus codec initialize error !
OPUS_CODEC_PROCESS_FAILED 200021 opus codec process data error !
CLIENT_FINGER_END_TIMEOUT 200022 指尖查词时网络请求超时
PERMISSION_MANAGE_EXTERNAL_STORAGE 200023 没有MANAGE_EXTERNAL_STORAGE权限
WSS_REQUEST_FAILED 200024 webSocket 请求失败,请重试
VOICE_PROGESS_FAILED 200030 btn_to_voice initialize error !
CLIENT_RECOGNIZE_ERROR 200031 识别失败,请重试
CLIENT_CONFIG_ERROR 200032 配置文件异常
CLIENT_DPI_NOT_MATCH 200033 图片分辨率与云端配置的分辨率不匹配
BOOK_STATE_RESET_FAILED 200034 绘本状态重置失败
HTTP_REQUEST_FAILED 200035 网络请求失败
DATA_PARSER_ERROR 200036 数据解析异常
CLIENT_CAMERA_ERROR 200037 摄像头配置异常
CLIENT_CAMERA_OPEN_ERROR 200038 摄像头打开失败
CLIENT_FILE_WRITE_ERROR 200039 文件写入失败
RECORDER_READ_ONE_FRAME_FAILED 200040 recorder process data error !
RECORDER_INITIALIZE_FAILED 200041 recorder initialize error !
CLOUD_DATA_ERROR 200042 云端数据解析错误
VAD_WRITE_DATA_FAILED 200043 vad 写入数据失败
CLIENT_END_TIMEOUT 200044 结束时网络超时
OFFLINE_AUTHORITY_DATA_ERROR 200050 离线鉴权数据异常
CAMERA_INFO_DATA_ERROR 200051 CameraInfo 数据异常!
PERMISSION_NOT_ALLOW 200060 未授予应用权限
GET_DEVICE_ID_FAILED 200061 获取设备唯一标识失败
CLIENT_OTHER_ERROR 200099 其他错误
V3_INIT_ERROR 200100 V3 init error!
V3_ACCESS_USERINFO_ERROR 200101 V3 access userinfo error!
PERMISSION_NO_OFFLINE_DICT 200105 请检查是否授权离线词典能力!
PERMISSION_NO_OFFLINE_VAD 200106 请检查是否授权离线VAD能力!
PERMISSION_NO_OFFLINE_TTS_TRANS 200107 请检查是否授权离线TTS能力!
PERMISSION_NO_OFFLINE_HAND 200108 请检查是否授权离线指尖能力!
PERMISSION_NO_OFFLINE_DNTTS 200109 请检查是否授权离线DNTTS能力!
PERMISSION_NO_CAMERA 200200 未开启相机权限
CAMERA_NOT_SUPPORT_CAMERA2 200201 当前设备不支持 Camera 2.0
CAMERA_CONFIG_FAIL 200202 相机配置失败
DOC_FAIL_DOWNLOAD_AUTHFILE 200203 鉴权文件下载失败
PERMISSION_NO_OFFLINE_DOC 200204 请检查是否授权文档检测能力!
DOC_NOT_FIND 200205 未检测到文档
DOC_LACK_ANGLE 200207 检测到文档缺角
DOC_LACK_EDGE 200208 检测到文档缺边
DOC_INIT_ERROR 200210 主体检测模型初始化失败
MATH_NO_ABILITY 200300 未匹配到口算批改能力
PERMISSION_NO_OFFLINE_POSTURE 200400 请检查是否授权坐姿检测检测能力!
POSTURE_INPUT_PARAMETER_ERR 200401 输入参数错误
POSTURE_REPEATED_CALL 200402 重复调用
POSTURE_USERINFO_NOT_EXIST 200403 用户信息不存在
POSTURE_NUMBER_OF_USER_REGI_USED_UP 200404 用户注册数量已用完
POSTURE_DEVICEID_EXCEEDED_REGISTERED_USERS 200405 获取的设备信息数量远超用户注册数量
POSTURE_FAILED_TO_INSERT_OR_REGISTER 200406 新设备插入或注册失败
POSTURE_NET_SERVICE_INPUT_PARAMETER_EMPTY 200407 网络服务输入参数为空
POSTURE_SOME_INPUT_PARAMETER_NULL 200408 某些输入参数为空
POSTURE_UNKNOWN_SERVER_EXCEPTION 200409 Unknown Server Exception(异常)
POSTURE_FAILED_TO_CONNECT_SERVER 200410 接服务器失败
POSTURE_USER_DEVICEID_EXCEEDS_80BYTES 200411 用户设备唯一信息超过80字节
COMPOSITION_NOT_INIT 200500 作文批改没有初始化
COMPOSITION_NOT_OFFLINE 200501 请检查是否授权作文批改能力!
OCR_NO_PICTURE 200601 没有获取到图片
OCR_HAND_NO_INIT 200800 手写OCR没有初始化
OCR_HAND_NO_OFFLINE 200801 请检查是否授权手写OCR能力!
WEBSOCKET_200 200 websocket success
WEBSOCKET_210 210 asr init success
WEBSOCKET_220 220
WEBSOCKET_230 230 tts合成失败
WEBSOCKET_240 240 未识别到文本
WEBSOCKET_ASR_200 200 asr识别完成结果!
WEBSOCKET_ASR_201 201 asr识别中间结果返回!
WEBSOCKET_TIMEOUT 4102 长时间未请求业务,关闭连接
WEBSOCKET_SERVER_ERROR -41 websocket server error !
WEBSOCKET_NO_NET -42 websocket error cause no net !
WEBSOCKET_EXCEPTION -43 websocket error cause exception occurred !
WEBSOCKET_CONNECT_ERROR -44 webSocket 连接失败
WEBSOCKET_DISCONNECT_ERROR -45 webSocket 异常断开
IOT_INIT_ERRCODE 400001 IOT初始化错误
IOT_CONNECT_ERRCODE 400002 IOT MQTT连接错误
IOT_CONNECT_EXCEPTION 400003 IOT MQTT连接异常
IOT_SUBSCRIBE_EXCEPTION 400004 IOT MQTT订阅话题异常
BIND_CODE_NULL 400005 Bind 获取绑定码为空
IOT_CONNECTION_LOST 400006 IOT 与服务器失去连接
CHAT_NO_SPEAK 5002 未检测到声音
USER_OPERATE_VALID_ASR_PAUSE_FINGER 300000 用户操作非法, 必须在查词过程中使用
FINGER_OCR_INIT_FAIL 300001 离线手指模型未成功初始化
FINGER_STRUCT_POINT_ERROR 300002 主体坐标映射失败
FINGER_NOT_IN_STRUCT 300003 指尖不在主体内

6.5 鉴权相关code

常量名称 code 说明
AUTH_ERROR_MAC 20210001 mac 获取失败 , 必须保证唯一,如果不唯一会导致功能无法使用
AUTH_ERROR_CPUID 20210002 cpu id 获取失败 ,必须保证唯一,如果不唯一会导致功能无法使用
AUTH_ERROR_FLASHID 20210003 flash id 获取失败,必须保证唯一,如果不唯一会导致功能无法使用
AUTH_ERROR_SN 20210004 SN 获取失败 , 必须保证唯一,如果不唯一会导致功能无法使用
AUTH_ERROR_NO_INFO 40005 云端鉴权失败,apikey无授权信息
AUTH_ERROR_CLOUD 40008 云端鉴权失败,鉴权请求异常:解码失败等
AUTH_ERROR_UNKNOWN 20210012 云端鉴权失败,未知请求异常
AUTH_ERROR_NO_FUNCTION 20210005 云端鉴权失败,无开通功能
AUTH_ERROR_LOCAL_DEVICEID 20210006 本地获取缓存文件的deviceid异常,deviceid 不同
AUTH_ERROR_LOCAL_FUNCTION 20210007 本地获取缓存文件,鉴权异常无开通功能
AUTH_ERROR_LOCAL_DECODE 20210008 本地获取缓存文件解密失败
AUTH_ERROR_FILE_NO 20210009 获取deviceid是正常的,但是未发现本地的鉴权文件,需要重新鉴权
AUTH_ERROR_EXPIRE 20210010 鉴权文件过期
AUTH_ERROR_NOT_INIT 20210011 没有调用初始化接口
AUTH_POST_ERROR_CURLINIT 20210101 http错误:curl init错误
AUTH_POST_ERROR_CURLPERFORM 20210102 http错误:curl_easy_perform异常
AUTH_FILE_ERROR_FOPEN 20210201 打开文件失败
AUTH_SKILL_ERROR 20210301 没有权限
PERMISSION_READ_PHONE_STATE 20210401 没有READ_PHONE_STATE权限

七、常见问题

7.1 鉴权问题

1.设备鉴权失败,鉴权方式与机器人类型不匹配

①如果接入方式是“SDK接入”则使用不带SN的鉴权接口。

②如果接入方式是“混合SDK接入”则使用带SN的鉴权接口。

7.2 标定版绘本问题

1.封面识别失败

①图片角度,上传的图片需要旋转180°,可查看 com.turing.book.api.BookListener#onImageData 回调接口中图片的角度是否符合要求。

②图片镜像,查看是否需要做镜像处理。除了手机支架+反光镜的场景,其他的需要是非镜像的图片。具体说明,3.0查看sceneMode,2.0查看deviceType。

③turingCameraId是否使用标定的ID,如果没有标定,找项目负责人标定。

④查看是否配置绘本库,biz->机器人管理->机器人识别管理->配置->开打库权限。

2.内页识别失败

①检查封面是否识别成功。

3.tts权限异常

联系图灵项目负责人,开启tts权限。

6.3 标定版指尖查词问题

1.无法检测到手指或识别失败

①同绘本封面识别原因①②③

②检测CameraID标定,是否配置指尖查词摄像头参数,找图灵负责人。

③查看摄像头预览分辨率是否符合要求,需100万像素。

7.4 语音对话问题

1.提示“ASR权限异常”、“TTS授权异常”

联系图灵项目负责人,开启权限。

7.5 坐姿检测问题

1. 如何确定设置图片旋转角度后图片是人脸正向图片?

可以调用 TuringPosture().getInstance(context).debugSavaPreView() ,在相册中查看保存的预览图片。

2. 不想要显示预览界面,如何实现?

目前 SDK 使用 Camera2 开发,Camera2 要求预览界面必须可见,不能隐藏。

可按照下面方式实现:

① 预览界面viewgroup 宽高设置为1dp,必须要传入图片分辨率参数,否则sdk内部的默认值会影响结果。 分辨率取值范围:640×480 ~ 1280×720

7.6 口算批改问题

  1. 提示”请检查是否授权文档检测能力!“、”This api key do not have permission.Please contact the staff if need use“

联系图灵项目负责人,开启权限。

  1. 提示”鉴权失败“

测试阶段,请使用 com.turing.sample;正式阶段,需提前 1-2 天告知图灵项目负责人 APP 包名。

7.7 其他问题

1.获取Device ID异常!

①检测是否已鉴权成功,所有能力都需要鉴权成功之后才能使用。

八、Demo下载

1.下载地址

https://turing-appstore.oss-cn-beijing.aliyuncs.com/android/demo/TuringAISample.zip

2.使用方法

根据自身SDK的模块功能,修改gradle.properties文件,将需要的模块isExport参数设置为true,其他设置false,例如:SDK只有标定版绘本翻指读,设置如下

isExportFinger=false
isExportTextbook=true
isExportFINGERPro=false
isExportTextBookPro=false
isExportQuality=false
isExportStruct=false
isExportOCR=false
isExportBookScreen=false
isExportAsr=false
isExportTts=false
isExportChat=false
isExportOnlineDict=false
isExportSpeech=false
isExportDNTTS=false
isExportWakeUp=false
isExportAIGC=false