跳转至

绘本识别

绘本识别

绘本识别模块主要是识别儿童绘本、教材,提供对应绘本教材的音频和内容。

Android SDK接入步骤

1.集成图灵AI平台的Android SDK,具体步骤可参考集成指南,可在Demo中绘本识别部分参考绘本识别接口的调用;

2.集成翻页键检测库(可选,可以用其他的翻页检测库)。图灵提供翻页检测库,有需要可以下载翻页检测Android SDK,具体使用说明可以参考翻页检测文档

3.参考绘本接入指南,确定摄像头ID参数和场景参数,分别对应BookRequestConfig中的cameraId、type;

4.使用绘本识别接口上传图片得到识别结果,然后播放和显示绘本识别内容。

SDK接口使用步骤

第一步:初始化SDK, 获取userData;

第二步:获取TuringOSClient实例;

第三步:创建绘本识别参数,cameraID和type为必须参数,cameraID为摄像头标定结果,type为场景确认参数(具体可参考绘本接入指南);

第四步:上传图片识别,filePath为图片路径,获取识别结果。

        //第一步:初始化SDK,获取userData
        SdkInitializer.init(deviceID, context, apiKey, secert, sdkInitializerListener);
        //第二步:获取TuringOSClient实例   
        client = TuringOSClient.getInstance(mContext, userData);
        //第三步:创建绘本识别参数,mTuringCameraID为摄像头标定的结果,mTuringType为场景参数,不同的设备使用场景需要不同的mTuringType值,具体参考绘本接入指南
        BookRequestConfig.Builder builder = new BookRequestConfig.Builder();
        builder.cameraID(mTuringCameraID)
                .enableUseQa(true)
                .enableDebug(true)
                .type(mTuringType)
                .enableInnerUrlFlag(true)
                .phoneModel(android.os.Build.MODEL);
        bookRequestConfig = builder.build();
        //第四步:上传图片识别,filePath为图片路径
        client.actionBook(filePath, bookRequestConfig, booklistener);

相关参数说明

BookRequestConfig

参数 类型 是否必须 取值范围 说明
cameraId int Y - 在图灵后台注册的摄像头编号,包含摄像头标定参数以及硬件平台信息
bookId long N - 绘本模型ID,封面识别不需要此参数,内页识别则需要把封面识别结果中的 bookId 传入
innerUrlFlag Boolean N - 是否需要内页音频压缩包
false:表示不需要(默认)
true:表示需要,封面识别成功后会返回压缩件下载url
debug Boolean N - 是否开启调试模式:
false:表示不开启(默认)
true:表示开启
注意:APIKey 正式量产(状态为正式状态),
不支持 Debug 模式
useQa Boolean N - 开启QA模式:false(default),使用需要管理平台开通对应题库
type int Y - 0:标准版绘本机器人
1:标准版手机支架
2:标准版绘本台灯
3:升级版绘本机器人
4:升级版绘本台灯
5:指读版绘本机器人
6:指读版绘本台灯
9:纯指读版绘本机器人
10:纯指读版绘本台灯
11:标准版卡⽚识别
12:指读版卡⽚识别
场景确认参数,不同的场景可用的值不同,具体可参考绘本接入指南
phoneModel String N - 手机型号(支架必填,非支架不需要)
type=1时,改参数必填
languageOrder Integer N - 语言顺序
1.中文优先
2.英文优先
默认1
textFlag Integer N - 是否返回热区文本,默认0(需要联系图灵商务或者项目进行开通):
textFlag=0:不返回
textFlag=1:返回热区文本
textFlag=2:返回热区文本+翻译文本
accessModel Integer N - 访问模型
1:公有库+私有库
2:公有库
3:私有库
默认1
modelOrder Integer N - 优先级顺序
1:公有库优先
2:私有库优先
默认2
osState String clean 清除休眠状态:
1. 固定传"clean"
2. 非休眠状态不可使用,否则返回1009的operateState码
ext Map N - 其他输入,扩展参数

参数创建

    BookRequestConfig.Builder builder = new BookRequestConfig.Builder();
    builder.cameraID(1)        
        .enableUseQa(true)        
        .enableDebug(true)        
        .type(1);

绘本输出

封面识别成功返回示例:

