はじめに
Amazon Rekognition は機械学習を使用した画像認識を簡単に利用できるAWSのサービスです。そのサービスを用いた実装例として、今回は画像を人数/人物別に分類して一覧表示するアプリケーションを作成してみました。
GitHub からダウンロード可能です。
Amazon Rekognition を用いたアプリケーション作成の参考にして頂ければ幸いです。
機能説明
画面構成
人数別の画像一覧
アップロードした画像に写っている人数別に一覧表示できます。人数のボタンを押すことで切り替え可能です。
人物別の画像一覧
アップロードした画像に写っている人物別に一覧表示できます。顔のボタンを押すことで切り替え可能です。
画像アップロードおよび削除
任意の画像を選択してアップロード可能です。複数枚のアップロードにも対応しております。
また、アップロードした画像を一括で全て削除するボタンも設置しております。
技術構成
PHPのフレームワークである Laravel をベースとして構築しました。バージョンは 10 です。
また、バックエンドからフロントエンドへの橋渡しとして Inertia を使用しました。
フロントエンドは Vue で実装しております。
デザイン面ではUIフレームワークとして Vuetify を使用しました。
そして、重要な機能である画像認識は AWS SDK for PHP V3 を用いて、Laravel から Amazon Rekognition API を呼び出すように実装しております。
処理概要
画像に写っている人数の検出
本アプリケーションでは、ファイルアップロード時に顔データを登録する Rekognition API「IndexFaces」を呼び出しており、そのレスポンスには画像に写っている人数分の顔データが含まれております。
そこで、レスポンスに含まれる顔データの数から人数を検出し、データベースに各画像に写っている人数を登録するように実装しました。
人数別の表示
データベースに登録された情報を基に分類して表示するだけで、シンプルな処理となっております。
画像に写っている人物の検出
Amazon Rekognition では管理したい単位でコレクションを作成して顔データを登録できます。本アプリケーションでは、(非効率ですが)初期表示のタイミングで Rekognition API 「CreateCollection」 を呼び出してコレクションを作成しております。
そして、ファイルアップロード時にRekognition API 「IndexFaces」を呼び出して顔データを検出し、Amazon Rekognition のコレクションへ登録を行っております。
人物別の表示
まずは Rekognition API 「ListFaces」 を呼び出して、コレクションに登録されているアップロードした画像の顔データを全て取得します。ただし、この状態では顔データを取得しただけの状態なので、ここから似ている顔ごとに整理する必要があります。
そこで、取得した顔データをリクエストパラメータとして、Rekognition API 「SearchFaces」 を呼び出して、似ている顔を検索します。その際、全ての顔データごとにAPIを呼び出すと大量のリクエストを送ることになってしまうので、検索結果として返却された顔データは除外していき、リクエスト回数を減らすように工夫しております。
上記の手順を行えば、似ている顔ごとにデータを整理できるので、画像を人物別に分類して表示することが可能となります。
おわりに
Amazon Rekognition の活用を目的として、画像を人数/人物別に分類して一覧表示するアプリケーションを作成してみました。
AWS公式の開発者ガイドの情報を基に探り探りで実装したので、もっと良い方法があるのではないかと思いながらも、なんとか実現したいことは出来たので良かったです。