Node.js での Speech-to-Text API の使用

Node.js での Speech-to-Text API の使用

この Codelab について

subject最終更新: 12月 15, 2022
account_circle作成者: Anu Srivastava

1. 概要

Google Cloud Speech-to-Text API を使用すると、使いやすい API で高度なニューラル ネットワーク モデルを適用し、音声を 120 の言語と言語変種のテキストに変換できます。

この Codelab では、Node.js で Speech-to-Text API を使用する方法に重点を置きます。英語やその他の言語の音声ファイルを Cloud Speech-to-Text API に送信して音声文字変換を行う方法を学びます。

  • Speech-to-Text API を有効にする方法
  • API リクエストを認証する方法
  • Node.js 用 Google Cloud クライアント ライブラリをインストールする方法
  • 音声ファイルを英語で文字起こしする方法
  • 単語のタイムスタンプを含む音声ファイルを文字変換する方法
  • 音声ファイルをさまざまな言語で文字起こしする方法

必要なもの

  • Google Cloud Platform プロジェクト
  • ChromeFirefox などのブラウザ
  • JavaScript/Node.js の使用経験

アンケート

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

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

Node.js の使用経験をどのように評価されますか。

Google Cloud Platform サービスのご利用経験についてどのように評価されますか?

2. 設定と要件

セルフペース型の環境設定

  1. Cloud Console にログインし、新しいプロジェクトを作成するか、既存のプロジェクトを再利用します(Gmail アカウントまたは G Suite アカウントをお持ちでない場合は、アカウントを作成する必要があります)。

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

プロジェクト ID を忘れないようにしてください。プロジェクト ID はすべての Google Cloud プロジェクトを通じて一意の名前にする必要があります(上記の名前はすでに使用されているので使用できません)。以降、このコードラボでは PROJECT_ID と呼びます。

  1. 次に、Google Cloud リソースを使用するために、Cloud Console で課金を有効にする必要があります。

このコードラボを実行しても、費用はほとんどかからないはずです。このチュートリアル以外で請求が発生しないように、リソースのシャットダウン方法を説明する「クリーンアップ」セクションの手順に従うようにしてください。Google Cloud の新規ユーザーは $300 の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

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

Cloud Shell をアクティブにする

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

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

Cloud Shell を起動したことがない場合、その内容を説明する中間画面が(スクロールしなければ見えない範囲に)が表示されます。その場合は、[続行] をクリックします(以後表示されなくなります)。このワンタイム スクリーンは次のようになります。

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

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

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`
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. API リクエストを認証する

Speech-to-Text API にリクエストを送信するには、サービス アカウントを使用する必要があります。サービス アカウントはプロジェクトに属し、Google クライアントの Node.js ライブラリで Speech-to-Text API リクエストを行うために使用されます。ほかのユーザー アカウントと同じように、サービス アカウントはメールアドレスで表されます。このセクションでは、Cloud SDK を使用してサービス アカウントを作成し、サービス アカウントとして認証するために必要な認証情報を作成します。

まず、この Codelab 全体を通して使用する PROJECT_ID を使って環境変数を設定します。Cloud Shell を使用している場合は、次のように設定されます。

export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value core/project)

次に、Speech-to-Text API にアクセスするための新しいサービス アカウントを作成します。

gcloud iam service-accounts create my-speech-to-text-sa \
 
--display-name "my speech-to-text codelab service account"

次に、Node.js コードが新しいサービス アカウントとしてログインするために使用する認証情報を作成します。次のコマンドを使用して認証情報を作成し、JSON ファイル ~/key.json として保存します。

gcloud iam service-accounts keys create ~/key.json \
 
--iam-account  my-speech-to-text-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com

最後に、GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定します。この環境変数は、次のステップで説明する Speech-to-Text API の Node.js ライブラリで使用され、認証情報を検索します。環境変数には、作成した認証情報を保存した JSON ファイルのフルパスを設定する必要があります。

export GOOGLE_APPLICATION_CREDENTIALS="/home/${USER}/key.json"

詳細については、Speech-to-Text API の認証をご覧ください。

5. Node.js 用 Google Cloud Speech-to-Text API クライアント ライブラリをインストールする

まず、この Speech-to-Text API ラボの実行に使用するプロジェクトを作成し、任意のフォルダで新しい Node.js パッケージを初期化します。

npm init

NPM がプロジェクト構成に関するいくつかの質問(名前やバージョンなど)を行います。各質問に対して、ENTER を押してデフォルト値を受け入れます。デフォルトのエントリ ポイントは、index.js という名前のファイルです。

次に、Google Cloud Speech ライブラリをプロジェクトにインストールします。

npm install --save @google-cloud/speech

Google Cloud 向けに Node.js 開発を設定する方法の詳細については、設定ガイドをご覧ください。

これで Speech-to-Text API を使用する準備が整いました。

6. 音声ファイルの文字起こし

このセクションでは、事前に録音された音声ファイルを英語で文字起こしします。この音声ファイルは Google Cloud Storage にあります。

内部の index.js ファイルに移動し、コードを次のように置き換えます。

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
 
const transcription = response.results
     
.map(result => result.alternatives[0].transcript)
     
.join('\n');
  console
.log(`Transcription: ${transcription}`);
}

quickstart
();

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

Encoding パラメータは、音声ファイルに使用する音声エンコードのタイプを API に指示します。Flac は、.raw ファイルのエンコード タイプです(エンコード タイプの詳細については、ドキュメントをご覧ください)。

RecognitionAudio オブジェクトでは、Cloud Storage 内の音声ファイルの uri か、音声ファイルのローカル ファイルパスを API に渡すことができます。ここでは、Cloud Storage URI を使用しています。

プログラムを実行します。

node .

次の出力が表示されます。

how old is the Brooklyn Bridge

7. 単語のタイムスタンプを使用して音声文字変換する

Speech-to-Text では、文字起こしされた音声の時間オフセット(タイムスタンプ)を検出できます。時間オフセットは、提供された音声で発話された各単語の開始と終了を示します。時間オフセット値は、音声の開始からの経過時間を 100 ミリ秒単位で表します。

内部の index.js ファイルに移動し、コードを次のように置き換えます。

const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/brooklyn_bridge.raw';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'LINEAR16',
    sampleRateHertz
: 16000,
    languageCode
: 'en-US',
    enableWordTimeOffsets
: true,
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
  response
.results.forEach((result) => {
    result
.alternatives.forEach((alternative) => {
      console
.log(`Transcript: ${alternative.transcript}`);
      console
.log(`Word details:`);
      console
.log(` Word count ${alternative.words.length}`);
      alternative
.words.forEach((item) => {
        console
.log(`  ${item.word}`);
       
const s = parseInt(item.startTime.seconds) +
         item
.startTime.nanos/1000000000;
        console
.log(`   WordStartTime: ${s}s`);
       
const e = parseInt(item.endTime.seconds) +
        item
.endTime.nanos/1000000000;
        console
.log(`   WordEndTime: ${e}s`);
     
});
   
});
 
});
}

quickstart
();

1 ~ 2 分かけてコードを学習し、そのコードが単語タイムスタンプ** を含む音声ファイルの文字起こしに使用されていることを確認します。EnableWordTimeOffsets パラメータは、時間オフセットを有効にするように API に指示します(詳しくはドキュメントをご覧ください)。

プログラムを再度実行します。

node .

次の出力が表示されます。

Transcript: how old is the Brooklyn Bridge
Word details:
 
Word count 6
  how
   
WordStartTime: 0s
   
WordEndTime: 0.3s
  old
   
WordStartTime: 0.3s
   
WordEndTime: 0.6s
 
is
   
WordStartTime: 0.6s
   
WordEndTime: 0.8s
  the
   
WordStartTime: 0.8s
   
WordEndTime: 0.9s
 
Brooklyn
   
WordStartTime: 0.9s
   
WordEndTime: 1.1s
 
Bridge
   
WordStartTime: 1.1s
   
WordEndTime: 1.4s

8. さまざまな言語の文字起こし

Speech-to-Text API は 100 以上の言語の音声文字変換をサポートしています。サポートされている言語の一覧については、こちらをご覧ください。

このセクションでは、事前に録音された音声ファイルをフランス語で文字起こしします。この音声ファイルは Google Cloud Storage にあります。

内部の index.js ファイルに移動し、コードを次のように置き換えます。

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

const client = new speech.SpeechClient();

/**
 * Calls the Speech-to-Text API on a demo audio file.
 */

async
function quickstart() {
// The path to the remote LINEAR16 file stored in Google Cloud Storage
 
const gcsUri = 'gs://cloud-samples-data/speech/corbeau_renard.flac';

 
// The audio file's encoding, sample rate in hertz, and BCP-47 language code
 
const audio = {
    uri
: gcsUri,
 
};
 
const config = {
    encoding
: 'FLAC',
    languageCode
: 'fr-FR',
 
};
 
const request = {
    audio
: audio,
    config
: config,
 
};

 
// Detects speech in the audio file
 
const [response] = await client.recognize(request);
 
const transcription = response.results
     
.map((result) => result.alternatives[0].transcript)
     
.join('\n');
  console
.log(`Transcription: ${transcription}`);
}

quickstart
();

プログラムを再度実行すると、次の出力が表示されます。

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

これは、有名なフランスの童話の一文です。

サポートされている言語と言語コードの一覧については、こちらのドキュメントをご覧ください。

9. お疲れさまでした

Node.js で Speech-to-Text API を使用して、音声ファイルに対してさまざまな種類の音声文字変換を行う方法を学びました。

クリーンアップ

このクイックスタートで使用するリソースに対して Google Cloud Platform アカウントに課金されないようにするには:

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

詳細

ライセンス

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