{
    "code":200,
    "globalId":"98411492145000000",
    "message":"success",
    "nlpResponse":{
        "intent":{
            "code":1000056,
            "operateState":2000,
            "parameters":{
                "msg":"cover recognition succeeded",
                "intentCode":200,
                "titleData":{
                    "cover":"http://universe-file-limit.tuling123.com/201912171915/9eeeaea4b6aa0cf34230ceb609e0c0f3/book_image/7b15cb80fe334d5e959c4ecc14b1a0be.jpg",
                    "bookVersion":3,
                    "zipUrl":"http://universe-file-limit.tuling123.com/201912171915/dbb3f754afe5a5038b9abea9c03f82b0/robot_story/12948/12948.zip",
                    "nameUrl":"http://universe-file-limit.tuling123.com/201912171915/14a7698950461761f5994c2214d6bee8/title/12948.mp3",
                    "name":"狼来了",
                    "bookName":"7b15cb80fe334d5e959c4ecc14b1a0be",
                    "bookId":12948
                },
                "commandUrl":"http://universe-file-limit.tuling123.com/201912171915/b5c3cdc000982ee3e55c579a8b71d13d/hint/success-1.mp3",
                "debugData":{
                    "imgOriginalUrl":"http://turing-platform-openapi.oss-cn-beijing.aliyuncs.com/openapi/image/0b6c2dd6687a4c8cb73a3ca49ed9b3ca_69412281_98411492145000000_834c386edc924aacb366def72581a2f9.png",
                    "imgProcessedUrl":"http://turing-universe.oss-cn-beijing.aliyuncs.com/recognition_img/img224/180.0_35.0_250.0_560.0_320_240_crop_/7f01feb9-70af-4feb-9fcf-b02737309168.jpg"
                }
            }
        },
        "results":[
            {
                "groupType":0,
                "resultType":"text",
                "values":{
                    "text":"我要和你一起读故事了"
                }
            }
        ]
    }
}

内页识别成功返回示例:

{
    "code":200,
    "globalId":"113607374688678001",
    "message":"success",
    "nlpResponse":{
        "intent":{
            "code":1000056,
            "operateState":2000,
            "parameters":{
                "innerData":{
                    "pageUrl":"http://universe-file-limit.tuling123.com/202006101620/60f5821e936a55e6efadd1d8b393d3ab/robot_story/37353/37353-6.mp3",
                    "pageNum":6,
                    "bookId":37353
                },
                "msg":"inner page recognition succeeded",
                "intentCode":207,
                "hotZone":{
                    "pieceIndex":1423,
                    "pieceContent":"Excuse me. Where is the London Eye?  It's next to the film museum near the Thames.  ",
                    "pieceUrl":"http://universe-file-limit.tuling123.com/202006101620/fb6b6f4f04edd2e0ab066dae9cf5b33d/robot_story/37353/37353-6-1423.mp3"
                },
                "funcData":{
                    "finger":1,
                    "ocr":0
                },
                "debugData":{
                    "imgOriginalUrl":"http://turing-platform-openapi.oss-cn-beijing.aliyuncs.com/openapi/image/c8162cf54ada46bf883c0c19c8eba0de_356563768_113607374688678001_b3cb0572dbe1437aa0cefc2768516fe5.jpg",
                    "imgProcessedUrl":"http://turing-universe.oss-cn-beijing.aliyuncs.com/recognition_img/im224Finger/180.0_35.0_260.0_420.0_240_320_crop_/f25ceaa0-9c0d-486c-a895-5d481a052722.jpg"
                }
            }
        }
    }
}

参数说明:

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 错误输入(非法使用唤醒功能)

intent-parameters

参数 类型 说明
intentCode int 绘本状态
msg String 返回信息(英文)
commandUrl String 提示语音
titleData TitleData 封面识别返回信息
innerData InnerData 内页识别返回信息
debugData DebugData 调试信息
funcData FuncData 功能参数,支持OCR和指读结果
hotZone HotZone 点读热区信息
success boolean 问答状态,用户回答是否正确
sleepSec int 休眠状态,距离下次可请求绘本识别时间
ext map 附加输出信息
answerTimeoutSec int 问答状态,上传已读题目状态或回答题目时返回问题剩余可回答时间
questionTimeoutSec int 问答状态,等待用户确认题目播放状态时间,有效期内图片问题不能作答,文本与音频类型可以回答
backEvent boolean 问答状态事件回溯:如果上下文中的题目因为未读受保护而导致最近一次识别事件没有请求新题,纪录该次事件的时间。规定时间内用于用户上传状态readQuestion=FALSE/CANCEL则事件回溯。
qParam map 问答状态,题目问题其他参数。
aParam map 问答状态,题目答案其他参数
  • qParam-evalAnswerData:音频类问答测评内容。
  • aParam :音频类评测结果输出。

TitleData

参数 类型 说明
name String 绘本名称
zipUrl String 绘本压缩包的url
bookVersion Integer 绘本版本,音频版本,判断是否需要更新
nameUrl String 绘本名称的url
bookName String 绘本模型标识
author String 绘本作者名称(版本2.0.0新增字段)
publisher String 出版社名称(版本2.0.0新增字段)
cover String 封面图片的url(版本2.0.0新增字段)
bookId Long 绘本Id

InnerData

参数 类型 说明
bookId Long 绘本Id
pageNum Integer 绘本页数
url String 绘本内页音频
pageUrl String 绘本内页音频(版本2.0.0新增字段)

FuncData

参数 类型 说明
ocr int 0:普通;1:ocr
finger int 0:无指读;1:可支持指读

HotZone

类型 参数 介绍
int pieceIndex 热区索引
String pieceUrl 热区在线的音频链接
String pieceContent 热区文本
String transContent 热区文本对应的中文文本

ext

