WAVファイルをCloud Speech APIで文字起こしする
目的
WAVファイル音声をGoogle Cloud Speech-to-Text APIで文字起こしする方法を説明します.FLACファイルの文字起こし方法の記事を参考にして,WAVファイルの文字起こしを行いました.この方法なら,FLAC形式に変換しなくても文字起こしを行うことができるようになります.
【重要】 WAVファイルの準備
Cloud Speech-to-Text APIはWAVファイルのヘッダ情報から文字起こしに必要な情報を得るため,音声変換したいWAVファイルのヘッダが正常かどうか事前に確認する必要があります.ヘッダ情報の中で確認すべき情報は,PCMかどうか(fmt_wave_format_type)とサンプリング周波数(fmt_samples_per_sec)です.
Cloud Speech-to-Text APIの仕様を確かめたい方は,VSCodeからRecognitionConfigに定義元ジャンプしてください.
WAVファイルヘッダの確認
PythonでWAVEファイルのヘッダ情報の読み取りの記事に書かれているプログラムを動かしてヘッダ情報を確かめます.
正常なWAVファイル
- fmt_samples_per_sec: 8000〜48000(16000が最適)
- fmt_wave_format_type: 1 (PCMを指す)
ダメなWAVファイル例
- fmt_samples_per_sec: 0
- fmt_wave_format_type: 0
ダメな形式のWAVファイルだった場合
こちらを参考にMacのデフォルトの「ミュージック」アプリを使ってWAVファイルを書き出すとうまく動きました!
【注意】 iMovieで書き出したWAVファイルやQuickTimePlayerで編集したWAVファイルはヘッダが正常でないので動かせませんでした!
サービスアカウントキーの作成
基本的にFLACファイルの文字起こし方法の記事を参考にして,jsonキーの作成を行なってください.
【注意】今回はGoogle Cloud StorageにアップロードしたWAVファイルを文字起こしするので,サービスアカウント にCloud Storageのアクセス権を付与する必要があります.
ロールにStorageオブジェクト閲覧者を追加してください.
Cloud Storageのアクセス権がないサービスアカウントを用いると次のように怒られるはずです.
PermissionDenied: 403 hogehoge does not have storage.objects.get access to the Google Cloud Storage object.
サービスアカウントキーのパスを環境変数に設定する
先ほどダウンロードしたjsonファイルのパスを環境変数に設定します.
export GOOGLE_APPLICATION_CREDENTIALS=./hoge.json
WAVファイルをCloud Storageにアップロード
FLACファイルの文字起こし方法の記事を参考にして,WAVファイルをCloud Storageにアップロードしてください.オブジェクトの詳細画面を見ると,gsから始まるCloud Storage内のリソースへのファイルパスが確認できます.
文字起こしスクリプト
FLACファイルの文字起こし方法の記事を参考にして,作成させていただきました.
# # !/usr/bin/env python
# coding: utf-8
import argparse
import datetime
def transcribe(gcs_uri):
from google.cloud import speech_v1 as speech
from google.cloud.speech_v1 import types
client = speech.SpeechClient()
audio = types.RecognitionAudio(uri=gcs_uri)
# 音声ファイルのヘッダに書かれているので, サンプリング周波数は指定しなくて良い
config = types.RecognitionConfig(language_code='ja-JP')
operation = client.long_running_recognize(config, audio)
operationResult = operation.result()
now = datetime.datetime.now()
print('Waiting for operation to complete...')
with open('./{}.txt'.format(now.strftime("%Y%m%d-%H%M%S")), mode='w') as f:
for result in operationResult.results:
print("Transcript: {}".format(result.alternatives[0].transcript))
print("Confidence: {}".format(result.alternatives[0].confidence))
f.write('{}\n'.format(result.alternatives[0].transcript))
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument(
'path', help='cloud storage path start with gs://')
args = parser.parse_args()
transcribe(args.path)
文字起こしスクリプトの実行
引数にgs://から始まるCloud Storage内のリソースへのファイルパスを指定し,スクリプトを実行してください.
python transcribe.py gs://hogehoge.wav
結果
標準出力とテキストファイルとして結果が出てきます.
Transcript: 登録できそうなら
Confidence: 0.8765763640403748
Transcript: いた方がいいんじゃないかな
Confidence: 0.8419854640960693
登録できそうなら
いた方がいいんじゃないかな
参考
Author And Source
この問題について(WAVファイルをCloud Speech APIで文字起こしする), 我々は、より多くの情報をここで見つけました https://qiita.com/morux2/items/efc64c2cb2364141d586著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .