搭配 C# 使用 Speech-to-Text API

1. 總覽

Google Cloud Speech-to-Text API 提供強大的類神經網路模型,方便開發人員輕鬆將音訊轉換成文字,支援超過 120 種語言和方言。

在本程式碼研究室中,您將著重於使用 C# 語言呼叫 Speech-to-Text API。您將瞭解如何將英文和其他語言的音訊檔案傳送至 Cloud Speech-to-Text API 進行語音轉錄。

課程內容

  • 如何使用 Cloud Shell
  • 如何啟用 Speech-to-Text API
  • 如何驗證 API 要求
  • 如何安裝 C# 適用的 Google Cloud 用戶端程式庫
  • 如何轉錄英文音訊檔案
  • 如何轉錄音訊檔案並取得字詞時間戳記
  • 如何轉錄不同語言的音訊檔案

軟硬體需求

  • Google Cloud Platform 專案
  • ChromeFirefox 瀏覽器
  • 熟悉 C# 的使用方式

問卷調查

您會如何使用本教學課程?

僅閱讀 閱讀並完成練習

您對 C# 的體驗評價如何?

新手 中級 熟練

您對使用 Google Cloud Platform 服務的體驗有何評價?

新手 中級 熟練

2. 設定和需求

自修實驗室環境設定

  1. 登入 Google Cloud 控制台,然後建立新專案或重複使用現有專案。如果沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 專案名稱是這個專案參與者的顯示名稱。這是 Google API 未使用的字元字串。你隨時可以更新。
  • 專案 ID 在所有 Google Cloud 專案中都是不重複的,而且設定後即無法變更。Cloud 控制台會自動產生專屬字串,通常您不需要在意該字串為何。在大多數程式碼研究室中,您需要參照專案 ID (通常標示為 PROJECT_ID)。如果您不喜歡產生的 ID,可以產生另一個隨機 ID。你也可以嘗試使用自己的名稱,看看是否可用。完成這個步驟後就無法變更,且專案期間會維持不變。
  • 請注意,有些 API 會使用第三個值,也就是「專案編號」。如要進一步瞭解這三種值,請參閱說明文件
  1. 接著,您需要在 Cloud 控制台中啟用帳單,才能使用 Cloud 資源/API。完成這個程式碼研究室的費用不高,甚至可能完全免費。如要關閉資源,避免在本教學課程結束後繼續產生費用,請刪除您建立的資源或專案。Google Cloud 新使用者可參加 $300 美元的免費試用計畫。

啟動 Cloud Shell

雖然可以透過筆電遠端操作 Google Cloud,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是可在雲端執行的指令列環境。

啟用 Cloud Shell

  1. 在 Cloud 控制台,點選「啟用 Cloud Shell」 圖示 d1264ca30785e435.png

cb81e7c8e34bc8d.png

如果您是首次啟動 Cloud Shell,系統會顯示中繼畫面,說明這個指令列環境。如果出現中繼畫面,請按一下「繼續」

d95252b003979716.png

佈建並連至 Cloud Shell 預計只需要幾分鐘。

7833d5e1c5d18f54.png

這部虛擬機器已載入所有必要的開發工具,並提供永久的 5 GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並強化驗證功能。本程式碼研究室幾乎所有工作都可在瀏覽器上完成。

連至 Cloud Shell 後,您應該會看到驗證已完成,專案也已設為獲派的專案 ID。

  1. 在 Cloud Shell 中執行下列指令,確認您已通過驗證:
gcloud auth list

指令輸出

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. 在 Cloud Shell 中執行下列指令,確認 gcloud 指令知道您的專案:
gcloud config list project

指令輸出

[core]
project = <PROJECT_ID>

如未設定,請輸入下列指令手動設定專案:

gcloud config set project <PROJECT_ID>

指令輸出

Updated property [core/project].

3. 啟用 Speech-to-Text API

您必須先啟用 API,才能開始使用 Speech-to-Text API。您可以在 Cloud Shell 中使用下列指令啟用 API:

gcloud services enable speech.googleapis.com

4. 安裝 C# 適用的 Google Cloud Speech-to-Text API 用戶端程式庫

首先,請建立簡單的 C# 控制台應用程式,用來執行 Speech-to-Text API 範例:

dotnet new console -n SpeechToTextApiDemo

您應該會看到建立的應用程式和已解決的依附元件:

The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.

接著前往 SpeechToTextApiDemo 資料夾:

cd SpeechToTextApiDemo/

並將 Google.Cloud.Speech.V1 NuGet 套件新增至專案:

dotnet add package Google.Cloud.Speech.V1
info : Adding PackageReference for package 'Google.Cloud.Speech.V1' into project '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.
log  : Restoring packages for /home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.Speech.V1' version '1.0.1' added to file '/home/atameldev/SpeechToTextApiDemo/SpeechToTextApiDemo.csproj'.

您現在可以使用 Speech-to-Text API 了!

5. 轉錄音訊檔案

在本節中,您將轉錄預先錄製的英文音訊檔案。音訊檔案位於 Google Cloud Storage。

如要轉錄音訊檔案,請從 Cloud Shell 右上方開啟程式碼編輯器:

fd3fc1303e63572.png

