最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中調(diào)用SAPI實(shí)現(xiàn)語(yǔ)音識(shí)別的2種方法

 更新時(shí)間:2015年06月04日 17:42:59   投稿:junjie  
這篇文章主要介紹了C#中調(diào)用SAPI實(shí)現(xiàn)語(yǔ)音識(shí)別的2種方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

通過(guò)微軟的SAPI,不僅僅可以實(shí)現(xiàn)語(yǔ)音合成TTS,同樣可以實(shí)現(xiàn)語(yǔ)音識(shí)別SR。下面我們就介紹并貼出相關(guān)代碼。主要有兩種方式:

1、使用COM組件技術(shù),不管是C++,C#,Delphi都能玩的轉(zhuǎn),開(kāi)發(fā)出來(lái)的東西在XP和WIN7都能跑。(注意要引入系統(tǒng)組件SpeechLib,XP要安裝識(shí)別引擎)
2、使用WIN7的windows api,其實(shí)最終還是調(diào)用了SAPI,所以開(kāi)發(fā)出來(lái)的東西就只能在WIN7上面跑。

其實(shí)不管是哪一種,都是調(diào)用SAPI,可能后一種代碼比較簡(jiǎn)單。

使用第一種方式,需要注意在COM選項(xiàng)卡里面的Microsoft Speech  object  library引用

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));
      }
    }
  }

第二種同樣需要引入,不過(guò)引入的是Win7中的.NET3.5類庫(kù)

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;//語(yǔ)音識(shí)別引擎
    public DictationGrammar dictationGrammar = null; //自然語(yǔ)法
    public System.Windows.Forms.Control cDisplay; //顯示控件

    public SRecognition(string[] fg) //創(chuàng)建關(guān)鍵詞語(yǔ)列表
    {
      CultureInfo myCIintl = new CultureInfo("en-US");
      foreach (RecognizerInfo config in SpeechRecognitionEngine. InstalledRecognizers())//獲取所有語(yǔ)音引擎
      {
    if (config.Culture.Equals(myCIintl) && config.Id == "MS-1033-80-DESK" )
        {
          recognizer = new SpeechRecognitionEngine(config);
          break;
        }//選擇美國(guó)英語(yǔ)的識(shí)別引擎
      }
      if (recognizer != null)
      {
        InitializeSpeechRecognitionEngine(fg);//初始化語(yǔ)音識(shí)別引擎
        dictationGrammar = new DictationGrammar();
      }
      else
      {
        MessageBox.Show("創(chuàng)建語(yǔ)音識(shí)別失敗");
      }
    }
    private void InitializeSpeechRecognitionEngine(string[] fg)
    {
      recognizer.SetInputToDefaultAudioDevice();//選擇默認(rèn)的音頻輸入設(shè)備
      Grammar customGrammar = CreateCustomGrammar(fg);
  //根據(jù)關(guān)鍵字?jǐn)?shù)組建立語(yǔ)法
      recognizer.UnloadAllGrammars();
      recognizer.LoadGrammar(customGrammar);
  //加載語(yǔ)法
recognizer.SpeechRecognized += new EventHandler <SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer.SpeechHypothesized += new EventHandler <SpeechHypothesizedEventArgs>(recognizer_SpeechHypothesized);
    }
    public void BeginRec(Control tbResult)//關(guān)聯(lián)窗口控件
    {
      TurnSpeechRecognitionOn();
      TurnDictationOn();
      cDisplay = tbResult;
    }
    public void over()//停止語(yǔ)音識(shí)別引擎
    {
      TurnSpeechRecognitionOff();
    }
    public virtual Grammar CreateCustomGrammar(string[] fg) //創(chuàng)造自定義語(yǔ)法
    {
      GrammarBuilder grammarBuilder = new GrammarBuilder();
      grammarBuilder.Append(new Choices(fg));
      return new Grammar(grammarBuilder);
    }
    private void TurnSpeechRecognitionOn()//啟動(dòng)語(yǔ)音識(shí)別函數(shù)
    {
      if (recognizer != null)
      {
        recognizer.RecognizeAsync(RecognizeMode.Multiple); 
//識(shí)別模式為連續(xù)識(shí)別
      }
      else
      {
        MessageBox.Show("創(chuàng)建語(yǔ)音識(shí)別失敗");
      }
    }
    private void TurnSpeechRecognitionOff()//關(guān)閉語(yǔ)音識(shí)別函數(shù)
    {
      if (recognizer != null)
      {
        recognizer.RecognizeAsyncStop();
        TurnDictationOff();
      }
      else
      {
        MessageBox.Show("創(chuàng)建語(yǔ)音識(shí)別失敗");
      }
    }
private void recognizer_SpeechRecognized(object sender, SpeechRecognized EventArgs e)
    {
  //識(shí)別出結(jié)果完成的動(dòng)作,通常把識(shí)別結(jié)果傳給某一個(gè)控件
      string text = e.Result.Text;
      cDisplay.Text = text;
    }
    private void TurnDictationOn()
    {
      if (recognizer != null)
      {
        recognizer.LoadGrammar(dictationGrammar);
  //加載自然語(yǔ)法
      }
      else
      {
        MessageBox.Show("創(chuàng)建語(yǔ)音識(shí)別失敗");
      }
    }
    private void TurnDictationOff()
    {
      if (dictationGrammar != null)
      {
        recognizer.UnloadGrammar(dictationGrammar);
  //卸載自然語(yǔ)法
      }
      else
      {
        MessageBox.Show("創(chuàng)建語(yǔ)音識(shí)別失敗");
      }
    }
  }
}


相關(guān)文章

  • Unity實(shí)現(xiàn)簡(jiǎn)單手勢(shì)識(shí)別

    Unity實(shí)現(xiàn)簡(jiǎn)單手勢(shì)識(shí)別

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡(jiǎn)單手勢(shì)識(shí)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 基于C#編寫一個(gè)接受圖片流的OCR識(shí)別接口

    基于C#編寫一個(gè)接受圖片流的OCR識(shí)別接口

    這篇文章主要為大家詳細(xì)介紹了如何使用C#寫一個(gè)接受圖片流的OCR識(shí)別接口,以及測(cè)試用例調(diào)用接口,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 詳解C#中線程傳參,返回值和多線程沖突問(wèn)題的解決

    詳解C#中線程傳參,返回值和多線程沖突問(wèn)題的解決

    這篇文章主要為大家詳細(xì)介紹了C#中線程傳參,返回值和多線程沖突問(wèn)題的解決方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • C#利用棧實(shí)現(xiàn)加減乘除運(yùn)算

    C#利用棧實(shí)現(xiàn)加減乘除運(yùn)算

    這篇文章主要介紹了C#利用棧實(shí)現(xiàn)加減乘除運(yùn)算的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-11-11
  • C#中4種深拷貝方法介紹

    C#中4種深拷貝方法介紹

    這篇文章主要介紹了C#中4種深拷貝方法介紹,本文講解了利用反射實(shí)現(xiàn)、利用xml序列化和反序列化實(shí)現(xiàn)、利用二進(jìn)制序列化和反序列化實(shí)現(xiàn)、利用silverlight DataContractSerializer實(shí)現(xiàn),用于在silverlight 客戶端使用等4種方法,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)的Socket服務(wù)器端、客戶端代碼分享

    C#實(shí)現(xiàn)的Socket服務(wù)器端、客戶端代碼分享

    這篇文章主要介紹了C#實(shí)現(xiàn)的Socket服務(wù)器端、客戶端代碼分享,2個(gè)非常簡(jiǎn)單的入門例子,需要的朋友可以參考下
    2014-08-08
  • C#自定義事件之屬性改變引發(fā)事件示例

    C#自定義事件之屬性改變引發(fā)事件示例

    這篇文章主要為大家詳細(xì)介紹了C#自定義事件之屬性改變引發(fā)事件示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C# 遞歸算法詳解

    C# 遞歸算法詳解

    什么是遞歸函數(shù)/方法?任何一個(gè)方法既可以調(diào)用其他方法也可以調(diào)用自己,而當(dāng)這個(gè)方法調(diào)用自己時(shí),我們就叫它遞歸函數(shù)或遞歸算法,接下來(lái)詳細(xì)介紹需要了解的朋友可以參考下
    2021-11-11
  • 聊聊C#中的Mixin的具體用法

    聊聊C#中的Mixin的具體用法

    本文主要介紹了C#中的Mixin的具體用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 詳解C#App.config和Web.config加密

    詳解C#App.config和Web.config加密

    本篇文章給大家分享了C#App.config和Web.config加密的相關(guān)知識(shí)點(diǎn)以及具體代碼步驟,有興趣的朋友參考學(xué)習(xí)下。
    2018-05-05

最新評(píng)論

东丰县| 呼和浩特市| 康保县| 蓬溪县| 贡山| 德格县| 惠东县| 克拉玛依市| 巢湖市| 綦江县| 阿合奇县| 青州市| 怀集县| 伊宁市| 深水埗区| 中牟县| 尉犁县| 泽普县| 那曲县| 宁强县| 保德县| 山阳县| 六枝特区| 台江县| 梅河口市| 封丘县| 栖霞市| 呼和浩特市| 广水市| 曲麻莱县| 大城县| 兰州市| 常州市| 班戈县| 平泉县| 北碚区| 东乡| 通州市| 仪征市| 广昌县| 彰化市|