AWS Transcribeで録音した音声を文字起こししてみた
議事録の作成の手間が省けるといいんだけど。。。

目次
TL;DR
本記事でわかることは以下の通りです。
☆ aws transcribeの使い方
☆ lambdaの基本的な文法
☆ 音声を文字起こしするまでの手順
構築図
input bucketへのアップロードをトリガーに音声ファイルを文字起こしの処理が走る想定です。
手順
1. bucketの作成(インプットとアウトプット用の2つ)
2. IAMロールの作成
3. transcribe_functionの作成
4. output bucketの中身を確認
1. S3バケットの作成
Lambdaのトリガー設定時に、下記のような注意書きがあるように、入出力のバケットは分けた方が良い
2. IAMロールの作成
S3とTranscribeへのフルアクセス権限を付与
操作内容が明白な場合は絞り込んだ方が良いが、個人環境なので、一旦はフルアクセス権限を付与
3. Lambda関数の作成
設計図の使用を選択して、関数を作成する
- 既存のロールに先ほど作成したロールを選択
- s3トリガーにinput bucketを指定する
import json
import urllib.parse
import boto3
import datetime
s3 = boto3.client('s3')
transcribe = boto3.client('transcribe')
def lambda_handler(event, context):
#print("Received event: " + json.dumps(event, indent=2))
# Get the object from the event and show its content type
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
try:
transcribe.start_transcription_job(
TranscriptionJobName= datetime.datetime.now().strftime("%Y%m%d%H%M%S") + '_Transcription',
LanguageCode='ja-JP',
Media={
'MediaFileUri': 'https://s3.ap-northeast-1.amazonaws.com/' + bucket + '/' + key
},
Setting={
'ShowSpeakerLabels': 'True',
'MaxSpeakerLabels': 2,
},
OutputBucketName='your-output-bucket-name'
)
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket))
raise e
input bucket の情報取得している箇所
import boto3
s3 = boto3.client('s3')
#トリガーとなるインプットバケットからバケットとオブジェクト名を取得
bucket = event['Records'][0]['s3']['bucket']['name']
key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8')
transcribeの実装箇所
transcribe.start_transcription_job(
TranscriptionJobName= datetime.datetime.now().strftime("%Y%m%d%H%M%S") + '_Transcription',
LanguageCode='ja-JP',
Media={
'MediaFileUri': 'https://s3.ap-northeast-1.amazonaws.com/' + bucket + '/' + key
},
Setting={
'ShowSpeakerLabels': 'True',
'MaxSpeakerLabels': 2,
},
OutputBucketName='your-output-bucket-name'
)
- transcribejobは一意である必要があるため、date関数を使用
- 言語は、日本語を指定
- スピーカーの数を指定
その他、パラメータの詳細は下記を参照
https://docs.aws.amazon.com/ja_jp/transcribe/latest/dg/API_StartTranscriptionJob.html
4. output bucketの中身を確認
テキスト化されたファイルがjson形式で出力されていれば一連の処理は成功です。
ただ、インデントが整形されていないので、
以下のような整形ツールを使用して人間にも優しい形にしましょう。
https://tools.m-bsys.com/development_tooles/json-beautifier.php
まとめ
試しにtranscribeを使用してみましたが、性能がイマイチなような気がしています。
(録音環境にもよると思うので一概には言えませんが。。)
AWS Transcribe 側で文字起こし性能を向上させるためにできることとしては
- スピーカーの数を指定
- カスタム語彙(固有名詞、専門用語)の登録
でしょうか。
議事録作成の手間を少しでも省ければと思いましたが、もう少し試行錯誤が必要そうです。