AWS

Amazon Rekognitionで作る有名人識別サービス

NEW 2026年9月8日

目次Category


本記事で作成するもの:有名人識別サービス

「ファイルを選択」ボタンから、有名人の画像を選択します。
ファイルを選択後、「送信」ボタンを押すと…

“He/She is [有名人の名前] with 100% confidence.”

と表示されます!

1. はじめに

概要説明

Amazon Rekognition

Amazon Rekognition

Amazon Rekognition(画像解析AI)を用いて、有名人識別 API を作成します。

API の動作説明

  1. クライアント PC から API Gateway 経由で有名人の画像をアップロードします。
  2. 画像ファイルを受信すると、Lambda 関数が起動します。
  3. Lambda 関数内で Amazon Rekognition の recognize_celebrities 機能に画像ファイルを送り、画像内の有名人を検出します。
  4. 検出した有名人の情報を出力用に整形して、API Gateway を通して返します。
  5. 呼び出し元のブラウザ上で、識別結果が表示されます。

AWS サービスについて

今回使用する主なサービスは以下の3つです。

Amazon API Gateway

Amazon API Gateway

AWS Lambda

AWS Lambda

Amazon Rekognition

Amazon Rekognition

2. 開発手順

2-1. AWS へのサインイン

AWS マネジメントコンソール(https://console.aws.amazon.com/)へ
アクセスし、IAM ユーザー情報でサインインをしてください。

補足:今回のハンズオンでは、実施する IAM ユーザーに AdministratorAccess
のIAM ポリシーが付与されていることを前提にしています。
付与されていない場合、手順の中でリソースが作れない等のエラーが
発生する可能性があるため、適切なポリシーをアタッチした上で
再度実行してください。

2-2. リージョンと言語の確認

  • 画面右上が「東京(リージョン)」になっていることを確認します。
  • 画面左下が「日本語」になっていることを確認します。

[補足] リージョンの変更方法:画面右上の地名を押下し、「アジアパシフィック
(東京)ap-northeast-1」を選択します。
[補足] 言語の変更方法:画面左下の言語を押下し、「日本語」を選択します。

2-3. Lambda 関数の作成

AWS Lambda

手順2-3: Lambda 関数の新規作成

画像を受け取り、Rekognition を呼び出す処理の本体となる
Lambda 関数を作成します。

以下の手順で Lambda 関数を作成します。

  1. マネジメントコンソールの検索窓に「Lambda」と入力し、
    表示された「Lambda」を選択します。
  2. Lambda の画面が開いたら、「関数の作成」ボタンを押します。
  3. 関数の作成画面にて、以下を選択・入力します。
    • 「一から作成」を選択
    • 「関数名」に「ojt-[name]-rekognition」と入力
      (例:ojt-muramori-rekognition
    • 「ランタイム」に「Python3.11」を選択
    • 「アクセス権限」-「デフォルトの実行ロールの変更」を開き、
      「基本的な Lambdaアクセス権限で
      新しいロールを作成」を選択
  4. 画面右下の「関数の作成」ボタンを押下し、Lambda 関数を作成します。
⚠️ ランタイムのバージョンについて

Python 3.11 より新しいバージョンでは使えないライブラリ
cgi モジュールなど)があるため、
本ハンズオンでは Python3.11 の使用を推奨します。

2-4. Lambda 関数の編集

ここから、Lambda 関数を画像解析AI(Rekognition)と紐づけていきます。
Lambda 関数から Rekognition を呼び出すには、適切な権限が必要です。
具体的には、Lambda に付与されている IAM ロールに、Rekognition への
アクセスを許可する IAM ポリシーをアタッチする必要があります。

IAM ロール(権限)の変更

  1. Lambda 画面で「設定」タブ → 「一般設定」項目 → 「編集」を選択します。
  2. 「基本設定を編集」画面の下部にある「IAM コンソールで xxx ロールを
    表示します。」をクリックします。
  3. 別タブで IAM ロールの画面が開くので、「ポリシーをアタッチします」ボタンを
    押下します。
  4. 検索窓に「Rekognition」と入力し、「AmazonRekognitionReadOnlyAccess」ポリシーに
    チェックを入れて、「ポリシーのアタッチ」ボタンを押下します。
  5. IAM のコンソール画面で、「AmazonRekognitionReadOnlyAccess」が
    アタッチされていることを確認します。
    これで Lambda に Rekognition を呼び出せる権限を付与できました。
  6. Lambda の「基本設定を編集」画面に戻り、タイムアウトを「10秒」に
    変更します。
  7. 設定後、「保存」ボタンを押下します。

Lambda 関数の更新

「関数コード」を以下の内容で上書きし、「Deploy」ボタンを押下します。

lambda_function.py
import boto3
import base64
import io
import cgi
import logging
import traceback


# logger設定
logger = logging.getLogger()
logger.setLevel(logging.INFO)

# rekognition インスタンスの作成(東京リージョン以外で構築している場合はregion_nameを追加してください)
rekognition = boto3.client('rekognition', region_name='ap-northeast-1')

# lambda_handler 関数の定義(メインロジック)
def lambda_handler(event, context):
    logger.info(f'Received event = {event}')

    # HTMLフォームからアップロードされた部分はBase64形式でエンコードされた状態で受信するため、bytes型にデコードする(正確にはbytes-like object)
    received_body = base64.b64decode(event['body-json'])
    # cgi.FieldStorageでHTMLフォームを解析できるように、BytesIO オブジェクトを生成する
    body_bytes = io.BytesIO(received_body)

    # cgi.FieldStorageクラスを用いて、フォームの内容を解析する
    environ = {'REQUEST_METHOD': 'POST'}
    headers = {'content-type': event['params']['header']['content-type']}
    form = cgi.FieldStorage(fp=body_bytes, environ=environ, headers=headers)
    # 画像ファイルをbytes型で取得('uploadfile'は送信時に設定した当該ファイルのnameの値)
    image = form.getvalue('uploadfile')

    # 取得した画像ファイルを、Rekognitionのrecognize_celebritiesメソッドに渡して有名人の検出をする
    response = rekognition.recognize_celebrities(
        Image={'Bytes': image}
    )
    logger.info(f'Rekognition response = {response}')

    try:
        # Rekognition のレスポンスから有名人の名前と信頼度を取り出し、APIのコール元へレスポンスする
        label   = response['CelebrityFaces'][0]
        name    = label['Name']
        conf    = round(label['Face']['Confidence'])
        output  = f'He/She is {name} with {conf}% confidence.'
        logger.info(f'API response = {output}')
        return output

    except IndexError as e:
        # Rekognition のレスポンスから有名人情報を取得出来なかった場合、他の写真にするように伝える。
        logger.info(f"Coudn't detect celebrities in the Photo. Exception = {e}")
        logger.info(traceback.format_exc())
        return "Couldn't detect celebrities in the uploaded photo. Please upload another photo."

2-5. API Gateway の追加

Amazon API Gateway

手順2-5: API Gateway と Lambda の連携

HTML フォームから送信された画像を Lambda 関数まで届けるための入り口を作成します。

API は「リソース」×「メソッド」で開発をしていきます(例:「/users に GET」や「/users/12345 に POST」など)。

API の作成

  1. 画面上部「サービス」から検索窓に “API” と入力し、
    候補にあがる「API Gateway」を選択します。
  2. 画面下部の REST API の「構築」ボタンを押下します。
  3. 「新しい API の作成」画面にて以下を設定し、「API の作成」ボタンを押下します。
    • 「新しい API」を選択
    • API 名:「ojt-[name]-rekognition-api」と入力
      (例:ojt-muramori-rekognition-api
    • エンドポイントタイプ:「リージョン」を選択

リソースの作成

  1. 「アクション」から「リソースの作成」を選択します。
  2. リソース名に「Rekognition」と入力し、
    「リソースの作成」ボタンを押下します。

メソッドの作成

  1. リソースを選択した上で、
    「アクション」→「メソッドの作成」
    を選択します。
  2. プルダウンから「POST」を選んで、
    チェックボタンを押下します。
  3. 統合タイプにて「Lambda 関数」を選択し、
    Lambda 関数にて先ほど作成した
    ojt-[name]-rekognition」を選択後、
    「保存」ボタンを押下します。
  4. 「Lambda 関数に権限を追加する」の確認画面が
    表示されるので、「OK」ボタンを押下します。

統合リクエストの設定

  1. 「統合リクエスト」を選択します。
  2. 画面下部「マッピングテンプレート」を展開し、
    「リクエスト本文のパススルー」の項目で
    「テンプレートが定義されていない場合(推奨)」
    を選択します。
  3. 「Content-Type」の項目にて
    「マッピングテンプレートの追加」を押下し、
    multipart/form-data と入力してチェックボタンを押します。
  4. テンプレートの生成のプルダウンにて
    「メソッドリクエストのパススルー」を選択し、
    「保存」ボタンを押します。

バイナリメディアタイプの設定

  1. 画面左「設定」を選択し、「設定」画面下部
    「バイナリメディアタイプ」の項目にて
    「バイナリメディアタイプの追加」を押下します。
  2. multipart/form-data と入力し、「変更の保存」ボタンを押下します。
⚠️ バイナリメディアタイプの設定を忘れずに

この設定を行わないと、アップロードした画像データが
正しく Lambda まで渡らず、Rekognition が画像を
正常に解析できません。デプロイ前に必ず設定してください。

API のデプロイ

  1. 画面左ペイン「リソース」を選択後、
    画面上部「アクション」より「API のデプロイ」を選択します。
  2. 以下の設定をし、「デプロイ」ボタンを押下します。
    • デプロイされるステージ:「新しいステージ」を選択
    • ステージ名:「dev」を入力
  3. 画面左ペインから「ステージ」を選択し、
    「dev」-「rekognition」-「POST」
    を選択します。
  4. 画面右に「URL の呼び出し」として作成された
    API の URL が表示されるので、これをコピーします。

2-6. HTML ファイルの作成

以下の HTML の API Gateway URL 貼り付け の部分に、
先ほど作成した API Gateway の URL を貼り付け、
index.html のファイル名でパソコン上に保存します。

フォームを用いて、選択されたファイルを
送信するだけの単純な HTML ファイルです。

index.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8">
        <title>有名人認識AIハンズオン</title>
    </head>
    <body>
        <p>画像識別AIである Amazon Rekognition を用いて、有名人の認識をします!</p>
        <form action="API Gateway URL 貼り付け" enctype="multipart/form-data" method="POST">
            <input type="file" name="uploadfile" />
            <input type="submit"/>
        </form>
    </body>
</html>

作成した index.html をブラウザで開きます。

2-7. 動作確認

有名人の画像を選択し、「送信」ボタンを押すと以下のように表示されます。

“He/She is [有名人の名前] with 100% confidence.”

これで有名人識別サービスの完成です!

正常に動作しない場合は、CloudWatch Logs を確認することで、問題個所が分かります。

3. お片付け

以下のリソースを削除していきます。

  • API Gateway
  • Lambda
  • CloudWatch ロググループ(Lambda の実行ログ)
  • Lambda 用 IAM ロール

API Gateway の削除

  1. API Gateway の画面から、作成したAPIを選択します。
  2. 画面左ペインで「リソース」が選択されている状態で、
    「アクション」から「API の削除」を選択します。
  3. 削除前の確認画面が表示されるので、API 名を入力後、
    「API の削除」を押下します。

CloudWatch ログの削除

  1. 画面上部の「サービス」から「Lambda」を検索し選択します。
  2. 一覧画面にて、Lambda のログを選択します。
  3. 画面上部「モニタリング」を選択し、
    「CloudWatch のログを表示」ボタンを押下します。
  4. CloudWatch Logs の画面にて、
    「アクション」から「ロググループの削除」を選択します。
  5. 確認画面が表示されるので、
    「削除」ボタンを押します。

IAM ロールの削除

  1. Lambda の画面に戻り、
    「設定」タブ →「一般設定」項目 →「編集」
    ボタンを選択します。
  2. 「基本設定を編集」画面下部の
    「IAM コンソールで xxx ロールを表示します。」を選択します。
  3. IAM ロールの画面に遷移するので、
    画面右上「ロールの削除」を選択します。
  4. 確認画面が出るので、「はい、削除します」を押下します。

Lambda 関数の削除

  1. Lambda の画面に戻り、画面上部「アクション」から
    「関数の削除」を選択します。
  2. 確認画面が表示されるので、「削除」を選択します。
  3. 「正常に削除されました。」と表示が出れば完了です。

お片付けは以上で終了です。お疲れ様でした。

4. まとめ

本ハンズオンでは、Amazon API Gateway・AWS Lambda・Amazon Rekognition を
組み合わせて、有名人の画像から名前を識別する
サーバレス API サービスを構築しました。

サーバの管理を意識することなく、画像解析AIを組み込んだ API を
短時間で作成できることが体感できたのではないでしょうか。

今回学んだ構成は、画像アップロード型の他の AI サービスにも
応用できますので、ぜひいろいろな Rekognition の機能を試してみてください。

5. 参考資料・ドキュメント

この記事を書いた人

村守俊一

shunichi_muramori

26卒 ITソリューション部ビジネスソリューションセクション