灵云人工智能论坛

 找回密码
 立即注册
搜索
查看: 4752|回复: 0

简单的QA [复制链接]

Rank: 10Rank: 10Rank: 10

超级版主 活跃会员 突出贡献 优秀版主 荣誉管理 论坛元老 智多星 小助手 大助手

发表于 2017-4-24 12:43:14 |显示全部楼层
灵云公有云技术支持QA
灵云SDK通用问题

Q(厦门国际):HCI_License和hci_license_batch有什么区别?我用新的授权文件报hciinit_error8错误。

A(捷通范志朋、王逸冬):不加batch的只能用在一台设备,多台设备都需要的线程授权的话,产生的文件就是hci_license_batch。通过ifconfig检查,发现系统里有不止一块网卡,有两个网卡mac地址。其中一块网卡的udid不在提供的udidlist中,导致授权失败。

Q:我要进行多个能力的交叉使用,比如ASR+TTS+NLU,但是目前你们提供的sdk都是单能力的,我是将所有用到的capkey填到accountinfo.txt里吗?

A(捷通王逸冬):各个能力的capkey是在能力初始化的时候,作为一个参数传入的。如果涉及用到多能力,则分别进行各个能力的初始化,代码方便需要重新组装。我们提供的accountinfo.txt通常是在帮助类中读取的,您可以修改帮助类中的代码,使它不读这个txt文件,各个能力各自读自己的配置。

Q(王逸冬)

String authDirPath =this.getFilesDir().getAbsolutePath();,这个会具体推送到我的android手机的哪个位置?我该怎么放本地授权呢?

A:在String authDirPath = this.getFilesDir().getAbsolutePath();后加入

Log.e("yidong","authpath:" + authDirPath);


在Logcat里可以看到对应的路径。然后把授权文件放在对应路径下即可。需要对应的路径具有可读写的权限。

Q(德纳科技):

我用双路麦克风,然后sdk调用私有云进行识别,为什么老是返回17号错误,session too much?

A:17号错误,需要检查每个sessionstart后面是否都有相应的sessionstop操作。各平台默认的线程数:

Windows1线

Linux     1线

Android  256线

Ios       256线

对应的日志里可以看到Maxsessioncount,即为可用线程数。

您的使用场景是用windows java调用私有云平台,没有线程授权文件存在的情况下,sdk线程授权默认就是1线,与私有云云端线数无关。所以您还需要一个2线的线程授权。

Q(新松机器人)我的机器人突然不能发声了,之前都是可以的,我啥也没做。就是禁用了一块无线网卡,因为我们以后都打算用有线的。

A(捷通王逸冬)sdk第一次联网授权时抓的mac地址从日志里检查是无线网卡的mac地址。禁用了无线网卡,sdk运行时就无法读取到它的udid,就会报授权失败。现在的情况,您可以把有线网卡的mac地址改成无线网卡的,就可以使用。或者考虑重新做一个udid为有线网卡mac地址的授权。

Q(翻译局):我使用你们提供的ios版本sdk报错了,报的都是编译错误,你们给我们提供的sdk是否经过严格的测试?

A(捷通王逸冬):经检查是您的linked-library错误,关联库没有配置对。此外,编译时需要注意我们的ios端的sdk,依赖的都是标准的c++库,即libstdc++,您如果使用libc++库来进行编译,是会报错的。

Q(捷通王逸冬)静态库和动态库都有什么区别,为什么ios版本通常都是用的静态库,而android版本通常都是用的动态库?

A(捷通王逸冬)

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。

静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。静态库编写的时候就被加载进源代码进行编译,如各种头文件。而动态库是在程序运行的时候映射进程序的内存空间进行动态加载的。

ios是一个模块化的系统,静态库用的更多。而android系统的特点是开源,它是欢迎动态库的。

Q(中智科创): 我们商用域的语音识别用不了,总是返回9和11号错误

