Speech-to-Text APIを使って文字起こしを試してみる

## はじめに
こんにちは。

現在 [株式会社Nexceed](https://www.wantedly.com/companies/nexceed) にてインターンを行っている学生です。
今回は議事録を自動生成したいということで音声認識のAPIの使い方を調べてみました。
以下に簡単な使い方の例とともに内容を紹介していきます。
議事録の自動生成については、次の記事でご紹介したいと思います。

## Speech-to-Textとは
Google Cloud Platform が提供している音声認識APIです。その名の通り、音声ファイルを渡すと認識結果を返してくれます。
音声認識には同期認識・非同期認識・ストリーミング認識の3種類があります。

#### 同期認識
1分未満の音声の認識ができます。音声コンテンツを直接埋め込んだリクエストを送ることができるので、簡単に認識結果を取得することができます。

#### 非同期認識
3時間未満の音声の認識ができます。こちらは音声コンテンツの埋め込みが出来ないため、一度Google Storageに音声をアップロードしておき、そのURIを渡します。
少しステップは多くなってしまうものの、長時間の音声を高い精度で認識することができます。

#### ストリーミング認識
ストリーミング形式での音声認識です。1分未満の音声の認識ができます。反応が非常に早く、発話中に認識結果が返されます。
リアルタイムでの音声認識に適しています。

##  事前準備
以下を参考にGCPのプロジェクトを作成しておきます。
[Google Cloud Platform の簡単スタートアップガイド](http://goo.gl/ua5fQw)

## Speech-to-Text APIを有効化する
左のナビゲーションメニューから、「APIとサービス」 > 「ライブラリ」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/233809/191bef31-2fcb-1bef-9344-b3e7864ebd70.png)

「機械学習」の中から「Cloud Speech-to-Text API」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/233809/ee37bdeb-bef1-6fcc-a91d-a59d993569f2.png)

「有効にする」を選択し、APIを有効化します。(有効にした後は「管理」に表示が切り替わります)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/233809/7ca1cc43-3118-dd3a-fa25-df763d684878.png)

## API認証を行う
以下を参考にAPI認証を行います。
[認証の開始](https://cloud.google.com/docs/authentication/getting-started?hl=ja)

## 必要なライブラリをインストール

```bash
> pip install google-cloud-speech
```

## サンプルコード(同期認識)
```python
import io
import os

# Imports the Google Cloud client library
from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

# Instantiates a client
client = speech.SpeechClient()

# The name of the audio file to transcribe
file_name = "sample.flac"

# Loads the audio into memory
with io.open(file_name, 'rb') as audio_file:
    content = audio_file.read()
    audio = types.RecognitionAudio(content=content)

config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.FLAC,
    sample_rate_hertz=16000,
    language_code='ja-JP')

# Detects speech in the audio file
response = client.recognize(config, audio)
for result in response.results:
    print('Transcript: {}'.format(result.alternatives[0].transcript))

```

## 実行結果

```bash
Transcript: おはようございます
Transcript: ウェザーニュースキャスターの鈴木里奈です今日3月11日月曜日の全国の天気をお伝えします
まずは今日の天気のポイントを見ていきましょう今日は低気圧が発達しながら関東付近を通過しますそのた
め桐谷からし日本にかけて広いエリアで雨が降ります標高の高い所では湿った雪となることもありそうです
また風も非常に強まる予想です関東では通勤や通学の時間帯に強い雨や強風落雷の恐れがありますので時間
に余裕を持った行動を心がけてください
```

## 用意した音声
```
おはようございます。ウェザーニュースキャスターの鈴木里奈です。今日3月11日月曜日の全国の天気をお伝えします。
まずは今日の天気のポイントを見ていきましょう。今日は低気圧が発達しながら関東付近を通過します。
そのため、東北から西日本にかけて広いエリアで雨が降ります。標高の高い所では湿った雪となることもありそうです。
また、風も非常に強まる予想です。関東では通勤や通学の時間帯に強い雨や強風落雷の恐れがありますので、時間に余裕を持った行動を心がけてください。
```

## 感想
ニュースのように明瞭に発音された音声ならば非常に高い精度で認識してくれるようです。
文字起こし結果をメモとして活用することも十分にできそうです。

## 次回
文字起こし機能を利用した議事録の自動生成を試してみようと思います。
[Speech-to-Text APIを利用した議事録の自動生成](https://qiita.com/saihara-k/items/560652020514159d38b0)


## 参考サイト
- [Google Cloud Speech API を使った音声の文字起こし手順](https://qiita.com/knyrc/items/7aab521edfc9bfb06625)
- [Google Cloud Platform の簡単スタートアップガイド](http://goo.gl/ua5fQw)
- [Cloud Speech-to-Text ドキュメント](https://cloud.google.com/speech-to-text/docs/?hl=ja)