練習 - 建立單次辨識語音轉換文字應用程式
在此練習中,您將會建立使用單次辨識來轉譯您所下載範例音訊檔案的應用程式。
建立語音轉換文字應用程式
在右側的 Cloud Shell 中,建立應用程式的目錄,然後變更為新的目錄:
mkdir speech-to-text cd speech-to-text
建立新的 .NET Core 應用程式:
dotnet new console
此命令應該會需要幾秒鐘的時間才能完成。
建立 .NET Core 應用程式之後,請將語音 SDK 套件新增至您的應用程式:
dotnet add package Microsoft.CognitiveServices.Speech
此命令應該會需要幾秒鐘的時間才能完成。
下載 WAVE 檔案以進行辨識
在右側的 Cloud Shell 中,執行下列命令以下載範例 WAV 檔案,其中包含來自 William Shakespeare 戲劇「皆大歡喜」的一系列台詞。
curl -L https://aka.ms/ShakespeareWAV -o Shakespeare.wav
您將會針對本練習中的應用程式和下一個練習中的應用程式,使用此 WAV 檔案。
新增文字轉換語音應用程式的程式碼
在右側的 Cloud Shell 中,開啟 Program.cs 檔案:
code Program.cs
移除所有現有的程式碼並且新增下列
using
陳述式,為應用程式啟用 Azure AI 語音 API:using System.Text; using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio;
新增下列程式碼,其使用 Azure AI 語音 API 來轉換您稍早建立的 WAV 檔案內容,以使用轉譯的語音建立文字檔。 將
azureKey
和azureLocation
值取代為您在上一個練習中複製的值。string azureKey = "ENTER YOUR KEY FROM THE FIRST EXERCISE"; string azureLocation = "ENTER YOUR LOCATION FROM THE FIRST EXERCISE"; string textFile = "Shakespeare.txt"; string waveFile = "Shakespeare.wav"; try { FileInfo fileInfo = new FileInfo(waveFile); if (fileInfo.Exists) { Console.WriteLine("Speech recognition started."); var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation); using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName); using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig); var result = await speechRecognizer.RecognizeOnceAsync(); FileStream fileStream = File.OpenWrite(textFile); StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8); streamWriter.WriteLine(result.Text); streamWriter.Close(); Console.WriteLine("Speech recognition stopped."); } } catch (Exception ex) { Console.WriteLine(ex.Message); }
此程式碼會使用您的金鑰和位置來初始化 Azure AI 語音的連線。 然後會讀取您下載的 WAV 檔案內容,接著使用
SpeechRecognizer
的RecognizeOnceAsync()
方法將音訊轉換成文字,然後使用資料流寫入器將結果儲存至文字檔。當您完成新增所有程式碼之後,您的檔案應該類似下列範例:
using System.Text; using System.Threading.Tasks; using Microsoft.CognitiveServices.Speech; using Microsoft.CognitiveServices.Speech.Audio; string azureKey = "ENTER YOUR KEY FROM THE FIRST EXERCISE"; string azureLocation = "ENTER YOUR LOCATION FROM THE FIRST EXERCISE"; string textFile = "Shakespeare.txt"; string waveFile = "Shakespeare.wav"; try { FileInfo fileInfo = new FileInfo(waveFile); if (fileInfo.Exists) { Console.WriteLine("Speech recognition started."); var speechConfig = SpeechConfig.FromSubscription(azureKey, azureLocation); using var audioConfig = AudioConfig.FromWavFileInput(fileInfo.FullName); using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig); var result = await speechRecognizer.RecognizeOnceAsync(); FileStream fileStream = File.OpenWrite(textFile); StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.UTF8); streamWriter.WriteLine(result.Text); streamWriter.Close(); Console.WriteLine("Speech recognition stopped."); } } catch (Exception ex) { Console.WriteLine(ex.Message); }
請務必使用上一個練習中的金鑰和位置來更新
azureKey
和azureLocation
變數的值。若要儲存變更,請按 Ctrl+S 儲存檔案,然後按 Ctrl+Q 結束編輯器。
執行您的應用程式
若要執行您的應用程式,請在右側的 Cloud Shell 中使用下列命令:
dotnet run
如果您沒有看到任何錯誤,您的應用程式已成功執行,您應該會看到顯示下列回應:
Speech recognition started. Speech recognition stopped.
請執行下列命令以取得目錄中的檔案清單:
ls -l
您應該會收到類似下列範例的回應,而且您應該會在檔案清單中看到 Shakespeare.txt 檔案:
drwxr-xr-x 3 user user 4096 Oct 1 11:11 bin drwxr-xr-x 3 user user 4096 Oct 1 11:11 obj -rw-r--r-- 1 user user 1476 Oct 1 11:11 Program.cs -rw-r--r-- 1 user user 98 Oct 1 11:11 Shakespeare.txt -rwxr-xr-x 1 user user 978242 Oct 1 11:11 Shakespeare.wav -rw-r--r-- 1 user user 348 Oct 1 11:11 speech to text.csproj
您會注意到文字檔的大小很小;在此範例中,只有 98 個位元組。
若要檢視 Shakespeare.txt 檔案的內容,請使用下列命令:
cat Shakespeare.txt
您應該會看到類似以下範例的回應:
The following quotes are from Act 2, scene seven of William Shakespeare's play as you like it.
如果您聆聽範例 WAV 檔案,您會注意到此文字只是音訊的前幾秒。 由於我們使用
SpeechRecognizer
的RecognizeOnceAsync()
方法,因此說話者暫停時,語音轉換文字辨識就會停止。
在下一個練習中,您將會了解如何繼續整個音訊檔案的語音轉換文字辨識。