AWS Lambda + AI = 音声文字起こしと感情分析 (その3:S3+Lambda+Transcribeパイプライン)
AWSのホームページの初心者ハンズオンにある「AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン 」の内容を自分のAWSアカウントでやってみました。
前回投稿のTranscribeを実装した続きで、3パート目です。
ざっくりと基本構成を図で表してみて、S3+Lambda+Transcribe をパイプラインした構成です。
IAMロールにポリシーを追加
「transcribe-function-role」を検索
「transcribe-function-role」を追加
「ポリシーをアタッチします」をクリック
「AmazonTranscribeFullAccess」
をアタッチ
「ポリシーのアタッチ」をクリック
「AmazonS3FullAccess」をアタッチ
「ポリシーのアタッチ」をクリック
「AmazonTranscribeFullAccess」と
「AmazonS3FullAccess」が
追加された。
Lambda関数の変更
「aws sdk python」を検索し、「AWS SDK for Python (Boto3)」のリンクをクリックし、「API リファレンス 」をクリックし、
左メニューの「TABLE OF CONTENTS」にある「TranscribeService」を選択し、「start_transcription_job()」を表示する。
「start_transcription_job()」の説明を参考にして、以下のように修正
import json
import urllib.parse
import boto3
import datetime
s3 = boto3.client('s3')
transcribe = boto3.client('transcribe')
def lambda_handler(event, context):
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
},
OutputBucketName='*Your Output Bucket*'
)
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
Lambda関数の実行結果確認
再度、S3バケット
「mikolabo-serverless-input」
に音声ファイルをアップロード
アウトプット用S3バケットのリンクをクリック
格納されているjsonテキストを選択して、「名前つけてダウンロード」をクリック
表示されたjsonテキストのリンクをクリック
今回は、ぞの3:S3への音声ファイルのアップロードをトリガーとして、Lambda function を起動して、Transcribe で文字起こしするパイプラインを作成しました。
次回は、その4:パイプラインで文字起こしたテキストを Comprehend で感情分析します。