AWS Lambda + AI = 音声文字起こしと感情分析(その1:S3+Lambda)

AWSのホームページの初心者ハンズオンにある「AWS Lambda と AWS AI Services を組み合わせて作る音声文字起こし & 感情分析パイプライン 」の内容を自分のAWSアカウントでやってみました。

ハンズオンではAWSホームページで、10本の Youtube-video でもって、Lambda と AIサービスの基本を、実際の操作の様子で確認することができます。

今回の投稿では、この中から、以下の内容で5パートに分けてあげようと思っています。

  • S3トリガーで Lambdaファンクションを起動する
  • Amazon Transcribeを使って文字起こしを試してみる
  • S3への音声ファイルアップロードをトリガに Lambdaを起動し、Transcribeするパイプラインを作る
  • パイプラインで文字起こししたテキストを Comprehend で感情分析する
  • Amazon Polly で作成した音声ファイルをパイプラインに投入する

ざっくりと基本構成を図で表してみて、最後まで行くと以下のような構成になります。
今回の投稿は、この構成の中から、S3への音声ファイルアップロードに対するイベントに連携して、Lambdaを動かします。

AWS Lambda と他のAWSサービスとの連携パターン

Lambda関数を同期的に呼び出す
Lambda関数を非同期的に呼び出す
Lambdaがイベントを読み取る

今回はパート1~5のうちのパート1として、S3 トリガーで Lambdaファンクションを起動するところをやってみます。

S3 トリガーで Lambdaファンクションを起動する

S3バケット:mikolabo-serverless-input(インプット用)を作成

S3バケット:mikolabo-serverless-input(インプット用)を作成

Lambda関数の作成

Lambdaダッシュボードから

「関数の作成」をクリック

「設計図の使用」をクリック

「S3-get-object-python」をクリック

「設定」をクリック

関数名に「transcribe-function」
と設定

ロール名に
「transcribe-function-role」
と設定

バケットに、先ほど作成したS3バケットを指定
(mikolabo-serverless-input)

プレフィックス、サフィックスでトリガーとなるオブジェクトを条件付けできるが、今回は設定しない

指定したブループリントのコード

「関数の作成」をクリック

今回、Lambda関数でコンテントタイプを出力する処理だけ実施してみる。

「S3」をクリック

設定したS3バケットの
「プロパティ」タブをクリック

設定されているイベントをチェックし、
「編集」をクリック

イベントのタイプを指定できる。
今回は指定しない。

設定したLambda関数が登録されている。

「変更の保存」をクリック

S3バケットに音声ファイルをアップロード

「アップロード」をクリック

「ファイルを追加」をクリック

アップする音声ファイルを指定して、「開く」をクリック

「アップロード」をクリック

アップロードされた。

Lambda関数のトリガー結果を確認

「モニタリング」
→「CloudWatchのログを表示」

Lambda関数のログが記録されている。

ログのリンクをクリック

コンテントタイプが出力されている。

コンテントタイプが出力されている。

Lambda関数を変更してみる

コメントアウトされていたイベント情報を出力するコードを有効化して、デプロイを実施

先ほどの音声ファイルをS3バケット「h4b-serverless-3.mp3」を再度アップロード

現時刻のログストリームをクリック

イベント通知の内容が追加されている。

今回は、ぞの1:S3トリガーで Lambdaファンクションを起動しました。
次回は、その2:Amazon Transcribeを使って文字起こしを試してみます。