C# で Speech-to-Text API を使用する

1. 概要

Google Cloud Speech-to-Text API を使用すると、デベロッパーは、使いやすい API で強力なニューラル ネットワーク モデルを応用することで、120 の言語と方言で音声をテキストに変換できます。

この Codelab では、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 Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell を起動する

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Google Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] d1264ca30785e435.png をクリックします。

cb81e7c8e34bc8d.png

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

d95252b003979716.png

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

7833d5e1c5d18f54.png

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。

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 を有効にする

Speech-to-Text API の使用を開始する前に、API を有効にする必要があります。Cloud Shell で次のコマンドを使用して、API を有効にできます。

gcloud services enable speech.googleapis.com

4. C# 用 Google Cloud Speech-to-Text API クライアント ライブラリをインストールする

まず、Speech-to-Text API サンプルの実行に使用する簡単な C# コンソール アプリケーションを作成します。

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);
                }
            }
        }
    }
}

コードを 1 ~ 2 分ほどかけて確認し、音声ファイルの文字起こしに使用されていることを確認します。

Encoding パラメータでは、音声ファイルに使用する音声エンコードのタイプを API に指定します。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}");
                    }
                }
            }
        }
    }
}

コードを 1 ~ 2 分ほどかけて確認し、単語のタイムスタンプ付きで音声ファイルの文字起こしに使用されていることを確認します。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. さまざまな言語の文字起こし

多言語対応が可能です。サポート対象の言語については、こちらをご覧ください。

このセクションでは、事前に録音されたフランス語の音声ファイルを文字起こしします。音声ファイルは 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);
                }
            }
        }
    }
}

コードを 1 ~ 2 分ほどかけて確認し、音声ファイルの文字起こしにどのように使用されているかを確認します。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 に移動します。
  • シャットダウンするプロジェクトを選択し、上部の [削除] をクリックします。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。