A:(捷通王逸冬) 返9和返11通常是服务器的内部错误,请将相关的日志提供给我们,我们协调后端运维的同事去确认问题。

TTS

Q(去哪儿):我从官网下载的android版本sdk,配合着xiaokun音库使用,播放没有声音。返回23号错误。

A:检查日志hci.log发现,缺少tts_local_synth.so文件。经检查,armeabi路径下没有tts_local_synth.so这个文件,所以无法使用本地能力。建议用V7a,V8a版本的动态库来播放。

Q(东软):我用ios版本的tts_player,我们的结构是分成两层的,内层是framework,封装了灵云tts_sdk,外部是app,封装的是同版本的灵云tts_sdk,现在我在framework层成功运行了tts_sdk,但是外部报错,提示tts_player already init

A:

ASR

Q(艾维尔机器人):asr_recorder怎么调用识别?

A:按下的时候,应该调用start接口,开始录音

抬起的时候,应该调用stopAndRecog接口,结束录音并识别。

识别结果会在监听接口里输出。

Q(勤威):請問一下,ASR 的實時識別範例目前是利用while完成。是否可以傳送部分pcm後,關閉程式再開啟時,重新init 用相同sessionid 再繼續使用hci_asr_recog傳完剩餘的pcm?

A:暂不支持

OCR

Q(诚美):我用OCR win C版本识别身份证反面,返回了403错误,是否需要修改哪些识别参数?

A:需要修改templatePageIndex,默认识别身份证正面,此参数为0,识别身份证背面需要修改为1,详见开发手册。

Q: 目前我们的ocr支持 扫描件为pdf格式的吗?能不能给个产品介绍  谢谢

A:OCR暂不支持pdf格式。


NLU

Q:我不仅需要关注我得到了什么返回结果,我还想知道我说的话被识别成了什么,需要看到识别的文本内容。

A:nlu进行识别时,如果是云端识别,首先需要指定INTENTION,意图领域。这个相当于语义识别范围。然后将需要识别的文本内容以字符串的形式(String sRecogText)作为一个参数传入recog接口中,并返回结果。

HciCloudNlu.hciNluRecog(mSessionId, sRecogText,nluConfig, nluResult);前三个参数是输入的,最后一个识别结果是输出。单独的nlu能力不能完成从语音转文字的功能。您这种使用场景,建议使用的产品是我们的灵云种子。种子对sdk(asr+nlu+tts)进行了再次封装,接口更简单,也完全可以满足您输入语音,返回意图识别结果的需求。如果需要看到意图识别的文本,请设置needContent=yes.

Q(上海遥薇):intention有数量限制吗?一次性添加多个intention,添加了以后,服务器返回的json里都是null,是什么原因?这个代码该怎么写?

A(捷通王逸冬):intention没有数量限制。采用如下方法添加参数,intention中间用分号隔开。

nluConfig.addParam(NluConfig.ResultConfig.PARAM_KEY_INTENTION,"weather;story");


HWR

Q(维信):我使用你们的手写能力,希望获取结果的置信度,这个应该怎么操作?

A:(捷通于伟佳)可以通过getDistance()进行获取,具体参照截图。

Q(维信):手写识别给出的五个汉字,并非完全按照置信度从小到大排序的,这个是什么原因?

A(捷通李健):把距离类型从缺省的归一化的距离改为原始距离,就是完全按照置信度排列的。

Q(维信):各个字的置信度分值差别太大,无法通过设置一个固定的置信度阈值来筛选命中字。

A(捷通李健):收集大量单字,每个字都需要一定量,得到每个字的统计结果后,给每个字设定一个阈值。

Q(维信)请教一下置信度都有哪几种。

