博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(四)语音识别测试案例
阅读量:4937 次
发布时间:2019-06-11

本文共 3959 字,大约阅读时间需要 13 分钟。

     基于.NET的语音合成或语音识别应用相对都比较简单,基础类库已经帮我们做了大量的工作。我们只需要关注我们的需求即可。所以这里也是用一个最简单的案例来演示基于.NET的语音识别。Windows系统内置已经集成了语音识别引擎。该引擎没有独立的安装包,其包含在了系统语言包中。通常情况下简体中文的系统仅包括了中文识别,如果安装了额外的语言包,那么相对应也会有额外的语音识别引擎,所以我们在开发中尽可能指明当前使用的语音识别引擎。

首先创建一个窗体程序,添加System.Speech.Recognition引用,程序界面布局如下:

程序代码如下:

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;using System.Globalization;namespace Recognition{    public partial class FrmMain : Form    {       private SpeechRecognitionEngine recognizer;  //语音识别引擎        private string engineId = "MS-2052-80-DESK"; //Win7下语音识别引擎编号        private string currentCulture = "zh-CN"; //语言        public FrmMain()        {            InitializeComponent();        }        private void FrmMain_Load(object sender, EventArgs e)        {            /*             * 如果系统存在多个识别引擎,则初始化指定编号和语言的引擎             * 关于其它引擎的编号可以从SpeechRecognitionEngine.InstalledRecognizers()中获取             */            CultureInfo cultureInfo = new CultureInfo(currentCulture); //当前地区文化            foreach (RecognizerInfo recognizerInfo in SpeechRecognitionEngine.InstalledRecognizers())            {                if (recognizerInfo.Culture.Equals(cultureInfo) && recognizerInfo.Id == engineId)                {                    recognizer = new SpeechRecognitionEngine(recognizerInfo);                    recognizer.SpeechRecognized += new EventHandler
(Recognizer_SpeechRecognized); break; } } //卸载所有语法 recognizer.UnloadAllGrammars(); //加载自然语法 DictationGrammar dictationGrammar = new DictationGrammar(); recognizer.LoadGrammar(dictationGrammar); } ///
/// 开始聆听 /// private void btnStart_Click(object sender, EventArgs e) { //设置语音输入设备(使用系统默认输入设备) recognizer.SetInputToDefaultAudioDevice(); //启用连续语音识别模式 recognizer.RecognizeAsync(RecognizeMode.Multiple); this.btnStart.Text = "聆听中..."; this.btnStart.Enabled = false; this.btnStop.Enabled = true; } ///
/// 停止聆听 /// private void btnStop_Click(object sender, EventArgs e) { recognizer.RecognizeAsyncStop(); this.btnStart.Text = "开始聆听"; this.btnStart.Enabled = true; this.btnStop.Enabled = false; } ///
/// 连续识别完成时引发 /// private void Recognizer_SpeechRecognized(Object sender, SpeechRecognizedEventArgs e) { this.rtxtResult.Text = e.Result.Text; } }}

在初始化引擎时,需要指明当前使用的识别引擎。如何查看系统安装的语音识别引擎的编号呢?可以使用SpeechRecognitionEngine.InstalledRecognizers()这个静态方法获取到系统安装的所有引擎。使用该方法预先了解下系统识别的引擎的的编号和语言。

根据已经了解的信息可以预先定义要使用的识别引擎如下:

private SpeechRecognitionEngine recognizer;  //语音识别引擎private string engineId = "MS-2052-80-DESK"; //Win7下语音识别引擎编号private string currentCulture = "zh-CN"; //语言

再根据上述信息初始化识别引擎:

CultureInfo cultureInfo = new CultureInfo(currentCulture); //当前地区文化foreach (RecognizerInfo recognizerInfo in SpeechRecognitionEngine.InstalledRecognizers()){    if (recognizerInfo.Culture.Equals(cultureInfo) && recognizerInfo.Id == engineId)    {        recognizer = new SpeechRecognitionEngine(recognizerInfo);        recognizer.SpeechRecognized += new EventHandler
(Recognizer_SpeechRecognized); break; }}

语音识别引擎比较重要的就是识别语法。一般分两种:一种是自然语法,一种是自定义语法。自然语法是语音识别引擎工作的基础语法。如果不加载自然语法识别准确度将会很低。而自定义语法,则是我们针对特定的需求或项目来编排用于提高识别精度的。上述案例仅仅使用的自然语法来进行识别。

//卸载所有语法recognizer.UnloadAllGrammars();//加载自然语法DictationGrammar dictationGrammar = new DictationGrammar();recognizer.LoadGrammar(dictationGrammar);

这里先卸载了所有语法,为了避免加载重复的语法。

打开并测试麦克风可用,运行上述代码,并尝试对着麦克风说话,结果如下:

TIPS:可以结合之前的语音合成来做一个简单的问答机器人程序。

上述案例源码:

转载于:https://www.cnblogs.com/UltimateAvalon/p/4622010.html

你可能感兴趣的文章
细说sqlserver索引及SQL性能优化原则
查看>>
一般数据库增量数据处理和数据仓库增量数据处理的几种策略
查看>>
离散数学课后作业
查看>>
centos6.5适用的国内yum源:网易、搜狐
查看>>
[winograd]winograd算法在卷积中的应用
查看>>
视频直播技术(三):低延时直播经验总结
查看>>
Application failed to start because it could not find or load the QT platform plugin “windows”
查看>>
python合并多表或两表数据
查看>>
分享一下伪装刚学的
查看>>
《sqlite权威指南》读书笔记 (一)
查看>>
NHibernate生成实体类、xml映射文件
查看>>
《把时间当作朋友》读书笔记(三)-- 醒悟
查看>>
使用pabot并行执行robotframework用例
查看>>
mobile web页面调试方法
查看>>
JavaWeb【二、Tomcat安装】
查看>>
[Testing] Config jest to test Javascript Application -- Part 2
查看>>
【Git】安装配置
查看>>
团队作业一
查看>>
BZOJ2286: [Sdoi2011]消耗战(虚树/树形DP)
查看>>
Linux进程通信 之 信号灯(semphore)(System V && POSIX)
查看>>