语音识别的两个方法

通过微软的SAPI,不仅仅可以实现语音合成TTS,同样可以实现语音识别SR。下面我们就介绍并贴出相关代码。主要有两种方式:

1、使用COM组件技术,不管是C++,C#,Delphi都能玩的转,开发出来的东西在XP和WIN7都能跑。(注意要引入系统组件SpeechLib,XP要安装识别引擎)

2、使用WIN7的windows api,其实最终还是调用了SAPI,所以开发出来的东西就只能在WIN7上面跑。

其实不管是哪一种,都是调用SAPI,可能后一种代码比较简单。

使用第一种方式,需要注意在COM选项卡里面的Microsoft Speech object library引用

C#代码 public class SpRecognition

{

private staTIc SpRecogniTIon _Instance = null;

private SpeechLib.ISpeechRecoGrammar isrg;

private SpeechLib.SpSharedRecoContextClass ssrContex = null;

public delegate void StringEvent(string str);

public StringEvent SetMessage;

private SpRecogniTIon()

{

ssrContex = new SpSharedRecoContextClass();

isrg = ssrContex.CreateGrammar(1);

SpeechLib._ISpeechRecoContextEvents_RecogniTIonEventHandler recHandle =

new _ISpeechRecoContextEvents_RecognitionEventHandler(ContexRecognition);

ssrContex.Recognition += recHandle;

}

public void BeginRec()

{

isrg.DictationSetState(SpeechRuleState.SGDSActive);

}

public static SpRecognition instance()

{

if (_Instance == null)

_Instance = new SpRecognition();

return _Instance;

}

public void CloseRec()

{

isrg.DictationSetState(SpeechRuleState.SGDSInactive);

}

private void ContexRecognition(int iIndex, object obj, SpeechLib.SpeechRecognitionType type, SpeechLib.ISpeechRecoResult result)

{

if (SetMessage != null)

{

SetMessage(result.PhraseInfo.GetText(0, -1, true));

}

}

}

第二种同样需要引入,不过引入的是Win7中的.NET3.5类库

C# 代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Speech;

using System.Speech.Recognition;

using System.Globalization;

using System.Windows.Forms;

namespace StudyBeta

{

public class SRecognition

{

public SpeechRecognitionEngine recognizer = null;//语音识别引擎

public DictationGrammar dictationGrammar = null; //自然语法

public System.Windows.Forms.Control cDisplay; //显示控件

public SRecognition(string[] fg) //创建关键词语列表

{

CultureInfo myCIintl = new CultureInfo(“en-US”);

foreach (RecognizerInfo config in SpeechRecognitionEngine. InstalledRecognizers())//获取所有语音引擎

{

if (config.Culture.Equals(myCIintl) && config.Id == “MS-1033-80-DESK” )

{

recognizer = new SpeechRecognitionEngine(config);

break;

}//选择美国英语的识别引擎

}

if (recognizer != null)

{

InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎

dictationGrammar = new DictationGrammar();

}

else

{

MessageBox.Show(“创建语音识别失败”);

}

}

private void InitializeSpeechRecognitionEngine(string[] fg)

{

recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备

Grammar customGrammar = CreateCustomGrammar(fg);

//根据关键字数组建立语法

recognizer.UnloadAllGrammars();

recognizer.LoadGrammar(customGrammar);

//加载语法

recognizer.SpeechRecognized += new EventHandler 《SpeechRecognizedEventArgs》(recognizer_SpeechRecognized);

recognizer.SpeechHypothesized += new EventHandler 《SpeechHypothesizedEventArgs》(recognizer_SpeechHypothesized);

}

public void BeginRec(Control tbResult)//关联窗口控件

{

TurnSpeechRecognitionOn();

TurnDictationOn();

cDisplay = tbResult;

}

public void over()//停止语音识别引擎

{

TurnSpeechRecognitionOff();

}

public virtual Grammar CreateCustomGrammar(string[] fg) //创造自定义语法

{

GrammarBuilder grammarBuilder = new GrammarBuilder();

grammarBuilder.Append(new Choices(fg));

return new Grammar(grammarBuilder);

}

private void TurnSpeechRecognitionOn()//启动语音识别函数

{

if (recognizer != null)

{

recognizer.RecognizeAsync(RecognizeMode.Multiple);

//识别模式为连续识别

}

else

{

MessageBox.Show(“创建语音识别失败”);

}

}

private void TurnSpeechRecognitionOff()//关闭语音识别函数

{

if (recognizer != null)

{

recognizer.RecognizeAsyncStop();

TurnDictationOff();

}

else

{

MessageBox.Show(“创建语音识别失败”);

}

}

private void recognizer_SpeechRecognized(object sender, SpeechRecognized EventArgs e)

{

//识别出结果完成的动作,通常把识别结果传给某一个控件

string text = e.Result.Text;

cDisplay.Text = text;

}

private void TurnDictationOn()

{

if (recognizer != null)

{

recognizer.LoadGrammar(dictationGrammar);

//加载自然语法

}

else

{

MessageBox.Show(“创建语音识别失败”);

}

}

private void TurnDictationOff()

{

if (dictationGrammar != null)

{

recognizer.UnloadGrammar(dictationGrammar);

//卸载自然语法

}

else

{

MessageBox.Show(“创建语音识别失败”);

}

}

}

}

