Microsoft Azure日前推出了Cognitive Service APIs的服務,其中包括了Bing Speech API,這一個API可以將輸入的語音內容(wav檔),辨識成文字內容
本篇文章會說明如何使用Bing Speech API來進行辨識的功能
要使用Bing Speech API,必須先到Azure上建立一個Cognitive Service APIs的服務
點選建立Cognitive Service APIs的服務後,請在API type的地方,選擇[Bing Speech API]
建立完成後,請到這一個Bing Speech API的功能中,取得金鑰資訊,這個金鑰內容之後會用到
接著,請到下面GitHub的網址,下載有關Speech的程式碼
https://github.com/Microsoft/ProjectOxford-ClientSDK/tree/master/Speech
GitHub下載的程式碼中,包含了四種不同的平台,分別是Web、Windows、Android以及iOS的部份
而Windows的平台,官方提供的程式碼是採用WPF的方式作編寫
我們先把Windows平台的程式碼開啟後,重新編譯並執行它
開啟程式後,請先在右上方輸入剛剛記錄下來的金鑰值
語音辨識的方式,一共有兩種,分別是短語句與長語句兩種方式可以進行辨識,當按下下方的"Start Recognition",就可以開始對著麥克風說要辨識的話
在這裡有幾點需要特別說明的,在程式碼之中,需要設定辨識的語系,預設是en-US,若是想辨識中文的話,只要更改為zh-TW就可以了
在程式碼中,程式的執行方式是建立一個"DataRecognitionClient"物件,並加上一個OnResponseReceived的事件,作為辨識完成後的訊息回傳接收的事件,所以簡單來講,程式碼的內容大概就是如下面所示
DataRecognitionClient dataClient;
public Init()
{
dataClient = SpeechRecognitionServiceFactory.CreateDataClient(SpeechRecognitionMode.ShortPhrase, "en-US", "[Key值]", "[Key值]");
dataClient.OnResponseReceived += OnMicShortPhraseResponseReceivedHandler;
}
private void StartRecogntion()
{
using (FileStream CommandStream = File.Open("[選擇要進行語音辨識的wav檔]", FileMode.Open, FileAccess.Read))
{
int bytesRead = 0;
byte[] buffer = new byte[1024];
try
{
do
{
bytesRead = CommandStream.Read(buffer, 0, buffer.Length);
this.dataClient.SendAudio(buffer, bytesRead);
}
while (bytesRead > 0);
}
finally
{
this.dataClient.EndAudio();
}
}
}
/// <summary>
/// Called when a final response is received;
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="SpeechResponseEventArgs"/> instance containing the event data.</param>
private void OnMicShortPhraseResponseReceivedHandler(object sender, SpeechResponseEventArgs e)
{
if (e.PhraseResponse.Results.Length == 0)
{
this.WriteLine("找不到辨識的結果");
}
else
{
this.WriteLine("********* 找到的辨識結果如下 *********");
for (int i = 0; i < e.PhraseResponse.Results.Length; i++)
{
this.WriteLine(
"[{0}] Confidence={1}, Text=\"{2}\"",
i,
e.PhraseResponse.Results[i].Confidence,
e.PhraseResponse.Results[i].DisplayText);
}
}
}
只要這幾段程式碼就可以進行語音辨識了
所以讀取非wav格式的檔案,在dataClient.SendAudio時,會發生無法讀入的狀況,這點請注意
參考資料
Bing Speech Recognition API Overview
Speech Recognition