小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 16513|回复: 13

原创:安卓离线语音识别初步(可实现智能小车的语音控制)

[复制链接]
发表于 2014-8-26 15:57:55 | 显示全部楼层 |阅读模式
这几天尝试了一下安卓离线语音识别,希望能用简单的语音指令控制小车的运动以及其他操作。综合了google离线语音搜索和简单的拼音转换模糊处理,现在基本可以连续识别上、下、左、右几个普通话汉字发音,识别率还是比较高的,说一下安卓手机测试环境搭建的基本步骤吧:

1. 安装最新版的google搜索(3.6.14.1337016)

2. 打开语音搜索的设置(软键或右下角),语音—下载15M离线普通话中文语音包 (看运气,不行就下个fqrouter2科学上网软件翻吧)

3. 断开手机网络(wifi或数据连接),运行语音文本测试程序


QQ图片20140826152252.png

测试界面很简单,附上源代码,可以根据语音实际测试情况来增加更多语音指令和修改拼音模糊匹配。

后期可以把这个程序与智能小车安卓上位机结合,语音控制指令可以自己再添加。语音控制每个指令发送差不多要1秒多,小车实时运动控制要改一下小车下位机代码的控制方式,比如前进延迟一会停止。对于开关类和舵机旋转类实时性不高的操作要更好一些。

代码写的比较烂,大家凑合看吧,如果有更好方案的语音控制智能小车,希望能交流一下哈,我的QQ: 108911727

评分

参与人数 1威望 +2 金钱 +3 贡献 +2 收起 理由
liuviking + 2 + 3 + 2 这个必须鼓励!有视频看看效果就更好了。

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2014-8-29 11:46:13 | 显示全部楼层
本帖最后由 wnfc 于 2014-8-29 21:54 编辑

语音控制的智能小车测试版做好了,没有改单片机控制程序,安卓上位机做了线程sleep延迟时间设置,并增加了一些语音控制命令。列表如下:
上 下 左 右 - 控制前进后退、原地左转右转
慢 中 快 - 控制指令延迟时间的长短
连 - 无延迟连续控制
停 - 停车

下面是测试视频部分,目前还存在两个问题,一个是语音指令多了模糊处理难度加大,识别速度稍有点慢。
另外就是外界杂音干扰,如果接好些的话筒估计效果会好很多



回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2014-8-26 16:00:15 | 显示全部楼层
本帖最后由 wnfc 于 2014-8-26 16:08 编辑

代码运行要先装语音搜索,注意手机安卓版本不要低于4.1

语音识别的时候录音速度不要太快,尽量用标准的普通话(好像小孩子的普通话总是报听不清楚),源代码测试例子是每次只说一个字,实际字越多越好识别


安卓离线语音文本测试.zip

448.04 KB, 阅读权限: 10, 下载次数: 122, 下载积分: 金钱 -1

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-26 16:04:13 | 显示全部楼层
  1. 主功能的部分实现代码:
  2. public class MainActivity extends Activity {

  3.                
  4.         protected static final int RESULT_SPEECH = 1;

  5.         private ImageButton btnSpeak;
  6.         private TextView txtText;
  7.         public static  int status=0;    //识别结束状态


  8.         protected void speech_send(){
  9.                 Intent intent = new Intent(
  10.                                 RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

  11.                 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US"); //加载离线语音包,以默认安装包为准
  12.                
  13.                
  14.                 try {
  15.                         startActivityForResult(intent, RESULT_SPEECH);
  16.                         //txtText.setText("");
  17.                        
  18.                 } catch (ActivityNotFoundException a) {
  19.                         Toast t = Toast.makeText(getApplicationContext(),
  20.                                         "Ops! Your device doesn't support Speech to Text",
  21.                                         Toast.LENGTH_SHORT);
  22.                         t.show();
  23.                         }
  24.         }
  25.        
  26.         @Override
  27.         public void onCreate(Bundle savedInstanceState) {
  28.                 super.onCreate(savedInstanceState);
  29.                 setContentView(R.layout.activity_main);

  30.                 txtText = (TextView) findViewById(R.id.txtText);

  31.                 btnSpeak = (ImageButton) findViewById(R.id.btnSpeak);

  32.                 btnSpeak.setOnClickListener(new View.OnClickListener() {

  33.                         @Override
  34.                         public void onClick(View v) {           
  35.                                 speech_send();                               
  36.                         }
  37.                 });

  38.         }

  39.         @Override
  40.         public boolean onCreateOptionsMenu(Menu menu) {
  41.                 getMenuInflater().inflate(R.menu.activity_main, menu);
  42.                 return true;
  43.         }

  44.         @Override
  45.         protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  46.                 super.onActivityResult(requestCode, resultCode, data);

  47.                
  48.                 switch (requestCode) {
  49.                 case RESULT_SPEECH: {
  50.                         if (resultCode == RESULT_OK && null != data) {

  51.                                 ArrayList<String> text = data
  52.                                                 .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
  53.                 String str1= text.get(0);
  54.                 String str2 = PinYin.getPinYin(str1);     //汉字转拼音
  55.                 if(str2.indexOf("lao")>-1||str2.contains("3")||str2.indexOf("sha")>-1  
  56.                                 ||str2.indexOf("ang")>-1||str2.indexOf("an")>-1){         //自定义拼音字母模糊匹配
  57.                         str2="上";        
  58.                 }
  59.                 if(str2.contains("x")||str2.indexOf("ia")>-1){
  60.                     str2="下";
  61.                 }
  62.                 if( str2=="o" || str2.indexOf("siwa")>-1||str2.contains("z")
  63.                                 ||str2.indexOf("uo")>-1 ||str2.indexOf("wo")>-1){
  64.                     str2="左";
  65.                 }
  66.                 if(str2.contains("y")||str2.indexOf("iu")>-1||str2.indexOf("ou")>-1
  67.                                 ||str2.contains("1")){
  68.                     str2="右";
  69.                 }
  70.                                 txtText.setText(str2);
  71.                                 status=1;
  72.                                
  73.                         }
  74.                         break;
  75.                 }

  76.                 }               
  77.                
  78.                 if(status==1){          //重复语音识别
  79.                         speech_send();
  80.                         status=0;       
  81.                 }
  82.         }
  83. }
复制代码

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-26 20:02:53 | 显示全部楼层
本帖最后由 wnfc 于 2014-8-26 20:14 编辑

演示视频稍晚传上来



回复 支持 反对

使用道具 举报

发表于 2014-8-27 14:15:27 | 显示全部楼层
顶起,lz要开辟新大陆。。。
回复 支持 反对

使用道具 举报

发表于 2014-8-30 09:45:56 | 显示全部楼层
我们当时做的也是这个效果,发出前进指令后,如果要让他停下来,极有可能还没有执行停止指令就撞墙了,感觉实用性不强。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-30 14:53:40 | 显示全部楼层
用语音控制小车运动只是演示一下功能,实时操作肯定不如手玩遥控赛车了。这不是语音控制的强项,它主要是提供一种不需要手动操作的辅助控制,通过简短语音指令组合就可以完成手动的一系列操作。就像我们现在开车不方便手持接听需要蓝牙耳机通话一样,在一些无法用手完成的场合用语音替代。另外,语音控制往往还要配合其他手段如智能避障跟踪等,才能体现出真正的AI

下一个计划打算加上避障巡线等功能,做个语音控制汽车入库的Demo
回复 支持 反对

使用道具 举报

发表于 2014-9-7 12:35:58 来自手机 | 显示全部楼层
很不错哟,和我的想法很吻合,祝楼主开辟更多的功能出来
回复 支持 反对

使用道具 举报

发表于 2014-11-2 22:31:21 | 显示全部楼层
很不错的想法,顶起
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-4-29 15:08 , Processed in 1.087468 second(s), 24 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表