Windows Phone內建的語音辨識

來源:互聯網
上載者:User

標籤:android   style   blog   http   io   color   os   ar   for   

WindowsPhone下語音操作包括:

1、程式內部的語音辨識,使用者可以通過語音辨識進行輸入或完成相關任務   

2、控製程序的語音命令,控製程序啟動、開啟,並可對頁面跳轉等進行操作

這篇文章將構建一個簡單的語音辨識(一般的會將說的話全部識別出來,而利用SRGS文法可識別一句話裡面的組成)

SRGS(語音辨識文法規範),可以定義複雜的語音辨識規則.如:識別用同義字替換了詞語,漏說了非關鍵詞等。

SRGS須先儲存到StorgeFile,再添加到SpeechRecognizer類的屬性上。

//按鈕點擊事件,開始進行語音辨識
private async void Button_Click(object sender, RoutedEventArgs e){  string message = "";  try  {    SpeechRecognizer speechRecognizer = new SpeechRecognizer();
         
    //以下兩個事件就不寫了    speechRecognizer.StateChanged += speechRecognizer_StateChanged;//狀態改變    speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;//語音品質    //擷取內建的SRGS文法檔案,如只是簡單的識別出將的話,不要這三行    StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("SRGSGrammar.xml");   SpeechRecognitionGrammarFileConstraint grammarFile = new SpeechRecognitionGrammarFileConstraint(file);    speechRecognizer.Constraints.Add(grammarFile);//添加SRGS文法約束    //speechRecognizer.UIOptions.ExampleText = "這裡填的是有UI時候的樣本";    
    //分析語音    SpeechRecognitionCompilationResult compilationResult = await speechRecognizer.CompileConstraintsAsync();   if (compilationResult.Status == SpeechRecognitionResultStatus.Success)    {
      var result = await speechRecognizer.RecognizeAsync();//無介面的語音辨識 若為.RecognizeWithUIAsync(); 則是顯示系統本身的識別介面      if (result.Confidence == SpeechRecognitionConfidence.Rejected)
      {
        message = "識別不到";      }      else      {        resultMessage.Text = result.Text; //識別結果      }    }  }  catch (Exception err)  {    message = "異常資訊:" + err.Message + err.HResult;  }
}

 SRGSGrammar.xml檔案

<?xml version="1.0" encoding="utf-8" ?><grammar version="1.0" xml:lang="zh-cn" root="mediaMenu" tag-format="semantics/1.0"       xmlns=http://www.w3.org/2001/06/grammar 
    xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions"><!- 這些都是必不可少的--> <rule id="city" scope="public"> <one-of> <!-- 匹配其中一個短語--> <item>北京</item> <item>上海</item> </one-of> </rule> <rule id="cross" scope="public"> <one-of> <item>到</item> <item>至</item> <item>飛往</item> </one-of> </rule> <rule id="Menu" scope="public"> <item> <ruleref uri="#date"/> <!--指定關聯的其他規則的節點--> <tag>out.date = reles.latest();</tag> </item> <item repeat="0-1">從</item> <!--顯示1次或0次--> <item> <ruleref uri="#city"/> <tag>out.city = rulels.latest();</tag> </item> <item> <ruleref uri="#cross"/> <tag>out.cross = rulels.latest();</tag> </item> <item> <ruleref uri="#city"/> <tag>out.city = rulels.latest();</tag> </item> </rule></grammar>

以上可以實現識別"從(“從”可有可無) 北京/上海  到/至/飛往  北京/上海"
北京到上海、從北京到上海、北京飛往上海、從上海飛往北京、上海到北京等。

可惜的是,出發地和到達地是能夠重複的。且只支援“ (從)出發地---到達地” 這樣特定的規則

說多了其他的(廢)話,就會識別出錯。

 

PS:最近的項目上要添加語音辨識功能,要求用的是百度語音辨識的SDK/API,可惜前者只支援Android和Iphone

後者雖是各個平台通用,但工作量上大了一點,得先進行錄音,之後再通過HttpWebRequest和API傳輸資料,解析。 

Windows Phone內建的語音辨識

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.