Jeff2 发表于 2019-6-20 17:14:35

【脑洞大赛】语音识别模拟键盘设备

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

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

本帖最后由 Jeff2 于 2019-9-5 14:01 编辑

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


我这边经过修改后代码如下
#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("1111");
      break;
    case 14:
      ;
      break;
    case 15:
      Keyboard.press(KEY_RETURN);
      break;
    default:
      break;
      delayMicroseconds(20000);
}
Keyboard.releaseAll();
Keyboard.end();//结束键盘通讯
}

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
http://www.waveshare.net/study/data/attachment/portal/201504/27/163547ml3sv360hzi6cich.jpg
连接 LD3320 语音模块到arduino leonardo
3.3V -- VCC
GND -- GND
MISO -- D12
MOSI -- D11
SCK -- D13
NSS -- D4
RST -- D9
IRQ -- D2
WR -- GND

先做个简单测试
#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



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

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

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

更新下实物图

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

你这boom表怕不是要boom,哈哈

Jeff2 发表于 2019-9-5 15:06:57

https://v.youku.com/v_show/id_XNDM0OTYzNzI3Mg==.html?spm=a2h3j.8428770.3416059.1

上视频
页: [1]
查看完整版本: 【脑洞大赛】语音识别模拟键盘设备