目次Category
本記事で作成するもの:有名人識別サービス
「ファイルを選択」ボタンから、有名人の画像を選択します。
ファイルを選択後、「送信」ボタンを押すと…
と表示されます!
1. はじめに
概要説明
![]()
Amazon Rekognition
Amazon Rekognition(画像解析AI)を用いて、有名人識別 API を作成します。
API の動作説明
- クライアント PC から API Gateway 経由で有名人の画像をアップロードします。
- 画像ファイルを受信すると、Lambda 関数が起動します。
- Lambda 関数内で Amazon Rekognition の
recognize_celebrities機能に画像ファイルを送り、画像内の有名人を検出します。 - 検出した有名人の情報を出力用に整形して、API Gateway を通して返します。
- 呼び出し元のブラウザ上で、識別結果が表示されます。
AWS サービスについて
今回使用する主なサービスは以下の3つです。
Amazon API Gateway
AWS Lambda
Amazon Rekognition
2. 開発手順
2-1. AWS へのサインイン
AWS マネジメントコンソール(https://console.aws.amazon.com/)へ
アクセスし、IAM ユーザー情報でサインインをしてください。
AdministratorAccess のIAM ポリシーが付与されていることを前提にしています。
付与されていない場合、手順の中でリソースが作れない等のエラーが
発生する可能性があるため、適切なポリシーをアタッチした上で
再度実行してください。
2-2. リージョンと言語の確認
- 画面右上が「東京(リージョン)」になっていることを確認します。
- 画面左下が「日本語」になっていることを確認します。
[補足] リージョンの変更方法:画面右上の地名を押下し、「アジアパシフィック
(東京)ap-northeast-1」を選択します。
[補足] 言語の変更方法:画面左下の言語を押下し、「日本語」を選択します。
2-3. Lambda 関数の作成
![]()
以下の手順で Lambda 関数を作成します。
- マネジメントコンソールの検索窓に「Lambda」と入力し、
表示された「Lambda」を選択します。 - Lambda の画面が開いたら、「関数の作成」ボタンを押します。
- 関数の作成画面にて、以下を選択・入力します。
- 「一から作成」を選択
- 「関数名」に「
ojt-[name]-rekognition」と入力
(例:ojt-muramori-rekognition) - 「ランタイム」に「
Python3.11」を選択 - 「アクセス権限」-「デフォルトの実行ロールの変更」を開き、
「基本的な Lambdaアクセス権限で
新しいロールを作成」を選択
- 画面右下の「関数の作成」ボタンを押下し、Lambda 関数を作成します。
Python 3.11 より新しいバージョンでは使えないライブラリ
(cgi モジュールなど)があるため、
本ハンズオンでは Python3.11 の使用を推奨します。
2-4. Lambda 関数の編集
ここから、Lambda 関数を画像解析AI(Rekognition)と紐づけていきます。
Lambda 関数から Rekognition を呼び出すには、適切な権限が必要です。
具体的には、Lambda に付与されている IAM ロールに、Rekognition への
アクセスを許可する IAM ポリシーをアタッチする必要があります。
IAM ロール(権限)の変更
- Lambda 画面で「設定」タブ → 「一般設定」項目 → 「編集」を選択します。
- 「基本設定を編集」画面の下部にある「IAM コンソールで xxx ロールを
表示します。」をクリックします。 - 別タブで IAM ロールの画面が開くので、「ポリシーをアタッチします」ボタンを
押下します。 - 検索窓に「Rekognition」と入力し、「
AmazonRekognitionReadOnlyAccess」ポリシーに
チェックを入れて、「ポリシーのアタッチ」ボタンを押下します。 - IAM のコンソール画面で、「AmazonRekognitionReadOnlyAccess」が
アタッチされていることを確認します。
これで Lambda に Rekognition を呼び出せる権限を付与できました。 - Lambda の「基本設定を編集」画面に戻り、タイムアウトを「10秒」に
変更します。 - 設定後、「保存」ボタンを押下します。
Lambda 関数の更新
「関数コード」を以下の内容で上書きし、「Deploy」ボタンを押下します。
2-5. API Gateway の追加
![]()
API は「リソース」×「メソッド」で開発をしていきます(例:「/users に GET」や「/users/12345 に POST」など)。
API の作成
- 画面上部「サービス」から検索窓に “API” と入力し、
候補にあがる「API Gateway」を選択します。 - 画面下部の REST API の「構築」ボタンを押下します。
- 「新しい API の作成」画面にて以下を設定し、「API の作成」ボタンを押下します。
- 「新しい API」を選択
- API 名:「
ojt-[name]-rekognition-api」と入力
(例:ojt-muramori-rekognition-api) - エンドポイントタイプ:「リージョン」を選択
リソースの作成
- 「アクション」から「リソースの作成」を選択します。
- リソース名に「Rekognition」と入力し、
「リソースの作成」ボタンを押下します。
メソッドの作成
- リソースを選択した上で、
「アクション」→「メソッドの作成」
を選択します。 - プルダウンから「POST」を選んで、
チェックボタンを押下します。 - 統合タイプにて「Lambda 関数」を選択し、
Lambda 関数にて先ほど作成した
「ojt-[name]-rekognition」を選択後、
「保存」ボタンを押下します。 - 「Lambda 関数に権限を追加する」の確認画面が
表示されるので、「OK」ボタンを押下します。
統合リクエストの設定
- 「統合リクエスト」を選択します。
- 画面下部「マッピングテンプレート」を展開し、
「リクエスト本文のパススルー」の項目で
「テンプレートが定義されていない場合(推奨)」
を選択します。 - 「Content-Type」の項目にて
「マッピングテンプレートの追加」を押下し、multipart/form-dataと入力してチェックボタンを押します。 - テンプレートの生成のプルダウンにて
「メソッドリクエストのパススルー」を選択し、
「保存」ボタンを押します。
バイナリメディアタイプの設定
- 画面左「設定」を選択し、「設定」画面下部
「バイナリメディアタイプ」の項目にて
「バイナリメディアタイプの追加」を押下します。 multipart/form-dataと入力し、「変更の保存」ボタンを押下します。
この設定を行わないと、アップロードした画像データが
正しく Lambda まで渡らず、Rekognition が画像を
正常に解析できません。デプロイ前に必ず設定してください。
API のデプロイ
- 画面左ペイン「リソース」を選択後、
画面上部「アクション」より「API のデプロイ」を選択します。 - 以下の設定をし、「デプロイ」ボタンを押下します。
- デプロイされるステージ:「新しいステージ」を選択
- ステージ名:「dev」を入力
- 画面左ペインから「ステージ」を選択し、
「dev」-「rekognition」-「POST」
を選択します。 - 画面右に「URL の呼び出し」として作成された
API の URL が表示されるので、これをコピーします。
2-6. HTML ファイルの作成
以下の HTML の API Gateway URL 貼り付け の部分に、
先ほど作成した API Gateway の URL を貼り付け、index.html のファイル名でパソコン上に保存します。
フォームを用いて、選択されたファイルを
送信するだけの単純な HTML ファイルです。
作成した index.html をブラウザで開きます。
2-7. 動作確認
有名人の画像を選択し、「送信」ボタンを押すと以下のように表示されます。
これで有名人識別サービスの完成です!
3. お片付け
以下のリソースを削除していきます。
- API Gateway
- Lambda
- CloudWatch ロググループ(Lambda の実行ログ)
- Lambda 用 IAM ロール
API Gateway の削除
- API Gateway の画面から、作成したAPIを選択します。
- 画面左ペインで「リソース」が選択されている状態で、
「アクション」から「API の削除」を選択します。 - 削除前の確認画面が表示されるので、API 名を入力後、
「API の削除」を押下します。
CloudWatch ログの削除
- 画面上部の「サービス」から「Lambda」を検索し選択します。
- 一覧画面にて、Lambda のログを選択します。
- 画面上部「モニタリング」を選択し、
「CloudWatch のログを表示」ボタンを押下します。 - CloudWatch Logs の画面にて、
「アクション」から「ロググループの削除」を選択します。 - 確認画面が表示されるので、
「削除」ボタンを押します。
IAM ロールの削除
- Lambda の画面に戻り、
「設定」タブ →「一般設定」項目 →「編集」
ボタンを選択します。 - 「基本設定を編集」画面下部の
「IAM コンソールで xxx ロールを表示します。」を選択します。 - IAM ロールの画面に遷移するので、
画面右上「ロールの削除」を選択します。 - 確認画面が出るので、「はい、削除します」を押下します。
Lambda 関数の削除
- Lambda の画面に戻り、画面上部「アクション」から
「関数の削除」を選択します。 - 確認画面が表示されるので、「削除」を選択します。
- 「正常に削除されました。」と表示が出れば完了です。
お片付けは以上で終了です。お疲れ様でした。
4. まとめ
本ハンズオンでは、Amazon API Gateway・AWS Lambda・Amazon Rekognition を
組み合わせて、有名人の画像から名前を識別する
サーバレス API サービスを構築しました。
サーバの管理を意識することなく、画像解析AIを組み込んだ API を
短時間で作成できることが体感できたのではないでしょうか。
今回学んだ構成は、画像アップロード型の他の AI サービスにも
応用できますので、ぜひいろいろな Rekognition の機能を試してみてください。
5. 参考資料・ドキュメント
同じカテゴリーの記事
同じカテゴリの記事を読む