はじめてのGoogle AIY Voice Kit⑦【音声認識編】

# はじめに
前回のサンプルコード実行編の記事は[こちら](https://qiita.com/yuzuki6v6/items/2dedb4c19f86805b4e5a)から:information_desk_person:
今回はGoogleの「Cloud Speech-to-Text API」というAPI（音声をテキストに変換する）を使用し、音声認識の機能を試してみたいと思います。

**※「Speech-to-Text」を使用するためには、事前にGoogle Cloud PlatformでAPIを有効化し、秘密鍵（JSON）をホームディレクトリに配置しておく必要があります**

##Google Cloud Platformにログイン
①Googleアカウントを用意します。
②[Google Cloud Platform](https://console.cloud.google.com)にログインします。
以下の画像が表示された場合、[無料で使ってみる]を選択し、その後画面に表示される手順に沿って登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/88eb4eeb-76df-71a1-00b7-0e3174cef902.png)

##請求先アカウントの追加
ログイン後、左側に表示されるナビゲーションメニューの中から「お支払い」を選択し、請求先アカウントを追加します。
※請求先アカウントの追加はCloud Speech-to-Tex APIの利用に必須となっています

:::note info
Cloud Speech-to-Tex APIの請求について
月に60分未満使用する場合は無料です。
それを超えると、料金が15秒ごとに0.006ドルかかります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/8c5fe2f9-29a1-8d8a-8c83-2b99c3cb87ec.png)

##プロジェクトの作成
Google AIY Voice Kitで使用する全てのAPIを管理するプロジェクトを作成します。

①画像のように▼マークがある箇所を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/116bcd64-f4c2-dfaf-21dd-9821ff8108b6.png)

②[新しいプロジェクト]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/a7e2ac7c-9c90-8ef0-44a4-1c7c72aeec4c.png)

③以下のように、プロジェクトを設定します。

>**・プロジェクト名：任意のプロジェクト名を入力**
**・プロジェクトID：任意でプロジェクトIDをデフォルトのIDから変更**
>**・場所：「組織なし」を選択**
>
>**[作成]ボタン押下**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/f2d762df-5a9d-0542-a29a-2f8b7362b91e.png)


④作成したプロジェクトを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/f4ea5668-f729-269f-54c8-4cdd2c051100.png)

##APIの有効化
①ナビゲーションメニューの中から「APIとサービス」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/c2132015-b61d-e4bf-c0a1-1887570dfb00.png)

②画面上部の[APIとサービスの有効化]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/e54b67f9-68c5-552f-0325-1124cafc43d9.png)

③検索欄に、「Cloud Speech-to-Text」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/e804797b-ec78-f5fc-6d11-a7b4574c0532.png)

④一番上の「Cloud Speech-to-Text API」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/450e0871-51cc-f771-4ca9-1c67eab26756.png)

⑤[有効にする]ボタンを押下し、APIを有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/e4c69e8a-745f-2184-fedd-3bd4f1d60bed.png)

⑥有効化後、[認証情報を作成]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/8deecea7-8afa-23ad-49ca-9457c016323a.png)


## 認証情報の作成
①画像のようなページが表示されるため、以下のようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/e6783acf-87e6-df5a-1d78-9bc3be7d51ec.png)

>**・使用するAPI：「Cloud Speech-to-Text API」を選択**
>**・アクセスするデータの種類：アプリケーションデータ」にチェック**
>**・APIの使用予定：「いいえ、使用していません」を選択**
>
>**[次へ]ボタン押下**
>
>**・サービスアカウント名：任意の名称を入力**
>**・サービスアカウントID：任意のIDを入力**
>**・サービスアカウントの説明：説明を任意で入力（入力しなくてもOK）**
>
>**[完了]ボタン押下**

②認証情報が作成されました。
③サービスアカウントを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/c7b45a91-6311-6384-7e51-a0c8895155d6.png)

##秘密鍵の作成

①メールの箇所を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/4564a026-c126-9d91-d9d4-3fe18203de92.png)

②「キー」タブから[鍵を追加]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/40165003-a768-ad1d-374f-a164182c4c42.png)


③秘密鍵のキータイプでは「JSON」を選択し、[作成]ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/88dc7ddd-8389-676d-25f4-6e47824c7ecc.png)

④秘密鍵がダウンロードされました！
[閉じる]ボタンを押下し、秘密鍵の作成を終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/fed3cbd4-043f-163b-ad78-32e8c406cec0.png)

##秘密鍵のリネーム
ダウンロードた秘密鍵のファイル名には、プロジェクト名と番号が含まれています。フ
ファイル名を` cloud_speech.json` にリネーム（ファイル名を変更）します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/1e9af2c5-f57c-cac5-a410-6db61143b68c.png)

##秘密鍵をラズパイ上に配置
・リネームした秘密鍵` cloud_speech.json`をラズパイのホームディレクトリに配置します。

・秘密鍵は任意のディレクトに配置しておきます。
以下のディレクトリに配置しました。（今回は公式サイトと同じように実施しましたが、任意のディレクトリでOKです）
>**c:\Users\【ユーザー名】\\path\to\downloaded\cloud_speech.json**


①Visual Studio Codeを起動します。
②Visual Studio Codeのターミナルを開きます。
③以下のcdコマンドでカレントディレクトリ（今回はCドライブ）から、` cloud_speech.json`まで移動します。

```
cd Users\【ユーザー名】\path\to\downloaded\cloud_speech.json
```

④以下のscpコマンドで秘密鍵をラズパイのホームディレクトリにコピーします。

```
scp cloud_speech.json pi@raspberry.local:~/
```

⑤ラズパイのパスワードを聞かれるため、パスワードを入力します。
⑥` cloud_speech.json`と表示されたらコピー成功です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/095dcfa9-8123-3333-5be6-efd1c59472b6.png)

秘密鍵がラズパイのホームディレクトリに配置されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/8c3f9328-d519-ddad-3e7a-098e94fabd17.png)

##コード記述、プログラム実行
秘密鍵をラズパイのホームディレクトリに配置したら、Pythonファイルを作成し以下のサンプルコードを記述します。

①以下のコマンドでPythonファイル「speech-to-text.py」を作成します。

```
sudo vi speech-to-text.py
```

②作成したPythonファイル「speech-to-text.py」に以下のコードを記述します。

```python
#!/usr/bin/env python3
import datetime
from aiy.board import Board
from aiy.cloudspeech import CloudSpeechClient

print('Speech To Text（書き取り）のサンプルです（"終了"と言うと終了します）')
client = CloudSpeechClient()
with Board() as board:
    while True:
        print('聴き取り中・・・')
        text = client.recognize(language_code='ja-JP',
                                hint_phrases=('今何時', '今日の天気は', '終了'))
        if text is None:
            print('何かしゃべってよ')
            continue

        print('「{}」と言いましたね！'.format(text))

        if '今何時' in text:
            now = datetime.datetime.now()
            print(now)
        if '今日の天気は' in text:
            print('たぶん晴れじゃないかなあ')
        elif '終了' in text:
            print('え？もう行っちゃうの・・・？')
            break
```

③以下のコマンドを入力し、「speech-to-text.py」を実行します。

```
python3 speech-to-text.py
```

## 実行結果
**Voice Kitに向かって「こんにちは」と言うと…**
**無事に聞き取ってくれました！**
**「終了」と言うと聴き取りが終了します。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/921847/ec63f838-ece5-dfa2-845f-51bcf65684d5.png)