A:手写置信度,有两种,一种是归一化后的置信度,第二种是原始的置信度。引擎里的字段为HZ_PARAM_DISTANCETYPE。目前sdk没有引擎这个字段对应的接口。原始的置信度就是引擎根据笔迹直接得到的,归一化后的是得到原始置信度之后,再根据某种算法算出来的。两种置信度的返回方式,识别结果中,字的顺序是一样的。归一化计算只是改变了每个字的置信度的值。所以归一化计算之后,得到的结果可能不是按照从小到大的顺序来排列的。原始值,对于单个笔迹来说,有若干个候选结果,用它来做为排序依据更有可信度。对于两个笔迹来说,归一化的值,会更有可信度。所以说,如果传入的是单个笔迹的话,按照字的顺序来排列更靠谱。如果是多笔迹的话,按照每个字后面的置信度来排序更靠谱。

KB

Q(东软) 我们想咨询下输入法删除的功能一般怎么做,是否有便捷的方法直接删除字符串尾部的汉字或英文字符?

A(捷通王逸冬):没有,输入法的删除字符的功能是外部应用层维护的。

Q(东软):怎么调用中文和英文两种键盘能力?

A(捷通蒋广超):这是我的中文和英文的资源文件名,

原名是没有lib_cn_和.so的,其中lib和.so是必须的,_cn_可以随便起,代码中配置项有一个设置资源前缀,在开启一个session的时候设置,把_cn_设置进去就行,Kb使用的时候要先开启一个session才行。以下是开启中文识别的代码,英文的把资源前缀换一下就行。

    if(mKbCHConfig == null) {

                         mKbCHConfig= new KbConfig();

                  }

                  //cap_key和资源前缀是开启一个session的必须配置

                  mKbCHConfig.addParam(KbConfig.SessionConfig.PARAM_KEY_CAP_KEY,

                                KbConstant.KB_CAPKEY);

                  //设置中文资源前缀

                  mKbCHConfig.addParam(KbConstant.RES_PROFIX,

                                KbConstant.RES_PREFIX_CH);

                  //设置输出结果页大小

                  mKbCHConfig.addParam(KbConfig.ResultConfig.PARAM_KEY_PAGE_COUNT,""

                                +KbConstant.QUERY_COUNT);

                  mKbCHConfig.addParam(KbConfig.InputConfig.PARAM_KEY_INPUT_MODE,

                                KbConstant.INPUT_MODE_PINYIN);

                         mKbCHConfig.addParam(

                                       KbConfig.InputConfig.PARAM_KEY_FAULT_TOLERANT_LEVEL,

                                       KbConstant.INPUT_TOLERANT_LEVEL_NONE);

                  errCode= HciCloudKb.hciKbSessionStart(

                                mKbCHConfig.getStringConfig(),mKbSession);

Q(捷通王逸冬):这是用中文和英文的配置串各起了一个线程?但是我如果是要中英文混合输入呢?

A(捷通蒋广超):是这样:对于资源文件的处理有两种方式:第一种就是我刚刚跟你说的,需要修改资源文件的名称,把资源文件伪装成类库,这个时候资源文件放在工程的lib文件夹中,不需要设置外部存储的datapath;第二种就是设置datapath,将资源文件手动的放在该路径下;KB初始化的时候有个配置参数可以进行这两种方式配置。详细的说明你可以看下api手册。


Q(东软): 我们对手写sdk的需求是“中英混输,中英文自动判断”,那我们应该调用哪个资源库呢?

A

AFRVPR

Q(怡宝):我试用你们本地的声纹识别,程序闪退,提示缺失mkl_rt.dll

A:声纹本地识别依赖intel mkl库,请下载一套mkl库放在与exe同级的/bin目录下。

FPRMT

中智科创

Q: 我们商用域的语音识别用不了,总是返回9和11号错误

A:

公有云http

Q(捷通杨馨): 我想使用http接口调用公有云云端模板识别,capkey是否设置为ocr.cloud.template?图像上传过程中会被压缩吗,会不会影响图片的质量和识别的效果?

