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」
に音声ファイルをアップロード

「アップロード」をクリック
Transcribe jobs のリンクをクリック

アウトプット用S3バケットのリンクをクリック

格納されているjsonテキストを選択して、「名前つけてダウンロード」をクリック

表示されたjsonテキストのリンクをクリック

音声データの内容「ハンズオン順調ですか手を動かすの楽しいですよね」を読み取って、文字起こしした結果が、出力用S3バケットにファイル(20211121122609_Transcription.json)として、格納されている!!

今回は、ぞの3:S3への音声ファイルのアップロードをトリガーとして、Lambda function を起動して、Transcribe で文字起こしするパイプラインを作成しました。
次回は、その4:パイプラインで文字起こしたテキストを Comprehend で感情分析します。