异常简单的语音识别入门之C#版

用语音识别最麻烦的就是训练计算机适应你的口音。但是,如果用模板匹配的方式基本上普通话基本标准就可以正常识别。模板匹配的另一个好处就是精心设计的语法文件使得程序不会识别出无效的命令。例如你希望用嘴巴控制四轴上升下降那么程序就应该对你说的“左转”没有反应。

1.
首先添加语音识别库的引用:

在代码里添加命名空间:
usingSystem.Speech.Recognition;

2.
无论操作系统是否系统启动语音识别程序,你都希望你的命令被你希望的程序而不是其他程序响应,例如你有一个命令叫“开始”,那么希望的结果是你的程序执行一个叫“开始”的过程而不是操作系统自动打开“开始菜单”。因此需要创建一个识别引擎的新实例而不是和系统共用一个。
创建一个System.Speech.Recognition.SpeechRecognitionEngine对象吧。

3.
来畅想下我们这个语音识别程序能做什么,简单点,我说“选择红色”那么窗体的背景就应该变红,“选择绿色”那么窗体的背景就应该变绿。恩,就这样,其他颜色视为无效命令程序无响应。
那么命令就是“选择(红色/绿色)”这样的结构,在这个句子中,“选择”是固定的,“红色”和“绿色”是可选择的,这几个词汇的组合就被称为语法,用System.Speech.Recognition.Grammar来表示。词汇的选择用System.Speech.Recognition.Choices来表示。
创建语法推荐用:System.Speech.Recognition.GrammarBuilder
=========================================================
GB.Append("选择");
GB.Append(new Choices(new string[] { "红色", "绿色" }));
Grammar G = new Grammar(GB);
=========================================================
OK,上面的代码就创建了“选择(红色/绿色)”的语法。
在这条命令被识别后会触发System.Speech.Recognition.Grammar的SpeechRecognized事件。添加一个事件处理程序,在程序中处理这条命令吧(执行命令)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace 语音识别测试 {
        public partial class Form1 : Form {
                privateSpeechRecognitionEngine SRE = new SpeechRecognitionEngine();

                public Form1() {
                        InitializeComponent();
                }

                private voidForm1_Load(object sender, EventArgs e) {
                        SRE.SetInputToDefaultAudioDe vice();         <=======默认的语音输入设备,你可以设定为去识别一个WAV文件。
                        GrammarBuilder GB = new GrammarBuilder();
                        GB.Append("选择");
                        GB.Append(new Choices(new string[] { "红色", "绿色" }));
                        Grammar G= new Grammar(GB);
                        G.SpeechRecognized += newEventHandler<SpeechRecognizedEventArg s>(G_SpeechRecognized);
                        SRE.LoadGrammar(G);
                        SRE.RecognizeAsync(RecognizeMode.Multiple);<=======异步调用识别引擎,允许多次识别(否则程序只响应你的一句话)
                }

                voidG_SpeechRecognized(object sender, SpeechRecognizedEventArg s e){
                        Text =e.Result.Text;
                        switch(e.Result.Text) {
                                case "选择红色":
                                        BackColor = Color.Red;
                                        break;
                                case "选择绿色":
                                        BackColor =Color.Green;
                                        break;
                        }
                }
        }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值