A(捷通冯凯、张永杰):按照http开发手册传参数即可,http发送ocr识别请求时,图片会以二进制流的形式放在body体中传输。需要注意,对于不同的模板,需要设置不同的property。如身份证识别,需要设置property=idcard。http发送图片不进行任何压缩。SDK里有个特有配置项:localprocess。主要用来进行本地预处理(现在主要是指二值化),这样会减少发往云端的数据流量。 注意,此配置项对于hci_ocr_set_image_buffer() 设置的图像无效,应用如希望使用此功能,必须使用hci_ocr_set_image_by_decode_buffer() 或者hci_ocr_set_image_by_decode_file() 进行设置。

Q(捷通熊焯群):客户希望通过微信调用客服云的相关接口,实现智能问答,这个具体应该如何实现?

A

灵云种子

PPTV

Q:我们测试中发现这样的使用场景,用户发现第一次说错了,立马进行第二次语音识别,我们在调用了hciSeedAsrCancel()之后,如果cancel没完成,就调用hciSeedAsrStartOrStopRecorder()重新开始录音,有很大概率会报错误RECORDER_EVENT_DEVICE_ERROR,从log中可以看出,cancel的时候做了释放recorder的操作,请问有什么方法能够获取到cancel完成的事件或者状态通知?

A: 客户代码是怎么使用hciSeedAsrCancel()的?

对于语音遥控器的场景下,hciSeedAsrCancel()建议不使用,而是这样:

设置baseConfig.setRecorderType(BaseConfig.RECORDER_TYPE_PRESSED);

当按键按下和抬起时分别调用一次hciSeedAsrStartOrStopRecorder()。

Q:我们测试发现一个BUG,当卸载了已安装应用之后,再通过语音打开这个应用,AppExecutor会调用一遍,然后NullExecutor又会调用一遍。如果应用不存在,不应该执行AppExecutor。

A(捷通万强新):不管客户有没有安装某个应用,只要用户说了“打开某应用”,intent的domain是app,action是open,就会触发openApp回调。本地是否有这个应用,需要应用层判断。

log里“火拼贪吃蛇”这个例子,种子将回调客户实现的AppExecutor.openApp(),这个回调抛出了java.util.NoSuchElementException异常,被种子捕获到,进而执行了NullExecutor。建议客户定位下这个异常发生的原因。如果不想让种子捕获到异常,建议客户自己处理异常。

Q(捷通王逸冬):目前机顶盒中应用的灵云种子,具体的使用场景一般是什么样的?

A(捷通万强新):一般客户会有一个蓝牙遥控器,客户对着蓝牙遥控器说话,由蓝牙遥控器来采集客户的音频。然后蓝牙遥控器把音频数据发送到机顶盒。预装的app,应用等一般可以直接通过本地进行识别。(asr_grammer),频道、视频列表等由于数据较多,通常是由云端来返回结果。云端意图(NLU)的返回结果是一个标准的json串。云端通常也会配置语音识别能力(asr_freetalk),返回语音识别的结果。

Q(福建广电):在吗,请帮忙看下,我盒子连的是广电内网,按理说没有和你们公有云有连接,但是还是能初始化成功,请问这是什么情况?

A(捷通王宽):

1.设备授权信息会进行本地存储,无需每次都联网,离线可用,说明该设备已经联网并授权成功

2.云+端模式,具有一定的本地识别与意图解析能力,本地初始化完毕也会认为是初始化成功。

       可以根据onSeedInitResult(HciCloudSeedErrorCodearg0, int recogType)的recogType 区分是双路识别还是纯本地识别。

       recogType取值有BaseConfig.RECOG_TYPE_LOCAL 和BaseConfig.RECOG_TYPE_LOCAL_AND_CLOUD 对应本地识别与双路识别。

recogType是种子初始化的结果返回的,如果返回的是local,就是本地识别。如果返回了local_and_cloud,就是双路识别。

Q: 客户打开灵云种子V3.6.1,不点击开启唤醒,直接点击开启持续识别/开启非持续识别,录音状态直接从EVENT_INTERACTION_BEGIN跳转到了EVENT_INTERACTION_END。

