Azure 認知服務平台提供了 AI as a Platform 的一站式服務,其中提供了多種認知服務,例如電腦視覺、語音服務、文字分析、異常偵測等等,官方也提供了多種程式語言的 SDK,讓開發者可以更容易地使用 SDK 來呼叫認知服務的 REST API,輕鬆應用 AI 讓應用程式變得更智能。這篇來玩玩將語音即時轉譯為文字的 Speech Cognitive Service。
Speech Cognitive Service 語音服務可以將語音轉成文字,像是聽寫員一樣,把收到的語音資料,透過 AI 語音模型做辨識,然後轉成文字輸出,更多介紹可以參考官方的語音服務介紹。
申請 API 金鑰
Azure 認知服務是一個 AI 平台服務,要使用之前要先到 Azure Portal 去建立認知服務資源,在建立資源的頁面中搜尋一下認知服務
或 Cognitive Service
就可以找到他,簡單設定名字和資源群組位置就差不多了。
有了這項資源後,所有的認知服務都可以使用此資源的 Endpoint 來使用。至於費用每項服務都不一樣,就參考官網的說明。
不過如果只是要試用看看,可以使用這個連結 https://azure.microsoft.com/zh-tw/try/cognitive-services/my-apis/ ,申請 30 天試用金鑰,每項認知服務都可以申請一次唷!語音服務的試用額度為每月 5000 筆呼叫,每分鐘最多 20 次,拿來測試相當夠用了。
申請完成後,你會得到 API 端點
和金鑰
,從端點的 URL 中可以得知,這個試用的資源,他的服務區域在美西 westus
,這個資訊很重要,等一下會用到,將金鑰和服務區域這兩組資訊記下來後,就可以開始寫隻呼叫語音服務的程式。
使用 C# 開發
官方提供了很多平台和程式語言的 SDK,這裡用 Windows 10 和 C# 來做範例,關於 C# 的語音服務 SDK 文件可以參考這個連結 https://docs.microsoft.com/zh-tw/dotnet/api/overview/azure/cognitiveservices/client/speechservice。
使用 SDK 的整個程式運作流程如下:
- 設定使用語音服務所需要的
金鑰
和服務區域
- 建立語音辨識器
- 設計辨識後的結果動作
範例程式碼如下:
public static async Task RecognitionWithMicrophoneAsync()
{
// 建立語音辨識的設定,這裡必須提供 Azure Cognitive Service 的訂閱金鑰和服務區域
var config = SpeechConfig.FromSubscription(YourSubscriptionKey, YourServiceRegion);
// 預設使用 en-us 的美式英文作為辨識語言
config.SpeechRecognitionLanguage = "en-us";
// 建立語音辨識器,並將音訊來源指定為機器預設的麥克風
using (var recognizer = new SpeechRecognizer(config, AudioConfig.FromDefaultMicrophoneInput()))
{
Console.WriteLine("Say something...");
// 開始進行語音辨識,會在辨別出句子結束時,返回語音辨識的結果。
// 會藉由句子說完後,所產生的靜默時間作為辨識依據,或者語音超過 15 秒,也會處理成斷句。
var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);
// 輸出語音辨識結果
switch (result.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: {result.Text}");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
default:
var cancellation = CancellationDetails.FromResult(result);
Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");
if (cancellation.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
break;
}
}
}
注意到上面的程式碼使用 RecognizeOnceAsync()
這個方法來執行辨識,此方法會根據語音的靜默頓點來判斷是否說完,或是語音超過 15 秒也會被強制斷句,執行結果如下圖:
如果你需要辨識的語音超過 15 秒,可以改用 StartContinuousRecognitionAsync()
這個方法,他可以持續收聽並辨識語音資訊,你也可以設定辨識過程中的事件,使其做出你想要的動作,相關程式碼你可以參考範例程式碼 的 ContinuousRecognitionWithMicrophoneAsync()
方法。
本篇完整範例程式碼請參考 poychang/Demo-Speech-Recognition-App。
後記
你知道 Office 365 的 PowerPoint 可以在簡報模式開啟即時字幕,這功能就是透過像這樣的認知服務,將演講者的演說及時轉換成字幕,更厲害的是,他還可以即時翻譯成其他語系,而同樣的功能,我們可以使用本篇所使用到的語音認知服務加上語音翻譯服務,達成同樣的效果。
想要試試看在 PowerPoint 中顯示即時、自動輔助字幕或翻譯字幕,可以參考這篇文章來嘗試看看。
參考資料: