Help us understand the problem. What is going on with this article?

Google APIを使って音声ファイルを自動でテキストに文字起こしする

More than 1 year has passed since last update.

はじめに

打ち合わせで録音した90分×4ぐらいの音声ファイルを文字起こしする機会があり、初めは2倍速ぐらいで聞いてまとめていたのですが、途中からこれ時間の無駄じゃないかな?今の時代いい感じにやってくれる自動ツールがあるはず!と思い探してみたのがきっかけです。

こんな方法を見つけたので試してみるも、アクティブ状態関係なく入力が止まってしまう状況が発生し上手くいかず。。
そこで見つけたのがGoogle Cloud Speech API。これはいける!と思いさっそく試してみました。

Google Cloud Platformとは

https://cloud.google.com/?hl=ja

Google Cloud Speech APIとは

https://cloud.google.com/speech/?hl=ja

1. アカウント作る

1-1. Googleアカウントを作成

1-2. https://console.cloud.google.com/ にてアカウント作成

2. Google Cloud Speech APIを使う設定をする

Google Cloud Platformコンソール画面のナビゲーションメニューから、「APIとサービス」>「ダッシュボード」>「APIとサービスの有効化」を押して

スクリーンショット 2018-07-07 23.13.51.png

speechと検索して出てきた以下の2つを有効化を行います。

スクリーンショット 2018-07-07 23.12.09.png

APIの設定方法については、https://support.google.com/cloud/answer/6158841?hl=jaとかが参考になりそうです。

3. Google Cloud ShellでAPI認証するための設定をする

右上のコンソールボタン(四角いやつ)を押して、Shellを起動します。

(ちなみにgitやphpなどはプリインストールされているみたいです)

ここで念のため、APIをアップデートしておきました。

$ sudo pip install --upgrade google-cloud-speech

3-1. 認証情報を作成する

スクリーンショット 2018-07-07 23.36.37.png

具体的には、サービスアカウントキーを作成します。

  • キータイプは json
  • 役割は 「Project」>「オーナー」 を選択

スクリーンショット 2018-07-07 23.50.06.png

ダウンロードしたjsonのファイル名をよしなに変更してから、
Google Cloud Shellにて、ダウンロードした認証用のJSONファイルをアップロードする

$ export GOOGLE_APPLICATION_CREDENTIALS=[jsonのファイル名].json

4. 音声ファイルを準備

使っていたレコーダーアプリ.wav形式だったので、今回はこれをそのまま利用する。

5. Google Cloud Strageの作成

説明 : https://cloud.google.com/storage/?hl=ja

ナビゲーションメニューから、「Storage」>「ブラウザ」を押して

スクリーンショット 2018-07-08 2.57.18.png

「パケットを作成」を選択

スクリーンショット 2018-07-08 0.03.15.png

以下のような任意の設定で作成します。
※ 「課金を有効にする」設定を行わないとファイルをアップロードできないようなので、注意

スクリーンショット 2018-07-08 0.05.18.png

※ 詳しくは、https://cloud.google.com/storage/docs/quickstart-console?hl=jaを参考

6. 音声ファイルをGoogle Cloud Storageにアップする

GUI上で、先ほど作成したGoogle Cloud Storageのパケット内にアップロードします。

7. 文字起こしをする準備

下記Pythonファイルを任意の場所に新規作成します。

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(
        encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, # wavの設定
        sample_rate_hertz=16000, # ヘルツは音声ファイルに合わせる
        language_code='ja-JP') # 日本語音声の場合

    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)

9. 実際に文字起こしをする

$ python transcribe.py gs://[パケット名]/[音声データ名].wav

9-1. ヘルツが設定したものと合っていない時に出るエラー

google.api_core.exceptions.InvalidArgument: 400 Invalid recognition 'config': bad sample rate hertz.

Pythonのヘルツ設定部分を音声ファイルのものと合わせれば解決します。

9-2. 参照エラー

google.api_core.exceptions.PermissionDenied: 403 Cloud Speech API has not been used in project・・・

新規にサービスアカウントを取り直すことで解決することがあるらしいです。

10. 結果の見方

文字起こしの結果は、output****.txtというファイルでカレントディレクトリに作成されます。
jsonファイルをアップした時同様、shellのメニューからローカルにダウンロードすることで確認ができます。

※今回、約60分のwavァイルの書き出しにつき30分ぐらいかかりました。

11. 感想

複数人での打ち合わせで、かつ、人によって声の大きさや特徴も違う(録音音声データ自体が良いものではない)ため、正直そんなには期待をしていませんでした。
結論的には、句読点や改行がないため読みづらいものの、内容を知っている人間であれば読み解くことは可能ぐらいの精度結果となりました。
一目で何を言っているか分かる!ほどではないですが、実際、初めから録音データを聴き直さなくても一目である程度の文脈が分かるわけで結構役にたったりしました!

AWSやMSにも同じようなサービスがあると思うので、今後機会があればそちらも試してみたいと思います。

参考

https://qiita.com/kokky/items/659bde4cdc8ce5c78e29
https://qiita.com/hanlio/items/875b91e0d4931a57e86b

lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした