查看: 320|回复: 7

[2019参赛作品] 【脑洞大赛】语音识别模拟键盘设备

[复制链接]
项目背景

之前和朋友做AI训练街霸游戏,想加入人工语音识别输出特定技能或者连环招式,以增加游戏的趣味性。也联想到目前某些游戏按键技能太多,经常操作跟不上思想。于是就想着开发一个 输出全靠吼的硬件。说盘就盘。
WechatIMG64.jpeg

Jeff2  见习技师
 楼主|

发表于 2019-6-30 19:48:40

上面代码测试
开灯 口令能点亮LED说明LD3320通了
接下研究下KEYBORAD代码
arduino leonardo可以直接用arduino的keyboard实例

WechatIMG65.jpeg
我这边经过修改后代码如下
[C] 纯文本查看 复制代码
#include <Keyboard.h>
#include <ld3320.h>
#include <PinMap.h>
VoiceRecognition Voice;  //声明一个语音识别对象
bool lastCapsLockState;

void setup() {
  // initialize control over the keyboard:
  Keyboard.begin();
  TIMSK0 = 0;
  Voice.init();                               //初始化VoiceRecognition模块
  //add fun
  Voice.noiseTime(0x10);
  Voice.voiceMaxLength(0x14);
  Voice.micVol(0x55);

  Voice.addCommand("zhuo mian", 0);            //添加指令,参数(指令内容,指令标签(可重复))
  Voice.addCommand("hong", 0);
  Voice.addCommand("tui chu", 1);
  Voice.addCommand("xia ye", 2);
  Voice.addCommand("shang qu", 3);
  Voice.addCommand("di bu", 4);
  Voice.addCommand("zui shang", 5);
  Voice.addCommand("liu lang qi", 6);
  Voice.addCommand("guan bi", 7);
  Voice.addCommand("xian shi", 8);
  Voice.addCommand("qie huan", 9);
  Voice.addCommand("shui jiao", 10);
  Voice.addCommand("fang da", 11);
  Voice.addCommand("bi ge", 11);
  Voice.addCommand("suo xiao", 12);
  Voice.addCommand("si mou", 12);
  Voice.addCommand("mi ma", 13);
  Voice.addCommand("en", 14);
  Voice.addCommand("oh", 14);
  Voice.addCommand("pi", 14);
  Voice.addCommand("kiu", 14);
  Voice.addCommand("wu", 14);
  Voice.addCommand("a", 14);
  Voice.addCommand("ei", 14);
  Voice.addCommand("si", 14);
  Voice.addCommand("jie suo", 15);
  Voice.start();//开始识别
}

void loop() {
  switch (Voice.read())                         //判断识别
  {
    case 0:                                     //若是指令“ei”
      Keyboard.press(KEY_LEFT_GUI);//左win
      Keyboard.press('d');
      break;
    case 1:                                     //若是指令“B”
      Keyboard.press(KEY_ESC);
      //Keyboard.print("You pressed the button ");
      //    Keyboard.print(counter);
      //    Keyboard.println(" times.");
      break;
    case 2:
      Keyboard.press(KEY_PAGE_DOWN);
      break;
    case 3:
      Keyboard.press(KEY_PAGE_UP);
      break;
    case 4:
      Keyboard.press(KEY_END);
      break;
    case 5:
      Keyboard.press(KEY_HOME);
      break;
    case 6:
      Keyboard.press(KEY_LEFT_GUI);//左alt
      Keyboard.press('2');
      break;
    case 7:
      Keyboard.press(KEY_LEFT_ALT);
      Keyboard.press(KEY_F4);
      break;
    case 8:
      Keyboard.press('f');
      break;
    case 9:
      Keyboard.press(KEY_LEFT_ALT);//左alt
      Keyboard.press(KEY_TAB);
      break;
    case 10:
      Keyboard.press(KEY_LEFT_GUI);//左win
      delay(500);
      Keyboard.press('l');
      Keyboard.release(KEY_LEFT_GUI);
      Keyboard.release('l');
      break;
    case 11:
      Keyboard.press(KEY_RIGHT_CTRL);
      Keyboard.print('+');
      break;
    case 12:
      Keyboard.press(KEY_RIGHT_CTRL);
      Keyboard.print('-');
      break;
    case 13:
      Keyboard.println("12312311");
      break;
    case 14:
      ;
      break;
    case 15:
      Keyboard.press(KEY_RETURN);
      break;
    default:
      break;
      delayMicroseconds(20000);
  }
  Keyboard.releaseAll();
  Keyboard.end();//结束键盘通讯
}
回复 支持 1 反对 0

