Google Cloud Speech APIを使って音声ファイルから文字起こし

Google音声入力APIを使ってDialogflowでの口語会話の実現を目指します

#1. Google音声認識APIを試してみる
- [CLOUD SPEECH API](https://cloud.google.com/speech/?hl=ja&authuser=3)でサインアップして、音声認識を試してみます

<img width="1321" alt="スクリーンショット 2018-02-26 17.02.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/eae657fb-b1d3-d0ba-5543-56c3afe7ee32.png">

- 試してみて、使えそうであれば、次はプログラムからこの機能を呼び出し（API)て使用してみます。次項へどうぞ。

#2. Google Cloud Speech APIを使用可能にします
-[Google Cloud Speech クイックスタート](https://cloud.google.com/speech/docs/getting-started?authuser=1&hl=ja)などを参照し、Google Cloud PlatformコンソールでCloud Speech APIを使用するプロジェクトを用意し、Cloud Speech APIを有効化します

#3. Google Cloud Speech APIの認証
- [Google Cloud Speech API に対する認証]（https://cloud.google.com/speech/docs/auth?authuser=1&hl=ja）の「サービスアカウントの使用」を参照し、Google Cloud Platformコンソールで前項で準備したプロジェクトが選択されていることを確認し、画面左上の三本線から「APIとサービス」を選択します

<img width="282" alt="スクリーンショット 2018-04-10 22.39.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/c5d09c1e-8479-d3a0-8541-2f92ab05ab5c.png">

- 「APIとサービス」画面で「認証情報」を選択します
- 「認証情報」の画面で「サービスアカウントキー」を作成します

<img width="775" alt="スクリーンショット 2018-04-10 22.39.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/227122ee-590d-47d1-a8b6-aed09e94b926.png">

- 「サービスアカウントキーの作成」画面で、サービスアカウントを選択もしくは新規作成し、「JSON」形式でキーファイルを生成し、ダウンロードします。`プロジェクト名-xxxxx.json`ファイルがダウンロードされます

<img width="737" alt="スクリーンショット 2018-04-10 22.40.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/9e21ae7a-ae44-f304-9723-91d799b3de9b.png">

#4. サンプルアプリを用意します
- [Google Cloud Speech API - ドキュメント サンプル・アプリケーション](https://cloud.google.com/speech/docs/samples?authuser=1&hl=ja) の[Python 非ストリーミングおよびストリーミング音声認識サンプル - GoogleCloudPlatform/python-docs-samples
](https://github.com/GoogleCloudPlatform/python-docs-samples/tree/master/speech)を参照し、[GoogleCloudPlatform/python-docs-samples](https://github.com/GoogleCloudPlatform/python-docs-samples)のページからサンプルプログラムを含むzipファイルをダウンロード（緑色のボタン）もしくは`git clone`します。
- このデモで使用するのは[GoogleCloudPlatform/
python-docs-samples/speech/cloud-client/transcribe.py
](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/speech/cloud-client/transcribe.py)です

#5. 実行環境を準備します
- 下記のコマンドで環境変数として前々項でダウンロードしたjsonファイルを指定して認証情報を設定します

```
export GOOGLE_APPLICATION_CREDENTIALS=XXXXX-XXXXXXXXXXXX.json
```
- ターミナルを開き、上記のファイルをダウンロード／解凍したフォルダへ移動し、

```
pip install -r requirements.txt
```
で必要な道具をインストールします

- 下記のコマンドを実行し、サンプルファイル（`audio.raw`)に含まれる言葉を文字にしてみます

```
cd python-docs-samples-master/speech/cloud-client
python transcribe.py resources/audio.raw 
```
下記の結果が得られることを確認します。

```
Transcript: how old is the Brooklyn Bridge
```

#6. 日本語で録音した音声ファイルを用意します
- 末尾の参考情報2. [WAVでの録音 - mattdiamond/Recorderjs](https://github.com/mattdiamond/Recorderjs)
または3. [FLACでの録音 - mmig/speech-to-flac](https://github.com/mmig/speech-to-flac)を参照して日本語で録音した音声ファイルを用意します


#7. 日本語用プログラムを用意し、実行してみます
- 上記の`transcribe.py`をコピーして日本語用のプログラムを用意します

```
cp transcribe.py transcribe_jp.py
```

- 上記のプログラムを[atom](https://atom.io/)などで開き、下記の箇所を編集します

```python:transcribe_jp.py
def transcribe_file(speech_file):
:
    config = types.RecognitionConfig(
        encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
        sample_rate_hertz=44100,
        language_code='ja-JP')
```
- `RecognitionConfig.AudioEncoding`は音声ファイルが　FLACであれば`FLAC`、WAVファイルであれば`LINEAR16`に設定します
- `sample_rate_hertz`は録音した際の録音レート（周波数）に設定します
- `language_code`は`ja-JP`に設定します（日本語であれば。）　サポートされている言語は[Google Cloud Speech API - 言語のサポート](https://cloud.google.com/speech/docs/languages?hl=ja)で確認できます

- 実行してみます

```
python transcribe_jp.py resources/myaudio.flac 
```

うまくいきました。

```
Transcript: こんにちは
```


#8. 音声で入力した文字列をデータベースに格納する
- 音声情報が取得できたら、Google音声認識APIを使って文字列への変換を試みます。Google音声認識APIはPOST https://speech.googleapis.com/v1/speech:recognize?key=YOUR_API_KEYの形式で送付します
- Node-REDからのAPI呼び出しは[Node-RED - API呼び出ししてみる（ぐるなび）](https://qiita.com/egplnt/items/3a6ec71066025108e2ed)[Node-RED - API呼び出ししてみる（Zoho）](https://qiita.com/egplnt/items/651d13e3df70b3222943)などが参考になります

#9． Dialogflowと連携します
- [Dialogflowでチャットボットをつくってみる](https://qiita.com/ume1126/items/5955a0680c430a1cf25f)などを参照してDialogflowのフローを用意します
- APIを確認します
- API呼び出しで前項で入手した日本語文字列をDialogflowへ渡します
- 返却されるchatの答えをGoogle HomeやPepperなどで喋らせてみます

#参考情報
1. [Google Cloud Speech API ドキュメント ](https://cloud.google.com/speech/docs/?authuser=1&hl=ja)
2. [WAVでの録音 - mattdiamond/Recorderjs](https://github.com/mattdiamond/Recorderjs)
3. [FLACでの録音 - mmig/speech-to-flac](https://github.com/mmig/speech-to-flac)