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

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

この Codelab について

subject最終更新: 6月 26, 2023
account_circle作成者: Mete Atamel

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# の使用経験

アンケート

<ph type="x-smartling-placeholder">をご覧ください。

このチュートリアルをどのように使用されますか?

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

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

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 を有効にする必要があります。この API を有効にするには、Cloud Shell で次のコマンドを使用します。

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. さまざまな言語の文字起こし

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

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 コンソールに移動します。
  • シャットダウンするプロジェクトを選択し、[削除] をクリックしますが表示されます。これにより、プロジェクトの削除がスケジュールされます。

詳細

ライセンス

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