Python + Google Cloud Speech APIで電脳少女シロの発言をテキスト化したい

# 概要
[前回の記事](https://qiita.com/alpha2048/items/c31d6b994beaf6eb3840)でVTuber月ノ美兎さんの発言を手動で集めていましたが、これをなるべく自動化できないか？というのをガチで検証した結果になります。 
今回は電脳少女シロちゃんの音声で試してみます。いくぜいくぜいくぜー！
![siro.jpg](https://qiita-image-store.s3.amazonaws.com/0/99605/781ccbfc-1615-2a98-19c0-038a5b17afa9.jpeg)

# やり方
VTuberの動画音声を抜き出す 
↓ 
Speech to Textサービスに通す 
↓ 
あーくまのちから、みにつーけたー

# 使用したもの
- Mac
  - 他OSでも動くと思いますが一応
- シロちゃんの音声
  - [【女子実況】今回の目的はアレです！【キラー編】](https://www.youtube.com/watch?v=rSk55HHobd0)
- Google Speech to Text
  - 今回は有名なSpeech to Textサービスということで、Google Cloud Speech APIを使ってみます。  
  - [Google Cloud Speech API](https://cloud.google.com/speech/?hl=ja)  
  - [ドキュメント](https://cloud.google.com/speech/docs/basics?hl=ja)  
  - [Pythonのサンプル](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/cloud-client)

# 手順説明
下記の記事で基本的なやり方が書いてあります。 
[Google Cloud Speech API を使った音声の文字起こし手順](https://qiita.com/knyrc/items/7aab521edfc9bfb06625) 
今回はこちらをベースに、ローカル環境で実行する手順を整理します。

## 事前準備
※Mac環境を想定 
事前にPythonのインストールや、virtualenvのインストールをしておきましょう。

```sh:コマンド
# virtualenvインストール
$ pip install --upgrade virtualenv

```

## 1. Google Cloud Speech APIを有効化
Google Cloud PlatformからCloud Launcherから検索して有効化しましょう。

<img width="1357" alt="cloudspeechapi2.png" src="https://qiita-image-store.s3.amazonaws.com/0/99605/c0cb9b45-8452-ea1d-d4c4-5820550f8e29.png">


<img width="1339" alt="cloudspeechapi3.png" src="https://qiita-image-store.s3.amazonaws.com/0/99605/f2f6f7f4-364b-ab8b-49fa-370da25f5f2c.png">


## 2. APIキー(JSON)を取得
認証情報から"サービスアカウントキー"を作成します。  

<img width="1248" alt="cloudspeechapi6.png" src="https://qiita-image-store.s3.amazonaws.com/0/99605/a55e2e42-0e18-1f37-f04a-e9e7e35b8c39.png">

下記のように作成します。**作成後、JSONがダウンロードされるので、失くさないように気をつけましょう。**

<img width="1245" alt="cloudspeechapi7.png" src="https://qiita-image-store.s3.amazonaws.com/0/99605/8413272f-5b00-f8c7-89b6-47a99db77a7a.png">



## 3. 音声データの準備

### 3.1 動画音声をダウンロードする。
動画のダウンロードなどをして準備します。 
本当は公式に許可取ったほうがよさそう。今回は個人的利用なのでゆるして。

### 3.2 動画音声を変換する。
下記に変換します。
- FLAC
- mono
- 16kHz
- 16bit
[変換サイト](https://audio.online-convert.com/convert-to-flac)や[Audacity](http://www.audacityteam.org/)などで変換。 
もしくは[sox](https://www.magellanic-clouds.com/blocks/guide/cloud-speech-api-audio-encoding/)を使いましょう。

```sh:コマンド
brew install lame
brew install sox
sox **.mp3 --rate 16k --bits 16 --channels 1 siro_killer.flac

```

### 3.3 [Google Cloud Storage](https://cloud.google.com/storage/?hl=ja)にupする。
1分以上の長い動画の場合はuri指定でないと通りません。 
現在はCloud Storageのみ対応らしいので、適当にバケット作ってupしましょう。

<img width="1175" alt="cloudstorage3.png" src="https://qiita-image-store.s3.amazonaws.com/0/99605/c9703409-941f-c3c0-fcd3-64dc97dd6774.png">


## 4. 変換プロジェクト作成
[元々のPythonのサンプル](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/cloud-client)でもできますが、 
ローカル用に弄ったものを[Github](https://github.com/alpha2048/speech_to_text_async)にupしておきました。  
先ほどダウンロードしたJSONファイルで認証する必要があるので、上記を使う場合はJSONファイルの場所を記載してください。

```sh:コマンド
# 適当にプロジェクトフォルダ作成
$ mkdir VTuberSpeechToText
$ cd VTuberSpeechToText/

# virtualenvを使用
$ virtualenv --python python3 env
$ source env/bin/activate

# speech to textのライブラリインストール
# 事前にファイルをダウンロードしておくこと
$ pip3 install -r requirements.txt

# 環境変数の登録が必要だが、Python内に記載済

```

# 実行
準備が完了したら、早速実行してみます。

```sh:コマンド
$ python3 transcribe_async_jp_local.py gs://バケット名/siro_killer.flac

```

音声が長い場合、結果が返ってくるまでそこそこ時間がかかります。シロちゃんの最新動画を見て暇つぶしします。

# 結果
```sh:
Transcript: こんにちはしろデッドバイデイライト実況始めていきたいと思います今ねあの城に殺される予定の方が違うの一人だけでかなり目確定しましたねことで今回も右が見て分かりかと思うんですがやっぱりするの大好きなこの世界の裏の地図を切り取ってきますこちらヒルビリーですねはいヒルビリー dbd ヒルビリーかなどうでもいいですねとりあえずこのゲームで大事なことは自動車を脱出させないこと命の音流れさせないこととりあえず今回は本当にご確認と女騎士の極みになりたいと思っていますお酒は良くないということに反応頑張ります
Confidence: 0.946415364742279
Transcript: 女子チャットスイッチを切り替えました本気で行くぞ
Confidence: 0.9222100377082825
Transcript: あの結構コメントで出た何でしたっけそんなかおしで色々できるよとか教えていただいて本当によかってなかったんだな勉強になりました
Confidence: 0.9106197357177734
Transcript: クリスマスがありますよね
Confidence: 0.8669179677963257
...

```
全文はGithubにもupしてます。 
シロちゃんのカオス発言がさらにカオスになってる件。
SpeechAPIは謀反マンだった..？

# 感想
話し言葉を聞き取るのはさすがにきついようですね。そもそも、ところどころ日本語が聞き取れていない部分があるので、うまく音声を加工したりすればもう少し精度良くなるかも。 
[IBMのSpeech to Text API](https://www.ibm.com/watson/jp-ja/developercloud/speech-to-text.html)も試してみようかな。

# 料金について
Google Speech to Textは下記の料金体系となっています。1ヶ月単位です。

| 機能 | 0～60 分| 	60 分超、100 万分まで |
|-----------|------------|------------|
| 音声認識 | 無料 | $0.006 米ドル/15 秒(切り上げ) |

**意識せずに変換しまくっていると莫大なお金が請求されることになります。ご注意ください！** 
今回のシロちゃんの動画は20分なので、無料分を超過すると1回0.5ドル程度の料金が必要です。やりすぎて財布がぱいーんされないように気をつけなければ...

# 参考情報まとめ
[電脳少女シロ (公式)](https://www.youtube.com/channel/UCLhUvJ_wO9hOvv_yYENu4fQ) 
[Google Cloud Speech API](https://cloud.google.com/speech/?hl=ja) 
[Google Cloud Speech API ドキュメント](https://cloud.google.com/speech/docs/basics?hl=ja) 
[Pythonサンプル](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech/cloud-client) 
[Google Cloud Speech API を使った音声の文字起こし手順](https://qiita.com/knyrc/items/7aab521edfc9bfb06625)