使用道具 举报

LYon  高级技师

发表于 2019-6-21 10:19:06

很好的想法,不过以有没有考虑以现有的技术来看,语音识别的响应速度是个大问题,用于智能家居尚可接受,用于格斗游戏嘛,你这不是在提醒对手嘛,只怕是大招还没来及放出来人早就已经隔屁了...
回复 支持 反对

使用道具 举报

Jeff2  见习技师
 楼主|

发表于 2019-6-21 16:51:17

本帖最后由 Jeff2 于 2019-6-21 17:47 编辑
LYon 发表于 2019-6-21 10:19
很好的想法,不过以有没有考虑以现有的技术来看,语音识别的响应速度是个大问题,用于智能家居尚可接受,用 ...

哈哈哈,智能家居也顺便做了。游戏主要是远程竞技。喊出来更有意思
回复 支持 反对

使用道具 举报

Jeff2  见习技师
 楼主|

发表于 2019-6-30 19:44:05

来更新下
----------------------------------------------0630
boom表
LD3320
arduino leonardo
杜邦线
面包板

软件要求:
先下载ld3320 库文件,并复制到arduino的libraries文件夹下。地址
http://www.waveshare.net/study/portal.php?mod=attachment&id=37

连接 LD3320 语音模块到arduino leonardo
3.3V -- VCC
GND -- GND
MISO -- D12
MOSI -- D11
SCK -- D13
NSS -- D4
RST -- D9
IRQ -- D2
WR -- GND

先做个简单测试
[C] 纯文本查看 复制代码
#include <ld3320.h>

VoiceRecognition Voice;                         //声明一个语音识别对象

#define Led 8                                   //定义LED控制引脚

void setup() 
{
    pinMode(Led,OUTPUT);                        //初始化LED引脚为输出模式
    digitalWrite(Led,LOW);                      //LED引脚低电平
    
    Voice.init();                               //初始化VoiceRecognition模块   
    Voice.addCommand("kai deng",0);             //添加指令,参数(指令内容,指令标签(可重复))
    Voice.addCommand("guan deng",1);            //添加指令,参数(指令内容,指令标签(可重复))
    Voice.start();//开始识别
}
void loop() {
  switch(Voice.read())                          //判断识别
  {
    case 0:                                     //若是指令“kai deng”
	digitalWrite(Led,HIGH);                 //点亮LED
        break;
    case 1:                                     //若是指令“guan deng”
	digitalWrite(Led,LOW);//熄灭LED
        break;   
    default:
        break;
  }
}



回复 支持 反对

使用道具 举报

Jeff2  见习技师
 楼主|

发表于 2019-6-30 19:51:40

201908221506371727.png

以上代码烧录arduino后就可以通过麦克风语音控制arduino成虚拟键盘,真正实现硬件黑客。
回复 支持 反对

使用道具 举报

Jeff2  见习技师
 楼主|

发表于 2019-6-30 20:42:58

本帖最后由 Jeff2 于 2019-7-5 14:08 编辑

成品

成品
更新下实物图
回复 支持 反对

使用道具 举报

pATAq  版主

发表于 2019-7-18 00:39:55

你这boom表怕不是要boom,哈哈
回复 支持 反对

使用道具 举报

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
关于楼主
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2019 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail