Python プログラミング

【Python】GoogleSpeachAPIで音声ファイルから文字起こしをしてみる(音声認識)

この記事は約6分で読めます。

 

こんにちは、ミナピピン(@python_mllover)です。

今回はMENTAの案件でGoogleSpeachAPIを触ったので使い方を忘れないようにメモしておきます。

 

音声ファイルの作成

 

まず音声認識に使用する音声ファイル(.wav)を用意します。(既にお持ちの方はスルーしてください)

自分は以下のサイトからサンプルを調達しました。

url:https://choimitena.com/Audio/Sample

 

Google Speech APIの有効化

 

 

今回は認識にGoogle Speech APIを使うので、これを使えるように登録をしていきます.
やり方は以下の記事を参考にしました。

 

関連記事:【GCP】GoogleCloudPlatformでプロジェクトを作成してAPI鍵の作成&有効化する

 

プロジェクトを作成したらGoogleSpeachAPIAPIを有効化します。

https://console.cloud.google.com/speech//overview

 

ライブラリのインストール

 

$pip install google-api-python-client

 

スポンサーリンク
スポンサーリンク

音声認識(文字起こし)を実装する

 

これで準備は整ったのでPYthonのスクリプトで音声認識を実装してみましょう。GoogleSpeachAPIはGCPのcloudstrageと連携してストレージ上の音声ファイルの文字起こしをする方法は結構あったのですが、ローカルの音声ファイルをポストする方法はイマイチなかったので方法をメモしておきます。

 

import base64
import requests
import httplib2
from googleapiclient import discovery

#APIキーを設定
key = '自分のAPI鍵'
 
# API URL
DISCOVERY_URL = ('https://{api}.googleapis.com/$discovery/rest?version={apiVersion}')

#音声認識に使う音声ファイルのPATH
speech_file = r"C:\Users\81903\jupyter notebook\sampleTokyo2.wav"

#APIの情報を返す関数
def get_speech_service():
    http = httplib2.Http()
    return discovery.build(
        'speech', 'v1', http=http, discoveryServiceUrl=DISCOVERY_URL, developerKey=key)
 
def __recognize_speech(content):
    service = get_speech_service()
    service_request = service.speech().recognize(
        body={
            'audio': {
                'content': content.decode('UTF-8')
            },
            'config': {
                'encoding': 'LINEAR16',
                'sampleRateHertz': 48000,
                'languageCode': 'ja-JP',
            },
        })
    response = service_request.execute()
    return response

if __name__ == '__main__':
    #音声ファイルを開く
    with open(speech_file, 'rb') as speech:
        speech_content = base64.b64encode(speech.read()) 
    resp = __recognize_speech(speech_content)
    print(resp['results'])

 

 

<実行結果>

[{‘alternatives’: [{‘transcript’: ‘浅野朋美です’, ‘confidence’: 0.80960286}], ‘languageCode’: ‘ja-jp’}, {‘alternatives’: [{‘transcript’: ‘今日の東京株式市場で日経平均株価は小幅続伸となっています終値は昨日に比べ22円72銭高の11088円508000円でしたどうしよう1部の値上がり銘柄数は1146対して値下がりは368変わらずは104銘柄’, ‘confidence’: 0.9505427}], ‘languageCode’: ‘ja-jp’}]

 

APIのリクエストは1日辺り60分までは無料でそこから料金が発生するみたいです。

 

ハマった点

 

エンコード

 

postする際に音声ファイルのエンコードとでコードがうまくいっていないとreturnのresultsに戻り値がなく{‘totalbilledtime’:0}というものが返ってくる。最初これが何を意味しているのか分からずにかなりの時間を要しました。

 

あとconfigの’encoding’形式も音声ファイルによって適した形があるらしく(LTACなど)ファイルによって指定する方式が違うみたいです。

 

モノラル出力

 

音声ファイルには詳しくなかったのですが、wavにはステレオ出力とモノラル出力があるらしく、GoogleSpeachAPIでの音声認識はモノラル出力にしか対応していないみたいなのでステレオ出力のファイルはモノラルに変換してからあげないといけないみたいです。

 

“Must use single channel (mono) audio, but WAV header indicates 2 channels.”. Details: “Must use single channel (mono) audio, but WAV header indicates 2 channels.”

 

config

 

音声ファイルによってsampleRateHertzの値を48000とか44100とか8000に変えないとAPIがうまく叩けない。(理由知っている人がいたらTwitterで教えてください)

 

 

参考:https://dev.classmethod.jp/articles/voice-to-text-with-twilio-and-speech-api/

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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