从日志里看,出现了22号错误,配置项不支持,且有session invalid信息。

A: config = vadTail=600,encode=speex,robotId=,audioFormat=pcm16k16bit,..

如果不需要robotid,不要设置此参数。请将此问题记录到种子3.6.0的问题追踪列表中,属于一个参数使用的问题

常见问题解决流程

1、 报错问题,请客户提供报错码进行问题定位,如仍无法解决问题需要提供log文件;

2、 预授权/批量授权报错问题,请客户提供报错码进行问题定位,如仍无法解决问题请客户提供log、授权文件(包括授权文件路径);

其中,(1)永久授权:使用授权工具制作授权时,有两个时间限制。授权文件的起始时间和终止时间,针对第一次使用有效,第一次使用时时间必须在此范围内才可以正常使用,否则会报错。第一次使用时会把使用的信息记录到HCI_USER_INFO这个文件里面,如果把授权文件拷贝到其他的设备上,需要把HCI_USER_INFO文件删除了;(2)本地预授权文件:有三个时间的限制,第一是授权文件的起始时间和终止时间同永久授权;第二是绝对过期时间,是针对能力的,授权能力必须在此时间之前才可以正常使用,否则视为授权过期;(3)批量授权:批量授权的意思是把一批设备的序列号加入到授权列表中,代替自动联网的方式,人为的加入授权中。android设备默认获取的是androidId序列号,但是androidId在重置设置时序列号会变化,终端统计会把重置后的设备当成新的设备来统计。linux设备默认获取的是mac地址,如果客户没有mac地址或者获取mac地址比较困难,需要客户提供一个方法来获取唯一序列号,但是一定要保证唯一。

3、 能力识别错误、识别率低等识别问题,请客户提供相应识别文件(音频、图片、笔迹、文本等)及log;

4、 使用本地能力报local resmissing,需要客户提供放资源文件列表,验证资源是否缺失。

5、 使用云端能力时,遇到返8或9的情况,需要客户保证网络畅通,如果无法解决,可换一个账号试一下(内网换外网,外网换内网,如果可用了,应该和curl有关,或者服务有关,可反馈给我们),如果仍无法解决,需要提供log文件;

6、 遇到返23的情况,需要客户提供识别库文件列表,验证库文件是否缺失;

7、 如果使用sdk example出现的问题,可提供问题example复现问题;

8、 如果返回19,需要客户确认,日志路径是否有写的权限,或者日志文件是否正确,还需要确认路径中是否有中文字符(部分平台中文字符会乱码)

9、 如果遇到其他返错的情况,需要提供sdk版本、log、文件列表(如果是定制内容,需要提供定制版本)。

10、        使用云端能力遇到返11的情况,可直接提供log文件,因为SDK对于服务器返回的所有错误都统一返回11,需要日志查看具体错误

11、        当遇到返17的情况,需要验证客户程序,确保sessionStart之后的每条代码路径,都有相应的sessionStop操作

12、        当遇到多能力同时使用,不兼容的情况,请提供每个能力的具体版本信息和当前使用的sys库版本

13、        如遇到崩溃问题,请提供客户具体操作和SDK接口的调用方法,并提供log文件

14、        嵌入式sdk组包,其中的引擎需要由开发提供,还需要加入inc头文件,doc开发文档,exp开发示例,dat资源文件。组包命名方式为:iHear7.0_客户名称_r版本号_android_测试版_20170119

15、        linux系统移植sdk,移植的时候一定要跟客户确认下编译选项是否有问题。运行时需要把移植的动态so库加入到环境变量中,命令为:export LD_LIBRARY_PATH = 库文件路径LD_LIBRARY_PATH



踩过的脚印

举报

您需要登录后才可以回帖 登录 | 立即注册

Archiver|任务|灵云 ( 京ICP证030095号 )

GMT+8, 2020-12-4 22:12 , Processed in 0.083499 second(s), 21 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部