Amazon Transcribeで音声の文字起こしを行う。

# はじめに
AWSチュートリアルにAmazon Transcribeを使ったチュートリアル「[音声を文字起こしする](https://aws.amazon.com/jp/getting-started/tutorials/create-audio-transcript-transcribe/)」というのを見つけたので、これをaws-cliで試してみました。

# 準備
まずは文字起こしをする音声ファイルの置き場所となるバケットを作成します。

```bash:S3バケットの作成
$ aws s3 mb s3://trnsrb-test
make_bucket: trnsrb-test
```

作成したら、そのバケットへ音声ファイルをアップロードします。
今回はチュートリアルにある[サンプル音声](https://d1.awsstatic.com/tmt/create-audio-transcript-transcribe/transcribe-sample.5fc2109bb28268d10fbc677e64b7e59256783d3c.mp3)を使いたいと思います。

```bash:ファイルのアップロード
$ aws s3 cp ./transcribe-sample.mp3 s3://trnsrb-test
upload: ./transcribe-sample.mp3 to s3://trnsrb-test/transcribe-sample.mp3
```

```bash:確認
$ aws s3 ls s3://trnsrb-test
2020-03-07 11:27:35     420049 transcribe-sample.mp3
```


# 実践
準備ができたら文字起こしの開始です。

## 文字起こし
文字起こしで実行するには [start-transcription-job](https://docs.aws.amazon.com/cli/latest/reference/transcribe/start-transcription-job.html) を使います。このコマンドで**「非同期ジョブを開始して、オーディオファイルの音声をテキストに文字起こし」**を行います。


```bash:文字起こしの開始
$ aws transcribe start-transcription-job \
> --transcription-job-name trans-test \
> --language-code en-US \
> --media-format mp3 \
> --media MediaFileUri=s3://trnsrb-test/transcribe-sample.mp3 \
> --output-bucket-name trnsrb-test
{
    "TranscriptionJob": {
        "TranscriptionJobName": "trans-test",
        "TranscriptionJobStatus": "IN_PROGRESS",
        "LanguageCode": "en-US",
        "MediaFormat": "mp3",
        "Media": {
            "MediaFileUri": "s3://trnsrb-test/transcribe-sample.mp3"
        },
        "StartTime": "2020-03-07T11:44:32.349000+09:00",
        "CreationTime": "2020-03-07T11:44:32.316000+09:00"
    }
}
```

|オプション                  |説明 |
|---                      |--- |
|--transcription-job-name |実行するジョブ名 |
|--language-code          |メディアファイルで使われている言語コード |
|--media-format           |メデイアファイルのフォーマット |
|--media                  |メディアファイルのURI|
|--output-bucket-name     |書き起こしたテキストの出力先 |


## ジョブの確認
では、ジョブを確認してみます。
まず、[list-transcription-jobs](https://docs.aws.amazon.com/cli/latest/reference/transcribe/list-transcription-jobs.html) では開始された文字起こしジョブのリストを確認できます。

```bash:ジョブの一覧
$ aws transcribe list-transcription-jobs
{
    "TranscriptionJobSummaries": [
        {
            "TranscriptionJobName": "trans-test",
            "CreationTime": "2020-03-07T11:44:32.316000+09:00",
            "StartTime": "2020-03-07T11:44:32.349000+09:00",
            "CompletionTime": "2020-03-07T11:45:16.075000+09:00",
            "LanguageCode": "en-US",
            "TranscriptionJobStatus": "COMPLETED",
            "OutputLocationType": "CUSTOMER_BUCKET"
        }
    ]
}
```

さらに、文字起こしジョブの結果は [get-transcription-job](https://docs.aws.amazon.com/cli/latest/reference/transcribe/get-transcription-job.html) で確認することができます。

```bash:ジョブ情報の確認
$ aws transcribe get-transcription-job --transcription-job-name trans-test
{
    "TranscriptionJob": {
        "TranscriptionJobName": "trans-test",
        "TranscriptionJobStatus": "COMPLETED",
        "LanguageCode": "en-US",
        "MediaSampleRateHertz": 44100,
        "MediaFormat": "mp3",
        "Media": {
            "MediaFileUri": "s3://trnsrb-test/transcribe-sample.mp3"
        },
        "Transcript": {
            "TranscriptFileUri": "https://s3.ap-northeast-1.amazonaws.com/trnsrb-test/trans-test.json"
        },
        "StartTime": "2020-03-07T11:44:32.349000+09:00",
        "CreationTime": "2020-03-07T11:44:32.316000+09:00",
        "CompletionTime": "2020-03-07T11:45:16.075000+09:00",
        "Settings": {
            "ChannelIdentification": false,
            "ShowAlternatives": false
        }
    }
}
```

`TranscriptionJobStatus`が*COMPLETED*になり、`TranscriptFileUri`に文字起こしされた結果の出力先URIが確認できます。


# 確認
それでは保存先に指定したバケットを確認してみます。
バケットの中を確認すると`trans-test.json`ができているのが確認できます。

```bash:ファイル確認
$ aws s3 ls s3://trnsrb-test
2020-03-07 12:27:06          2 .write_access_check_file.temp
2020-03-07 12:28:11       9861 trans-test.json
2020-03-07 11:27:35     420049 transcribe-sample.mp3
```

それではダウンロードして確認してみます。

```bash:ダウンロード
$ aws s3 cp s3://trnsrb-test/trans-test.json ./
download: s3://trnsrb-test/trans-test.json to ./trans-test.json
```

ファイルには文字起こしされたテキストだけではなく、実行ジョブに関する情報なども保存されているため、`jq`を使うと見易く表示できるのでおすすめです。

```bash:内容確認
$ cat trans-test.json |jq .results[][0].transcript
"machine learning is employed in a range of computing tasks where designing and program explicit algorithms with good performance is difficult or infeasible. Example. Applications include email filtering, detection of network intruders and computervision. Machine learning is closely related to computational statistics, which also focuses on predictions making through the use of computer. It has strong ties to mathematical optimization, which delivers methods, theory and application domains to the field."
```

今回文字起こしした内容が確認できました。


# 後片付け
今回テストで作成したものは削除しておきます。削除作業は作成した順番とは逆に行うとスムーズに行えます。

### ジョブの削除
まずはジョブの削除です。[delete-transcription-job](https://docs.aws.amazon.com/cli/latest/reference/transcribe/delete-transcription-job.html) で登録されたジョブを削除します。

```bash:ジョブ削除
$ aws transcribe delete-transcription-job --transcription-job-name trans-test
```

```bash:削除確認
$ aws transcribe list-transcription-jobs
{
    "TranscriptionJobSummaries": []
}
```

## s3バケットの削除
最後にバケットの削除を行います。

```bash:バケットの中身の削除
$ aws s3 rm s3://trnsrb-test --recursive
delete: s3://trnsrb-test/transcribe-sample.mp3
delete: s3://trnsrb-test/.write_access_check_file.temp
delete: s3://trnsrb-test/trans-test3.json
```

```bash:バケットの削除
$ aws s3 rb s3://trnsrb-test
remove_bucket: trnsrb-test
```

以上で完了です。


# おわりに
普段触れない分野と言うこともあり、まずは「どんなものなのか触れてみる」というのを目的に試しました。
とてもサクッとできて面白いので、今度は何か自分で言葉を録音して試してみようと思います。

---
[参考ドキュメント]
・[AWS CLI Command Reference - transcribe](https://docs.aws.amazon.com/cli/latest/reference/transcribe/index.html#cli-aws-transcribe)
・[AWS CLI Command Reference - s3](https://docs.aws.amazon.com/cli/latest/reference/s3/index.html)
・[AWSチュートリアル：音声を文字起こしする](https://aws.amazon.com/jp/getting-started/tutorials/create-audio-transcript-transcribe/)