搜索
bottom↓
回复: 20

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

[复制链接]

出0入0汤圆

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

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

在代码里添加命名空间:
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;
                        }
                }
        }
}


是不是很简单?当然语法文件可以复杂点,例如“设定[1/2/3/4]号电机输出[1%/2%/3%.........99%/100%]”

出0入0汤圆

发表于 2008-6-7 15:02:07 | 显示全部楼层
挺好玩的

出0入0汤圆

发表于 2008-6-7 16:35:45 | 显示全部楼层
非常不错!
一直使用c#,但还不知道有这个强功能呢!
是.net3.0以上版本的吧

出0入22汤圆

发表于 2008-6-7 16:40:42 | 显示全部楼层
好玩。

出0入0汤圆

发表于 2008-6-7 20:12:07 | 显示全部楼层
不错

出0入0汤圆

发表于 2008-7-31 00:18:10 | 显示全部楼层
个人见地:现在的计算机语音和图像识别都还只能有限使用,试想,在一个机器声嘈杂的车间,怎么使用语音识别,但是我们可以识别谁在说话,说什么,这就是人和电脑的差异。微软提供的语音识别库,算是走出了第一步吧,估计这方面的大牛还是属于IBM这类公司,记得IBM是第一个提供手写识别的。

出0入0汤圆

发表于 2008-7-31 01:22:31 | 显示全部楼层
在xp下面,好像这个语音识别库就只到了5.1。

出0入0汤圆

发表于 2008-7-31 09:43:29 | 显示全部楼层
不错,试一下!

出0入0汤圆

发表于 2008-11-13 19:46:38 | 显示全部楼层
请问我的程序在这句报错是什么问题啊?

SRE.SetInputToDefaultAudioDevice();

值不在预期的范围内

出0入0汤圆

发表于 2009-12-12 22:54:22 | 显示全部楼层
在 XP 系统上无法运行
提示:
在此系统上语音识别不可用。找不到 SAPI 和语音识别引擎。

出0入134汤圆

发表于 2009-12-13 03:22:17 | 显示全部楼层
刚装VS2008,可以试下

出0入0汤圆

发表于 2010-1-25 19:23:15 | 显示全部楼层
我的也和8楼同样的错误

出0入0汤圆

 楼主| 发表于 2010-1-25 19:38:17 | 显示全部楼层
库 版本 XP不支持 换 7 or V

出0入0汤圆

发表于 2010-1-25 21:08:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-5-6 15:36:30 | 显示全部楼层
Mark 语音识别

出0入0汤圆

发表于 2011-4-28 23:50:04 | 显示全部楼层
回复【12楼】linhaimi
-----------------------------------------------------------------------

XP上要安装哪个版本,此软件才能在XP上运行

出0入0汤圆

发表于 2012-2-4 01:25:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-9-2 21:50:43 | 显示全部楼层
我的怎么没有Speech.Recognition?只有SpeechLib

出0入0汤圆

发表于 2016-6-12 01:04:15 | 显示全部楼层
markkkkkkkk

出0入4汤圆

发表于 2018-6-6 20:06:21 来自手机 | 显示全部楼层
还有这功能,好玩。

出0入4汤圆

发表于 2018-6-6 20:06:38 来自手机 | 显示全部楼层
识别率咋样?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 20:53

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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