zoukankan      html  css  js  c++  java
  • 语音识别的两种方法(转)

    通过微软的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#代码  收藏代码
    1. public class SpRecognition  
    2.     {  
    3.         private static SpRecognition _Instance = null;  
    4.         private SpeechLib.ISpeechRecoGrammar isrg;  
    5.         private SpeechLib.SpSharedRecoContextClass ssrContex = null;  
    6.   
    7.         public delegate void StringEvent(string str);  
    8.         public StringEvent SetMessage;  
    9.   
    10.         private SpRecognition()  
    11.         {  
    12.             ssrContex = new SpSharedRecoContextClass();  
    13.             isrg = ssrContex.CreateGrammar(1);  
    14.             SpeechLib._ISpeechRecoContextEvents_RecognitionEventHandler recHandle =  
    15.                  new _ISpeechRecoContextEvents_RecognitionEventHandler(ContexRecognition);  
    16.             ssrContex.Recognition += recHandle;  
    17.         }  
    18.         public void BeginRec()  
    19.         {  
    20.             isrg.DictationSetState(SpeechRuleState.SGDSActive);  
    21.         }  
    22.         public static SpRecognition instance()  
    23.         {  
    24.             if (_Instance == null)  
    25.                 _Instance = new SpRecognition();  
    26.             return _Instance;  
    27.         }  
    28.         public void CloseRec()  
    29.         {  
    30.             isrg.DictationSetState(SpeechRuleState.SGDSInactive);  
    31.         }  
    32.         private void ContexRecognition(int iIndex, object obj, SpeechLib.SpeechRecognitionType type, SpeechLib.ISpeechRecoResult result)  
    33.         {  
    34.             if (SetMessage != null)  
    35.             {  
    36.                 SetMessage(result.PhraseInfo.GetText(0, -1, true));  
    37.             }  
    38.         }  
    39.     }  


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

    C# 代码  收藏代码
      1. using System;  
      2. using System.Collections.Generic;  
      3. using System.Linq;  
      4. using System.Text;  
      5. using System.Speech;  
      6. using System.Speech.Recognition;  
      7. using System.Globalization;  
      8. using System.Windows.Forms;  
      9.   
      10. namespace StudyBeta  
      11. {  
      12.     public class SRecognition  
      13.     {  
      14.         public SpeechRecognitionEngine recognizer = null;//语音识别引擎  
      15.         public DictationGrammar dictationGrammar = null; //自然语法  
      16.         public System.Windows.Forms.Control cDisplay; //显示控件  
      17.   
      18.         public SRecognition(string[] fg) //创建关键词语列表  
      19.         {  
      20.             CultureInfo myCIintl = new CultureInfo("en-US");  
      21.             foreach (RecognizerInfo config in SpeechRecognitionEngine. InstalledRecognizers())//获取所有语音引擎  
      22.             {  
      23.         if (config.Culture.Equals(myCIintl) && config.Id == "MS-1033-80-DESK" )  
      24.                 {  
      25.                     recognizer = new SpeechRecognitionEngine(config);  
      26.                     break;  
      27.                 }//选择美国英语的识别引擎  
      28.             }  
      29.             if (recognizer != null)  
      30.             {  
      31.                 InitializeSpeechRecognitionEngine(fg);//初始化语音识别引擎  
      32.                 dictationGrammar = new DictationGrammar();  
      33.             }  
      34.             else  
      35.             {  
      36.                 MessageBox.Show("创建语音识别失败");  
      37.             }  
      38.         }  
      39.         private void InitializeSpeechRecognitionEngine(string[] fg)  
      40.         {  
      41.             recognizer.SetInputToDefaultAudioDevice();//选择默认的音频输入设备  
      42.             Grammar customGrammar = CreateCustomGrammar(fg);  
      43.             //根据关键字数组建立语法  
      44.             recognizer.UnloadAllGrammars();  
      45.             recognizer.LoadGrammar(customGrammar);  
      46.             //加载语法  
      47. recognizer.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);  
      48. recognizer.SpeechHypothesized += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);  
      49.         }  
      50.         public void BeginRec(Control tbResult)//关联窗口控件  
      51.         {  
      52.             TurnSpeechRecognitionOn();  
      53.             TurnDictationOn();  
      54.             cDisplay = tbResult;  
      55.         }  
      56.         public void over()//停止语音识别引擎  
      57.         {  
      58.             TurnSpeechRecognitionOff();  
      59.         }  
      60.         public virtual Grammar CreateCustomGrammar(string[] fg) //创造自定义语法  
      61.         {  
      62.             GrammarBuilder grammarBuilder = new GrammarBuilder();  
      63.             grammarBuilder.Append(new Choices(fg));  
      64.             return new Grammar(grammarBuilder);  
      65.         }  
      66.         private void TurnSpeechRecognitionOn()//启动语音识别函数  
      67.         {  
      68.             if (recognizer != null)  
      69.             {  
      70.                 recognizer.RecognizeAsync(RecognizeMode.Multiple);   
      71. //识别模式为连续识别  
      72.             }  
      73.             else  
      74.             {  
      75.                 MessageBox.Show("创建语音识别失败");  
      76.             }  
      77.         }  
      78.         private void TurnSpeechRecognitionOff()//关闭语音识别函数  
      79.         {  
      80.             if (recognizer != null)  
      81.             {  
      82.                 recognizer.RecognizeAsyncStop();  
      83.                 TurnDictationOff();  
      84.             }  
      85.             else  
      86.             {  
      87.                 MessageBox.Show("创建语音识别失败");  
      88.             }  
      89.         }  
      90. private void recognizer_SpeechRecognized(object sender, SpeechRecognized EventArgs e)  
      91.         {  
      92.             //识别出结果完成的动作,通常把识别结果传给某一个控件  
      93.             string text = e.Result.Text;  
      94.             cDisplay.Text = text;  
      95.         }  
      96.         private void TurnDictationOn()  
      97.         {  
      98.             if (recognizer != null)  
      99.             {  
      100.                 recognizer.LoadGrammar(dictationGrammar);  
      101.                 //加载自然语法  
      102.             }  
      103.             else  
      104.             {  
      105.                 MessageBox.Show("创建语音识别失败");  
      106.             }  
      107.         }  
      108.         private void TurnDictationOff()  
      109.         {  
      110.             if (dictationGrammar != null)  
      111.             {  
      112.                 recognizer.UnloadGrammar(dictationGrammar);  
      113.                 //卸载自然语法  
      114.             }  
      115.             else  
      116.             {  
      117.                 MessageBox.Show("创建语音识别失败");  
      118.             }  
      119.         }  
      120.     }  
      121. }  
  • 相关阅读:
    NumPy 位运算
    NumPy 数组迭代
    NumPy 广播
    NumPy 基于数值区间创建数组
    NumPy 数组切片
    NumPy 基于已有数据创建数组
    NumPy 数组创建
    NumPy 数据类型
    NumPy ndarray
    区块链技术学习指引
  • 原文地址:https://www.cnblogs.com/wandd/p/3088021.html
Copyright © 2011-2022 走看看