0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Amazon Comprehendでキーフレーズを取得し、Amazon Pollyで音声を生成してみた

Posted at

はじめに

AWS初心者です。AWSの基本知識をキャッチアップすべく、色々触りながら学習中です。
今回は生成AIのサービスであるAmazon ComprehendとAmazon Pollyを触ってみました。初心者向けの内容となっておりますので、温かい目で見て頂ければ幸いです。

利用するAWSサービス

  • Comprehend
  • Polly
  • Lambda(Python3.13)
  • S3
  • IAM

実践手順

S3にバケットを用意する

音声データを出力する先のバケットを作成します。
image.png

これでS3側の設定は完了です。

IAMロールを作成する

  1. ユースケースを選択する
    IAMからロールを選択し、新規にロールを作成します。今回は、LambdaからS3へのアクセスを許可するロールを作成するため、ユースケースには「Lambda」を選択します。
    image.png

  2. ポリシーを追加する
    ロールにアタッチするポリシーを追加します。今回は、Amazon Comprehend、Amazon Polly、S3へのアクセスが必要なため、それぞれのポリシーを選択します。
    image.png

  3. ロールを作成する
    ロール名を入力し、ロールを作成します。作成したロールは後述のLambda関数で利用するため、分かりやすい名前にします。

これでIAMロールの作成は完了です。

Lambda関数を作成する

  1. 関数を作成する
    今回はPythonでプログラムを書くため、ランタイムは「python 3.13」を選択します。
    関数名はプログラムの内容がイメージしやすい名前にします。
    ロールには前述で作成したIAMロールを選択します。
    image.png

  2. 必要な設定を変更する
    今回はタイムアウト時間を2分に変更します。必要に応じてコードから参照する環境変数を設定してください。

コードの実装

サンプルコード

lambda_function.py
import boto3

def lambda_handler(event, context):
    # AWSクライアントの初期化
    s3_client = boto3.client('s3')
    polly_client = boto3.client('polly')
    comprehend_client = boto3.client('comprehend')

    # 対象となるテキストの定義
    text = "write your sample text."

    # テキストからキーフレーズを取得
    response = comprehend_client.detect_key_phrases(
        Text = text,
        LanguageCode = 'ja'
    )
    # キーフレーズ(リスト)から文字列を取得
    content = ""
    key_phrases_list = [phrase['Text'] for phrase in response['KeyPhrases']]
    for index,item in enumerate(key_phrases_list):
        content += item + "," 

    # 音声データの生成
    responseVoice = polly_client.synthesize_speech(
        Text = content,
        OutputFormat = 'mp3',
        VoiceId = 'Mizuki'
    )

    # 音声データを取得
    audioData = responseVoice['AudioStream'].read()

    # S3バケット名と保存するファイル名
    s3_bucket_name = "your-bucket-name"
    s3_file_name = "your-file-name"

    # S3に音声データをアップロード
    s3_client.put_object(
        Bucket = s3_bucket_name,
        Key = s3_file_name,
        Body = audioData,
    )

    return {
        'statusCode': 200,
        'body': f"ファイル '{s3_file_name}' が S3 バケット '{s3_bucket_name}' に正常にアップロードされました。"
    }

実行結果

Lambdaへデプロイして、実行するとS3に音声データ(mp3)が保存されていることを確認できました。
image.png

おわりに

当初は、取得したWeb上のデータ(ニュース記事など)をComprehendを使って要約しようと思っていましたが、API「syntax」の上限が5000Byteだったり、日本語をサポートしていなかったり躓いたため、結果的にあまり実用的ではない内容になってしまいました。
AWSのサービスを理解するという最低限の目的は達成できたので、次回以降はもう少し実用的な仕組みを目指してトライしてみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?