概述
最近帮别人的车载系统整了一个小项目,分享一下最原始的Demo!
**说明:**XF的语音服务很多,类似提供语音服务的国内巨头还有百度!
客户需求:实现简单的语音控制指令【听音乐、暂停、下一首、上一曲、声音大一点、声音小一点】,程序入口:打开某某应用,嵌入到项目中实现TTS服务,人机交互。
如下简单的实现了命令控制,使用XF的离线命令词识别+TTS服务。
第一步:编写离线命令词文件,遵守它的语法规则
BNF文件如下:
#BNF+IAT 1.0 UTF-8;
!grammar call;
!slot <usOprate>;
!slot <usAccess>;
!slot <FuncTemp>;
!slot <FuncModel>;
!slot <ModelType>;
!slot <acModel>;
!start <acStart>;
<acStart>:<Model>;
<Model>: <ModelType>;
<ModelType>:暂停!id(101)|上一曲!id(102)|下一曲!id(103)|关机!id(104)|大点声!id(105)|大声!id(106)|小点声!id(107)|小声!id(108)
|后退!id(109)|天气!id(110)|天气!id(111)|唱首歌!id(112)|唱歌!id(113)|讲故事!id(114)|打开地图!id(115)
|打电话!id(116)|打开相册!id(117)|音乐!id(118)|拍照!id(119)|QQ!id(120)|扣扣!id(121)|口口!id(122)|叩叩!id(123)|微信!id(124);
配上语法详解:
第二步:接口调用
封装XF的离线命令词识别和和TTS服务,基于接口的实现而已。当用户说的话是命令词的时候,就直接触发命令执行相关业务逻辑。系统始终监听声音。
采用多态思想,让抽象方法实现接口,使得具体运用时候可以不实现接口中所有的方法,而且在抽象类中实现想实现的方法,需要时候,直接用抽象类的实例直接调用就OK。
部分代码如下:
public interface IVoiceCommandListener {
// 打电话
void onCallSomebody();
// 打开的相册
void onViewPhoto();
// 我想听歌
void onPlayMusic();
// 查询天气命令
void onViewQQ();
// 拍照、照相
public void onTakePhoto();
// 微信
public void onViewWX();
}
public abstract class VoiceCmdListener implements IVoiceCommandListener {
private Context mContext;
public VoiceCmdListener(Context context) {
mContext = context;
}
@Override
public void onCallSomebody() {
String pkg = "com.example.news.movenews";
String cls = "com.wxzh.news.MainActivity";
ComponentName componet = new ComponentName(pkg, cls);
Intent intent = new Intent();
intent.setComponent(componet);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
实例化:
voiceCommandListener = new VoiceCmdListener(UnderstanderService.this) {
};
直接调用抽象类中实现的方法:
voiceCommandListener.onPlayMusic();
此项目主要为最原始的测试的离线命令词+TTS服务的Demo,有非常大的借鉴的意义,项目已经运用到市场中去了。读者拿了之后直接更换资源即可测试,更改拓展项目。
项目下载地址
可参考前几天的demo,机器人语音系统的文章:
机器人语音系统项目
最后
以上就是清脆电话为你收集整理的语音离线命令词识别的全部内容,希望文章能够帮你解决语音离线命令词识别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复