前往 SpeechToTextApiDemo 資料夾中的 Program.cs 檔案,並將程式碼替換成以下程式碼:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");         
            
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

請花一兩分鐘研究程式碼,瞭解如何轉錄音訊檔案*。*

Encoding 參數則說明音訊檔案是使用哪種音訊編碼類型。Flac 是 .raw 檔案的編碼類型 (詳情請參閱編碼類型說明文件)。

RecognitionAudio 物件中,您可以將 Cloud Storage 音訊檔案的 URI 傳送給 API,或是傳送音訊檔案的本機檔案路徑。這裡我們使用 Cloud Storage URI。

回到 Cloud Shell,執行應用程式:

dotnet run

您應該會看到以下的輸出內容:

how old is the Brooklyn Bridge

摘要

在這個步驟中,您已能轉錄英文音訊檔案並列印結果。進一步瞭解轉錄

6. 轉錄並取得字詞時間戳記

Speech-to-Text 可以偵測轉錄音訊的時間偏移 (時間戳記)。時間偏移值會顯示在提供的音訊中,每個所說字詞的開始與結束時間。時間偏移值代表從音訊開始起算經過的時間量,以 100 毫秒為遞增量。

如要轉錄含時間偏移的音訊檔案,請前往 SpeechToTextApiDemo 資料夾中的 Program.cs 檔案,並將程式碼替換成下列程式碼:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                SampleRateHertz = 16000,
                LanguageCode = LanguageCodes.English.UnitedStates,
                EnableWordTimeOffsets = true
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-tests/speech/brooklyn.flac");
     
            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine($"Transcript: { alternative.Transcript}");
                    Console.WriteLine("Word details:");
                    Console.WriteLine($" Word count:{alternative.Words.Count}");
                    foreach (var item in alternative.Words)
                    {
                        Console.WriteLine($"  {item.Word}");
                        Console.WriteLine($"    WordStartTime: {item.StartTime}");
                        Console.WriteLine($"    WordEndTime: {item.EndTime}");
                    }
                }
            }
        }
    }
}

請花一到兩分鐘研究程式碼,瞭解如何使用程式碼轉錄音訊檔案,並取得字詞時間戳記*。*EnableWordTimeOffsets 參數會指示 API 啟用時間偏移 (詳情請參閱文件)。

回到 Cloud Shell,執行應用程式:

dotnet run

您應該會看到以下的輸出內容:

dotnet run

Transcript: how old is the Brooklyn Bridge
Word details:
 Word count:6
  how
    WordStartTime: "0s"
    WordEndTime: "0.300s"
  old
    WordStartTime: "0.300s"
    WordEndTime: "0.600s"
  is
    WordStartTime: "0.600s"
    WordEndTime: "0.800s"
  the
    WordStartTime: "0.800s"
    WordEndTime: "0.900s"
  Brooklyn
    WordStartTime: "0.900s"
    WordEndTime: "1.100s"
  Bridge
    WordStartTime: "1.100s"
    WordEndTime: "1.500s"

摘要

在這個步驟中,您已能轉錄英文音訊檔案,並取得單字時間戳記和列印結果。進一步瞭解使用字詞偏移轉錄

7. 轉錄不同語言的內容

Speech-to-Text API 支援超過 100 種語言的轉錄功能!如要查看支援的語言清單,請按這裡

在本節中,您將轉錄預先錄製的法文音訊檔案。音訊檔案位於 Google Cloud Storage。

如要轉錄法文音訊檔案,請前往 SpeechToTextApiDemo 資料夾中的 Program.cs 檔案,並將程式碼替換成以下程式碼:

using Google.Cloud.Speech.V1;
using System;

namespace SpeechToTextApiDemo
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var speech = SpeechClient.Create();
            var config = new RecognitionConfig
            {
                Encoding = RecognitionConfig.Types.AudioEncoding.Flac,
                LanguageCode = LanguageCodes.French.France
            };
            var audio = RecognitionAudio.FromStorageUri("gs://cloud-samples-data/speech/corbeau_renard.flac");

            var response = speech.Recognize(config, audio);

            foreach (var result in response.Results)
            {
                foreach (var alternative in result.Alternatives)
                {
                    Console.WriteLine(alternative.Transcript);
                }
            }
        }
    }
}

請花一到兩分鐘研究程式碼,瞭解如何使用程式碼轉錄音訊檔案*。*LanguageCode 參數會告知 API 音訊錄音的語言。

回到 Cloud Shell,執行應用程式:

dotnet run

您應該會看到以下的輸出內容:

maître corbeau sur un arbre perché tenait en son bec un fromage

這個句子來自法國著名童話

摘要

在這個步驟中,您已將法文音訊檔案轉錄成文字,並列印結果。進一步瞭解支援的語言

8. 恭喜!

您已瞭解如何使用 C# 透過 Speech-to-Text API,對音訊檔案執行不同類型的轉錄作業!

清除所用資源

如何避免系統向您的 Google Cloud Platform 帳戶收取您在本快速入門導覽課程中所用資源的相關費用:

  • 前往 Cloud Platform Console
  • 選取要關閉的專案,然後按一下頂端的「刪除」,系統就會排定刪除專案的時間。

瞭解詳情

授權

這項內容採用的授權為 Creative Commons 姓名標示 2.0 通用授權。