1. 程式人生 > >使用C#進行語音識別(Speech-to-Text)

使用C#進行語音識別(Speech-to-Text)

        本文大體的介紹怎樣通過使用C#和Speech SDK5.1來進行語音識別,通過微軟提供的Speech SDK你也可以使用其他的語言進行語音識別的開發,目前最新的Release版本是5.1。

介紹 

        聲音的交流是我們平時最常見的交流方式,但是在人與計算機之間似乎就不那麼一樣的常見了,我想原因是如果一個應用程式僅僅用聲音來控制的話,呵呵,那要是人撒謊計算機就慘了。雖然使用聲音來作為應用程式的錄入不是什麼新東西了,但是目前採用語音錄入的應用程式還不是那麼的常見,換句話說,語音的開發仍然有很大的潛力和空間。

語音識別引擎       

        語音識別引擎有兩種不同的識別引擎,一種叫Shared識別引擎,另外一種叫做Inpro識別引擎,相信大家通過名字也能大概猜到了他們的不同了吧!Shared識別引擎能夠被多個應用程式共享使用,通常這個語音引擎用於多個應用程式需要語音輸入的時候。雖然Inpro識別引擎不像Shared引擎那樣被多個Application共享但是在一個大型的在獨立的伺服器上執行的語音系統中我們推薦使用它。

        語音識別引擎通過使用事件的方式和應用程式產生互動,在許多的事件中最重要的是recognition event 和 hypothesis event,這兩個事件在語音識別引擎在recognition或者hypothesis識別到時觸發。 下面的程式碼說明了怎樣去簽名這些事件:

// 得到一個RecoContext例項.
   objRecoContext = new SpeechLib.SpSharedRecoContext();
            // 指派一個事件給Hypothesis Event(中間層暫定的識別,即,初級的,臨時的識別).
   objRecoContext.Hypothesis += new _ISpeechRecoContextEvents_HypothesisEventHandler(Hypo_Event);
   // 指派一個事件給語音識別.
   objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(Reco_Event);
   //建立grammer例項.
   grammar = objRecoContext.CreateGrammar(0);
   
   label3.Text = "Speak Out one of the follwoing./r/n1. New 2. Open 3. Close 4. Exit/r/n5. Cut 6. Copy 7. Paste 8. Delete";

   //啟用選單命令.   
   menuRule = grammar.Rules.Add("MenuCommands",SpeechRuleAttributes.SRATopLevel|SpeechRuleAttributes.SRADynamic,1);

   object      PropValue = "";

menuRule.InitialState.AddWordTransition(null,"Paste"," ",SpeechGrammarWordType.SGLexical,"Paste",1, ref PropValue, 1.0F );
   menuRule.InitialState.AddWordTransition(null,"Delete"," ",SpeechGrammarWordType.SGLexical,"Delete",2, ref PropValue, 1.0F );

   grammar.Rules.Commit();
   grammar.CmdSetRuleState("MenuCommands", SpeechRuleState.SGDSActive);

下面顯示了主要的執行視窗

                示例下載(檔案提取碼: 1176475894201735)

摘要:這篇文章對使用Speech SDK 5.1語音識別作了簡單的介紹。