语音识别的应用有哪些

语音识别技术应用有哪些?语音识别技术有着非常广泛的应用领域和市场前景。在语音输入控制系统中,它使得人们可以甩掉键盘,通过识别语音中的要求、请求、命令或询问来作出正确的响应,这样既可以克服人工键盘输入速度慢,极易出差错的缺点,又有利于缩短系统的反应时间,使人机交流变得简便易行,比如用于声控语音拨号系统、声控智能玩具、智能家电等领域。

在智能对话查询系统中,人们通过语音命令,可以方便地从远端的数据库系统中查询与提取有关信息,享受自然、友好的数据库检索服务,例如信息网络查询、医疗服务、银行服务等。语音识别技术还可以应用于自动口语翻译,即通过将口语识别技术、机器翻译技术、语音合成技术等相结合,可将一种语言的语音输入翻译为另一种语言的语音输出,实现跨语言交流。

语音识别技术在军事斗争领域里也有着极为重要的应用价值和极广阔的应用空间。一些语音识别技术就是着眼于军事活动而研发,并在军事领域首先应用、首获成效的,军事应用对语音识别系统的识别精度、响应时间、恶劣环境下的顽健性都提出了更高的要求。

目前,语音识别技术已在军事指挥和控制自动化方面得以应用。比如,将语音识别技术应用于航空飞行控制,可快速提高作战效率和减轻飞行员的工作负担,飞行员利用语音输人来代替传统的手动操作和控制各种开关和设备,以及重新改编或排列显示器上的显示信息等,可使飞行员把时间和精力集中于对攻击目标的判断和完成别的操作上来,以便更快获得信息来发挥战术优势。

更多精彩阅读:

