注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lb8820265的个人空间 https://home.eeworld.com.cn/space-uid-527961.html [收藏] [复制] [分享] [RSS]
日志

简单的语音交互(5)-- 讯飞语音关键字提取

已有 6195 次阅读2017-2-14 16:15 |个人分类:ST| 语音, 讯飞, 识别, 连续

简单的语音交互(5)-- 讯飞语音关键字提取

  前面介绍到讯飞的语音识别,可以连续转换,这在讯飞的定义中这叫做语音听写,讯飞定义的语音识别实际上像是语音关键词提取,前面介绍了百度语义唤醒,可以持续检测简单的词令,连续不断的讯飞语音识别其实也就相当于唤醒功能了,而且使用方便。

有了前面的讯飞编程基础,接下来就好办了,首先在讯飞语音官网给需要程序添加语音识别功能。可以参考两个官方demo中的AsrDemo,也可以参考官方文档:http://www.xfyun.cn/doccenter/awd 4语音识别部分。

讯飞的语音识别和语音听写只能够同一时间运行一个,不过很多代码却是重复的。主要步骤:

1.       ANBF语法编写词令,本例程使用是:

#ABNF 1.0 UTF-8;
language zh-CN;
mode voice;
root $main;
$main = $place1;
$place1 =
开灯|关灯;

然后将文本保存为:grammar_sample.abnf,然后在\src\main中新建assets文件夹将其放入。

2 初始化:

public void setParamAsr(){
        int ret;
        mIat.setParameter(SpeechConstant.PARAMS, null);
        mIat.setParameter(SpeechConstant.VAD_BOS, mSharedPreferences.getString("iat_vadbos_preference", "10000"));
        mIat.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");
        ret = mIat.buildGrammar("abnf", mCloudGrammar , mCloudGrammarListener);
        if (ret != ErrorCode.SUCCESS){
            Log.d(TAG,"语法构建失败,错误码:" + ret);
        }else{
            Log.d(TAG,"语法构建成功");
        }
//3.开始识别,设置引擎类型为云端
        mIat.setParameter(SpeechConstant.ENGINE_TYPE, "cloud");
//设置grammarId
        String grammarId = mSharedPreferences.getString(KEY_GRAMMAR_ABNF_ID, null);
        mIat.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId);
    }

3.       构建语法监听器  

private GrammarListener grammarListener = new GrammarListener() {  

 @Override  

    public void onBuildFinish(String grammarId, SpeechError error) {  

  if(error == null){  

            if(!TextUtils.isEmpty(grammarId)){  

//构建语法成功,请保存grammarId用于识别  

           }else{  

Log.d(TAG,"语法构建失败,错误码:" + error.getErrorCode());  

            }             

      }}; 

4.       在监听器的onResult中显示
String text ;
text = JsonParser.parseGrammarResult(results.getResultString());
mResultText.append(text);
mResultText.append("\n");
mResultText.setSelection(mResultText.length());
5.       开启连续转换功能,在监听器的onErroronResult中添加:
if (mIsRecognizer) {
    mIat.startListening(mRecognizerListener);
}
弄一个witch进行功能切换,需要先切换功能,然后在点击开始按钮或者开启连续转换。
下面是语音听写的效果图:

下面是语音识别的效果图:
 

源码:https://github.com/flyloong/XF_Voice/tree/V0.02
 APK文件:app-debug.apk
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章