异常简单的语音识别入门之C#版。
用语音识别最麻烦的就是训练计算机适应你的口音。但是,如果用模板匹配的方式基本上普通话基本标准就可以正常识别。模板匹配的另一个好处就是精心设计的语法文件使得程序不会识别出无效的命令。例如你希望用嘴巴控制四轴上升下降那么程序就应该对你说的“左转”没有反应。1.
首先添加语音识别库的引用:
./bbs_upload/files_10/ourdev_303554.JPG
在代码里添加命名空间:
using System.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 {
private SpeechRecognitionEngine SRE = new SpeechRecognitionEngine();
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
SRE.SetInputToDefaultAudioDevice(); <=======默认的语音输入设备,你可以设定为去识别一个WAV文件。
GrammarBuilder GB = new GrammarBuilder();
GB.Append("选择");
GB.Append(new Choices(new string[] { "红色", "绿色" }));
Grammar G = new Grammar(GB);
G.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(G_SpeechRecognized);
SRE.LoadGrammar(G);
SRE.RecognizeAsync(RecognizeMode.Multiple); <=======异步调用识别引擎,允许多次识别(否则程序只响应你的一句话)
}
void G_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) {
Text = e.Result.Text;
switch (e.Result.Text) {
case "选择红色":
BackColor = Color.Red;
break;
case "选择绿色":
BackColor = Color.Green;
break;
}
}
}
}
./bbs_upload/files_10/ourdev_303574.JPG./bbs_upload/files_10/ourdev_303575.JPG
是不是很简单?当然语法文件可以复杂点,例如“设定号电机输出” 挺好玩的 非常不错!
一直使用c#,但还不知道有这个强功能呢!
是.net3.0以上版本的吧 好玩。 不错 个人见地:现在的计算机语音和图像识别都还只能有限使用,试想,在一个机器声嘈杂的车间,怎么使用语音识别,但是我们可以识别谁在说话,说什么,这就是人和电脑的差异。微软提供的语音识别库,算是走出了第一步吧,估计这方面的大牛还是属于IBM这类公司,记得IBM是第一个提供手写识别的。 在xp下面,好像这个语音识别库就只到了5.1。 不错,试一下! 请问我的程序在这句报错是什么问题啊?
SRE.SetInputToDefaultAudioDevice();
值不在预期的范围内 在 XP 系统上无法运行
提示:
在此系统上语音识别不可用。找不到 SAPI 和语音识别引擎。 刚装VS2008,可以试下 我的也和8楼同样的错误 库 版本 XP不支持 换 7 or V mark Mark 语音识别 回复【12楼】linhaimi
-----------------------------------------------------------------------
XP上要安装哪个版本,此软件才能在XP上运行 mark 我的怎么没有Speech.Recognition?只有SpeechLib
markkkkkkkk 还有这功能,好玩。 识别率咋样?
页:
[1]