语音识别的两个方法_语音识别的应用有哪些相关推荐

  1. 移动3g 手机显示无服务器,3G手机语音识别的两种方法分析 - 全文

    随着DSP技术的进步,计算能力更强.功耗更低和体积更小的DSP已经出现,使3G手机上植入更精确更复杂的自动语音识别(ASR)功能成为可能.目前,基本ASR应用可以分成三大类:1. 语音-文本转换(语音 ...

  2. ZZUOJ 1199 大小关系(拓扑排序,两种方法_判断入度和dfs回路判断)

    1 /* 2 这道题如果按照度为0的节点来判断的时候,将度为0的节点和其相连的节点(度数并减去1) 3 从图中去掉,如果度为0的节点的个数为0个但是图中的节点没有都去掉的 时候那么说明 4 出现了回路 ...

  3. java中跳转页面的两种方法_页面跳转的几种方式

    页面跳转的几种方式: --------------(网络收藏) http头实现页面跳转: out.println(""); content是指跳转的时间间隔,单位为秒 ------ ...

  4. 智能家居中语音识别算法研究_语音识别研究获进展

    中国科学院自动化研究所智能交互团队在环境鲁棒性.轻量级建模.自适应能力以及端到端处理等几个方面进行持续攻关,在语音识别方面获新进展,相关成果将在全球语音学术会议INTERSPEECH2019发表. 现 ...

  5. 语音云识别工具_语音识别工具_web语音识别应用程序的工具 - 云+社区 - 腾讯云...

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 语音识别服务具备识别准确率高.接入便捷.性能稳定等特点. 腾讯云语音识别 ...

  6. 简析三星新专利,语音识别技术的新方法

    (文章来源:半导体投资联盟) 语音识别技术是指通过计算装置的分析来识别或理解如人类发出的语音等的声学信号的技术.近年来随着基于深度学习(deep learning)的机器学习(machine lear ...

  7. 语音识别系统功能_语音识别系统的应用

    语音识别系统功能 对比语音识别技术的两个发展方向,由于基于不同的运算平台,因此具有不同的特点.大词汇量连续语音识别系统一般都是基于PC机平台,而语音识别专用芯片的中心运算处理器则只是一片低功耗.低价位 ...

  8. 在线语音识别引擎及识别方法与流程

    本发明涉及语音识别领域,具体涉及一种在线语音识别引擎及识别方法. 背景技术: 深度学习网络(Deep-Learning Neural Network,DNN)技术的发展,带来了语音识别领域的飞速发展. ...

  9. Win10系统下语音识别聆听功能使用方法

    在windows 10系统中新增了不少功能,这一点是大家都认可的.除此之外windows 10将以往一些辅助功能也搬进了win10,并且做了一些功能的提升!今天小编要给大家将的是关于语言识别功能的使用 ...

最新文章

  1. CSS3的学习--实现瀑布流
  2. 世界上公认最难的十大学科
  3. 15 分钟搭建一个基于XLNET的文本分类模型——keras实战
  4. CS231n课程笔记翻译:图像分类笔记(下)
  5. boost::mpl模块实现eval_if相关的测试程序
  6. linux git删除的文件怎么还原,从Git仓库中恢复已删除的分支、文件或丢失的commit...
  7. Linux使用cmake编译项目,如何使用cmake在linux中构建Qt项目(How to build Qt project in linux with cmake)...
  8. linux文字大小,Qt 字体大小的计算
  9. 用gcc/g++编译运行C/C++程序
  10. java第八章数组上机,上机题目(初级)- 用数组实现记事本(Java)
  11. 【路径规划】基于matlab模拟退火算法求解多车型路径规划问题【含Matlab源码 913期】
  12. bjui—关闭dialog以及当前标签
  13. 目标检测的图像特征提取之(一)HOG特征
  14. 部署asp.net mvc_在ASP.NET 2.0上部署ASP.NET MVC
  15. 自己封装特定的Windows系统镜像
  16. 网络信息安全-U盘病毒编写
  17. 华为mate40pro+和华为p40pro+哪个好
  18. 宜品优享抽奖系统小程序,多方式真是展示抽奖功能
  19. Java小写金额转换大写与金额比对(支持繁体大写金额)
  20. 画出优秀手绘线稿的必备条件,首先要满足和避免这些线条

热门文章

  1. 模型评估【PR|ROC|AUC】
  2. Exception Type: IntegrityError 数据完整性错误
  3. ngRoute (angular-route.js) 和 ui-router (angular-ui-router.js) 模块有什么不同呢?
  4. (转)C# Color类图示
  5. UNIX环境高级编程——创建与打开IPC通道
  6. [导入]Silverlight 的 Data Bindings:Silverlight 與 ASP.NET Ajax
  7. 关于重构中的“函数尽量小”的负作用
  8. Bailian3245 空调排名【水题】
  9. Bailian4019 黑色星期五【模拟】
  10. CCF201809-2 买菜(100分)【序列处理+差分】