setting alipay wechat success appmanage dollor user cart order workorder logout left1 left2 app unfree free chart coupon note copy pencil price-tag database cog bin list link plus minus codepen 审核 cross table search user-tie eye github cancel-circle checkmark icon-upload icon-smartphon icon-auth-user icon-arroba-symbol icon-check-pass icon-red-cross icon-pwd-key icon-used icon-expired android appleinc tux windows8 java webAPI mail vip

    # 离线命令词识别 Windows SDK 文档

    # 1、简介

    语法(命令词)识别,是基于语法规则,将与语法一致的自然语言音频转换为文本输出的技术。语法识别的结果值域只在语法文件所列出的规则里,故有很好的匹配率,另外,语法识别结果携带了结果的置信度,应用可以根据置信分数,决定这个结果是否有效。语法识别多用于要更准确结果且有限说法的语音控制,如空调的语音控制等。在使用语法识别时,应用需要先编写一个语法文件,然后通过调用QISRBuildGrammar接口编译本地语法文件,以及获得语法ID,并在会话时,传入语法ID,以使用该语法。

    本文只对构建和使用语法的 SDK 调用过程进行介绍,关于语法的规则说明,请参考语法开发指南 (opens new window)

    语法识别主要采用语音听写接口,相较于语音听写,第一次使用某语法进行识别,需要先构建语法网络,获取语法ID,之后使用此语法进行识别,无需再次构建。 注:语法识别仅提供离线版本。

    详细代码调用请参考 Samples中的 asr_sample(语法识别示例)。API详细描述请参考API文档 (opens new window)

    注:支持Windows XP以上系统版本,开发环境建议使用VS2010版本,暂不兼容VS2017版本。

    # 2、SDK集成指南

    # 2.1 Demo运行步骤

    1.在控制台下载对应sdk

    2.进入sdk内samples目录,双击samples.sln文件(需事先安装Visual Studio)

    # 2.2 项目集成步骤

    # 2.2.1 sdk包说明

    《SDK目录结构一览》

    • bin:
      • msc.dll(32位动态链接库)
      • msc_x64.dll(64位动态链接库)
      • 相关资源文件
    • doc:
      • 相关技术文档
    • include:
      • 调用SDK所需头文件
    • libs:
      • msc.lib(32位静态链接库)
      • msc_x64.lib(64位静态链接库)
    • samples:
      • awaken_sample(语音唤醒示例)

    注意:

    • 为了减少SDK包在应用中占用的大小,官网在下载单个功能的SDK包时, 可能并不包含其他功能,如下载唤醒的SDK包时,可能不包含听写或合成等功能,因此在运行未包含功能的示例时,可能会报错。对此请下载对应功能的SDK,或下载组合的SDK包。

    # 2.2.2 sdk导入

    • Step 1: 新建工程

    1.打开Microsoft Visual Studio(本例使用的是VS2010),选择文件->新建->项目->Visual C++ ->Win32控制台应用程序,输入项目名称,然后点击确定键

    img

    2.应用程序类型选择“控制台应用程序”,附加选项选择“空项目”,然后点击完成。

    img

    • Step 2:配置工程属性

    1.将SDK中bin,include,libs文件夹复制到新建工程“Demo”文件夹下

    img

    2.导入头文件

    右键点击新建工程,选择 “属性“,进入工程属性页面:点击C/C++->常规->附加包含目录,输入相对于工程文件Demo.vcxproj的相对路径,即相对于$(ProjectDir)的路径,另源代码文件也需相同设置。

    img

    3.导入msc.dll

    a. 加载msc.lib文件:在main.c文件中输入如下图所示代码,其他详细代码请参考Samples中对应的语音示例 注意:加载路径输入相对于工程文件的相对路径

     #ifdef _WIN64
     #pragma comment(lib,"../libs/msc_x64.lib")
     #else
     #pragma comment(lib, "../libs/msc.lib")
     #endif
    

    b. 将msc.dll所在目录设置为工作目录,即“$(ProjectDir)..\bin\”

    img

    4.将目标可执行文件复制到msc.dll所在目录

    img

    5.SDK启动后,bin/msc目录下会生成日志。(注意:msc文件夹下需有msc.cfg文件)

    img

    # 2.3 参数与说明

    # 2.3.1 常用参数说明

    以下为常用参数说明,更多参数设置请参考API文档 (opens new window)

    参数 名称 说明
    asr_threshold 识别门限 离线语法识别结果门限值,设置只返回置信度得分大于此门限值的结果
    可取值:0~100,默认值:0
    asr_res_path 离线识别资源路径 离线识别资源所在路径,对应格式如下:access_type1|file_info1|[offset1]|[length1];access_type2|file_info2|[offset2]|[length2]各字段含义如下:access_type:文件访问方式,支持路径方式(fo)和文件描述符方式(fd);file_info:此字段和access_type 对应,文件路径对应fo,文件描述符对应fd,
    grm_build_path 离线语法生成路径 构建离线语法所生成数据的保存路径(文件夹)

    # 2.3.1 命令词结果

    开发者需要关注置信度 (opens new window)(confidence)字段,来判断该次命令词是否生效

    <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
    <nlp>
        <version>1.1</version>
        <rawtext>打电话给丁伟</rawtext>
        <confidence>92</confidence>
        <engine>local</engine>
        <result>
            <focus>dialpre|contact</focus>
            <confidence>79|100</confidence>
            <object>
                <dialpre id="10001">打电话给</dialpre>
                <contact id="65535">丁伟</contact>
            </object>
        </result>
    </nlp>
    

    # 3、常见问题

    # 错误码及相应解决方案查询网址

    答:错误码及相应解决方案查询 (opens new window)

    # 离线命令词sdk如何下载试用?

    答:文档中心---快速指引 (opens new window)有介绍步骤---根据步骤下载相应平台的离线命令词sdk,离线命令词SDK包有10个装机量,试用期为90天。

    # 离线命令词识别支持多少命令词?

    答:离线识别的命令词是开发者自己定义,命令词最大长度为16个汉字,需要先构建语法,然后指定使用的语法。
    语法文件开发文档请参考识别语法分享--在线语法和离线语法编写指南(http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=7595)

    # 为什么在VS2017环境下运行崩溃?

    答:离线命令词支持Windows XP以上系统版本,开发环境建议使用VS2010版本,暂不兼容VS2017版本。

    # 请问离线命令词识别支持中英文混合识别吗?

    答:离线命令词支持中文普通话,暂不支持英文。

    # 离线命令词识别音频采样率不支持8K吗?

    答:暂不支持8k,支持16k采样率、16bit、单声道的pcm格式的音频。

    # bnf如何编写?

    答:可参考bnf语法文件编写指南:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=7595。

    # 是否支持多线程?

    答:SDK不支持并发,也不支持多线程。