参数 类型 说明
evalFlag int 口语评测标志位(0不可测评,1可测评)
multiAudios Array 自定义热区多音频内容
bookEvalFlag boolean 是否支持口语评测(需要后台开启输出口语评测标志位权限,封面识别时输出)
bookEvalFlag=true:该书支持口语评测
bookEvalFlag=false:该书不支持口语评测
bookSupportQa array 当前识别书本内包含的QA类型,AUDIO(音频), TEXT(文本), IMAGE(图片)
  • evalFlag:指读热区识别成功之后,evalFlag为1标识改热区文字支持口语评测,为0表示不支持口语评测。
  • bookSupportQa:表示当前绘本支持的问答题目类型。

MultiAudio

参数 类型 说明
text String 热区文本
url String 热区音频文件URL或音频ID: URL有效时间为10分钟(自己上传的URL除外)
textKey String 音频名称 textKey=0:中文 textKey=1:英文 textKey=2:粤语 textKey=3:讲解 textKey=4:视频

DebugData

参数 类型 是否必须 取值范围 说明
imgOriginalUrl String Y - 原图片链接
imgProcessedUrl String Y - 算法处理后的图片链接

intentCode说明

intentCode 说明
200 识别绘本封面成功
201 识别绘本内页成功
202 绘本扉页识别成功
203 绘本无文本内页识别成功
204 绘本无意义内页识别成功
205 封面识别成功,热区识别成功
206 封面识别成功,热区识别失败
207 内页识别成功,热区识别成功
208 内页识别成功,热区识别失败
300 绘本封面识别失败
301 绘本内页识别失败
302 非缺省参数未找到
303 摄像头ID信息未找到
304 图片无法打开
305 图片尺寸异常
306 绘本内容未录入
307 当前绘本页音频缺失
308 未开通OCR功能
309 未开通指读功能
310 暂不支持该功能
311 此绘本为私有绘本
312 非法bookId
400 封面算法识别超时
401 内页算法识别超时
402 绘本算法未知异常

一、封面识别和卡片识别

    /**
     * 
     * 
     * @param filePath 需要识别的图片文件路径
     * @param bookRequestConfig BookRequestConfig
     * @param listener
     */
    public void actionBook(String filePath, BookRequestConfig bookRequestConfig, TuringOSClientListener listener)


    /**
     * 
     * @param data JEPG格式图片的byte[]数据
     * @param bookRequestConfig
     * @param listener
     */
    public void actionBook(byte[] data, BookRequestConfig bookRequestConfig, TuringOSClientListener listener)   

    //调用
    turingOSClient.actionBook(filePath, bookRequestConfig);  


二、内页识别

在封面识别成功之后回返回bookID,将该bookID作为参数传入进行内页识别;

注意:bookID不影响换书场景,只需要在每次封面识别成功之后,记录并传入bookID即可。

    /** 
     * 
     * @param fileName 
     * @param bookID  封面识别成功之后会在返回的结果中给出bookID
     * @param bookRequestConfig 
     */
    public void actionBook(String fileName, long bookID, BookRequestConfig                      bookRequestConfig)

    /**
     * 
     * @param data JEPG格式图片的byte[]数据
     * @param bookID
     * @param bookRequestConfig
     * @param listener
     */
    public void actionBook(byte[] data, long bookID, BookRequestConfig bookRequestConfig)

    //调用
    turingOSClient.actionBook(filePath, bookID, bookRequestConfig);  


三、指读识别

当封面识别成功之后会在FuncData中返回ocr和finger字段,具体表示如下

FuncData

参数 类型 是否必须 取值范围 说明
ocr int Y - 0:普通;1:ocr
finger int Y - 0:无指读;1:可支持指读

实现指读识别的步骤:

第一步:成功识别绘本的封面,获取返回值中的FuncData--->finger字段,当finger字段等于1时,表示该绘本支持指读功能;

第二步:正常识别内页并上传带指读的图片,关注返回的intentCode的值,当intentCode等于207时,标志指读识别成功,并在HotZone中返回指读热区的信息,此时设备可以根据返回的指读信息,播放指读音频,显示指读内容。

四、指读内容口语评测

在指读成功识别之后,返回的 ext 字段evalFlag中附带口语评测的标志位,可根据标志位是否为1,直接调用口语评测接口 startEAWithRecorder 接口实现口语评测功能。

备注:

  • 口语评测标志位需要联系商务开通,否则不会返回该字段;
  • 通过该方式调用的口语评测与问答交互中的口语评测不属于同一个功能。该方式仅给出口语评测的标识,然后开发者自行调用口语评测接口实现。

绘本休眠

一、云端限流

由于设备在绘本模式使用过程中,设备受到翻页检测触发会不断的进行请求,云端已经对绘本请求做了限流。具体表现为下面输出参数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可以唤醒休眠状态,或者等待提示的时间之后将会重新获得识别机会。

二、本地休眠

为避免触发云端限流和资源浪费,设备端可以自行实现本地休眠机制,对外Demo中的休眠流程如下图:

内容播放

SDK提供音频播放器


    /**
     *
     * @param url 播放音频链接
     * @param _playListener 播放状态接口
     */
    public void playUrl(String url, PlayListener _playListener)

    BookResPlayer bookResPlayer = new BookResPlayer(mContext);
    bookResPlayer.playUrl(url, ContentPlayListener);