Google Cloud Speech API 音声からテキスト変換

未分類

Google Cloud Speech APIを利用して音声ファイルからテキストファイルへ変換したときのメモ。

今回はGCP:Google Cloud Plarform内で全て作業した。
Shellでの作業はGoogle Cloud Shellを用いた。

GCPの設定

APIサービスの有効化

GCPのナビゲーションメニューから、「APIとサービス」>「ダッシュボード」>「APIとサービスの有効化」から以下のAPIを有効化。

  • Cloud Speech API
  • Cloud Text-to-Speech API

API認証の設定

GCPのナビゲーションメニューから、[APIとサービス] > [認証情報] > [認証情報を作成] > [サービスアカウントキー]を選択し、適当な[サービスアカウント名](今回はデフォルト)を設定し、作成ボタンを押してJSONファイルをダウンロード。

続いてShellにJSONファイルをアップロードする。

$ export GOOGLE_APPLICATION_CREDENTIALS=[JSONファイル]

音声ファイルの準備

音声ファイルはGCS:Google Cloud Strageへ保存する。

画面左上の[ツールとサービス] > [Storage] > [ブラウザ] を選択し、[バケットの作成]でバケットを作成し、その作成したバケットをダブルクリックして、[ファイルのアップロード]から音声ファイルをアップロード。

Pythonスクリプトの準備

必要に応じてアップデートしておく。※念のため

sudo pip install --upgrade google-cloud-speech

スクリプトtranscribe.pyを作成する。

# !/usr/bin/env python
# coding: utf-8
import argparse
import io
import sys
import codecs
import datetime
import locale

def transcribe_gcs(gcs_uri):
    from google.cloud import speech
    from google.cloud.speech import enums
    from google.cloud.speech import types
    client = speech.SpeechClient()

    audio = types.RecognitionAudio(uri=gcs_uri)
    config = types.RecognitionConfig(
        sample_rate_hertz=16000,
        encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
        language_code='en-US')

    operation = client.long_running_recognize(config, audio)

    print('Waiting for operation to complete...')
    operationResult = operation.result()

    d = datetime.datetime.today()
    today = d.strftime("%Y%m%d-%H%M%S")
    fout = codecs.open('output{}.txt'.format(today), 'a', 'utf-8')

    for result in operationResult.results:
      for alternative in result.alternatives:
          fout.write(u'{}\n'.format(alternative.transcript))
    fout.close()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument(
        'path', help='GCS path for audio file to be recognized')
    args = parser.parse_args()
    transcribe_gcs(args.path)

Pythonスクリプトの実行結果

$ ./transcribe.py gs://[mypacket]/speach.flac

Google Cloud Consoleのカレントディレクトリにoutput*.txtgが実行結果になる。

まとめ

GCPのストレージにある音声ファイルに対してテキスト変換を行った。
音声ファイルをGCSへアップロードしないで他レンタルサーバーの公開URLにおいてRecognitionAudioのuriへセットしたがエラーとなったのでこのままでは使えないようだ。
またCloud Speach APIは60分以降は料金が発生するので注意。

コメント

タイトルとURLをコピーしました