【Rekognition】【初心者コピペ20分】2つの写真の顔をローカルで比較しよう Part1

technologies

  • HOME
  • BLOG
  • technologies
  • 【Rekognition】【初心者コピペ20分】2つの写真の顔をローカルで比較しよう Part1

はじめに

お疲れ様です。
クワハラと申します。

顔検索機能を実装する機会があったのですが、
自前で機械学習用のサーバー立てて、学習させて、APIを用意して、
はかなりの時間がかかりそう、、、、、

そう思っていたのですが、AWS側でサービスとして提供しておりました。(白々しい)

今回は2回に渡り、Amazon Rekognitionを使ってシンプルにローカルで2つの写真から顔を切り取り、類似度を表示するように実装します。

Part1ではAmazon Rekognitionとの通信部分は作成せず、まずは画面の作成までを行います。

目次

Amazon Rekognitionとは

Amazon Rekognitionは画像や動画を分析して、顔認識や物体検出などを行うことができるサービスです。

様々なAPIを提供しておりマネージドコンソール上からも試すことが可能ですので、興味のある方はぜひ試してみてください。

今回はその中でも、2つの写真から顔を比較する CompareFaces オペレーションを使用して、ローカルで顔の比較を行う方法を2回に分けて紹介します。

完成形のイメージ

前提条件

  1. Node.js がインストールされていること。
  2. 今回はRekognitionのCompareFacesオペレーションを使用することが目的のため、ソースコードの解説は最小限にとどめます。
  3. ファイルアップロード機能は作成せず、比較する写真は直接指定のフォルダ/指定のファイル名にしてアップロードします。
  4. 使用する2つの写真にはそれぞれ1つだけの顔が写っていることを前提とします。
    • 顔が複数あるものはコードが複雑になるので今回は省略します。

実行環境

今回は以下のバージョンで実装を行いました。
他のバージョンで実行する場合は適宜調整してください。

  • mac os:15.5
  • Node.js: 22.14.0
  • npm: 11.2.0
  • React: 19.1.0
  • Typescript: 5.8.3
  • Vite: 6.3.5
  • @aws-sdk/client-rekognition: 3.826.0

処理概要図

今回は以下のような処理を想定しています。
※★がついているところを今回は実装します。

顔の比較用の画面を作成する

ViteでReactのプロジェクトを作成

Viteを使用してReactのプロジェクトを作成します。
以下のコマンドを実行します。

画面の入力に従い順番に入力します。
※プロジェクト名は任意で設定できますが、ここではrekognition-demoとします。

作成したプロジェクトのディレクトリに移動し、依存関係をインストールします。

以下のコマンドでViteを起動します。

http://localhost:5173/ にアクセスしでVite×Reactの画面が表示されれば、Viteの起動は成功です。

なお、この時点でのフォルダ構成は以下となっているはずです。

SDKをインストール

今回はAWS SDK for JavaScriptのv3を使用しますので、以下のコマンドで必要なパッケージをインストールします。

画面を作成

続いて画面の作成を行います。

任意の画像をsrc/assets/originalSrc/compare1.pngsrc/assets/targetSrc/compare2.pngに保存します。
※後述するコードでは、compare1.pngが比較元の画像、compare2.pngが比較対象の画像として使用予定ですので、必要に応じてパスやファイル名を調整してください。

src/App.cssを開き、中身を全て以下のコードに書き換えます。

src/App.tsxを開き、中身を全て以下のコードに書き換えます。

続いて以下の新規ファイルを作成します。
src/hooks/useFaceSearch.ts
src/utils/index.ts
src/api/index.ts

src/hooks/useFaceSearch.tsに、以下のコードを記述します。

src/utils/index.tsに、以下のコードを記述します。

src/api/index.tsに、以下のコードを記述します。
※Part1ではレスポンスをMockの値を返し、Part2で実際のCompareFacesオペレーションを実装していきます。

(レスポンスについて)

  • FaceMatches: 比較元の顔と閾値以上にマッチした比較対象の顔情報を提供します。複数の顔を認識します。
  • SourceImageFace: 比較元の顔の情報を提供します。複数の顔がある場合は、その中で一番大きな顔1つのみを抽出します。
  • BoundingBox: 顔の位置情報を割合で示しています。
  • Similarity: 比較元との顔の類似度を割合で示しています。

動作確認

一旦ここまでのコードを実装して、ブラウザでhttp://localhost:5173/にアクセスしてみてください。
以下のような動作ができれば成功です。

  • 画面上に比較元の画像と比較対象の画像が表示されます。
  • また比較ボタンをクリックすると、Mockのレスポンスが返され、類似度が表示されるはずです。

※Mockですので、まだ顔の切り取り位置が正確ではないですね。

まとめ

いかがでしたでしょうか。

今回は、Viteを使用してReactのプロジェクトを作成し、画面を作成しました。

次は、実際にRekognitionのCompareFacesをSDKから呼び出し、顔の位置と類似度の取得を実装していきます。

以上です。
最後までお読みいただき、ありがとうございました。

Related posts