ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

双子はどのくらい似ている?Amazon Rekognition で顔認証を試してみた!

この記事を共有する

目次

初めまして、パーソル&サーバーワークスの高橋です。

突然ですが、私は双子ということもあり、お互いのiPhoneの顔認証(Face ID)を突破できてしまいます(双子あるあるですね)。
そこで「実際どのくらい似ているのか?」を数値で確かめるべく、AWSの画像解析サービス Amazon Rekognition を使って検証してみました。


はじめに

Amazon Rekognitionは、AWSが提供する画像・動画解析のフルマネージドAIサービスです。
ディープラーニングを用いて、画像や動画内の「何が写っているか」「誰が写っているか」「どのような状態か」を高精度に検出・分析できます。
機械学習の知識がなくても、APIを呼ぶだけでアプリに組み込めるのが特徴です。

今回はRekognitionの「顔の分析」と「顔の比較」機能を、以下の2つの方法で試してみます。

  1. AWSマネジメントコンソール(GUI)
  2. API経由(Python + boto3)

1. AWSマネジメントコンソールから試してみた

「顔の分析」手順

1. AWSコンソールでRekognitionを検索し「顔の分析」を選択
2. 分析したい画像をアップロード

顔の分析結果

年齢(Age Range)、笑顔(Smiling)、感情(Appears to be Happy)などが表示されました。画像をアップロードするだけで、ここまで分析できるのは手軽ですね。

「顔の比較」手順

1. AWSコンソールでRekognitionを検索し「顔の比較」を選択
2. 比較したい画像をアップロード

比較元:筆者
比較先:筆者と双子の兄弟(複数人が写った画像も使えます)

顔の比較結果

結果は、筆者本人が99.9%、双子の兄弟が91%の類似度と評価されました!


2. API経由で試してみた

構成図

S3に格納した画像を、Rekognition APIが参照して分析する構成です。

構成図

「顔の分析」手順

1. 分析対象の画像をS3に配置
2. 顔の分析用API client.detect_faces() を呼び出す

ソースコード:

# AWS SDK(boto3)を読み込む
import boto3
# S3の設定
BUCKET_NAME = "バケット名を記載"
IMAGE_KEY = "画像のキーを指定"
# Rekognitionクライアントを作成(東京リージョン)
client = boto3.client("rekognition", region_name="ap-northeast-1")
# DetectFaces APIを呼び出し、顔の属性を分析
response = client.detect_faces(
    Image={"S3Object": {"Bucket": BUCKET_NAME, "Name": IMAGE_KEY}},
    Attributes=["ALL"],
)
# 検出された顔ごとに結果を表示
for face in response["FaceDetails"]:
    print(f"年齢: {face['AgeRange']['Low']}〜{face['AgeRange']['High']}歳")
    print(f"性別: {face['Gender']['Value']}")
    print(f"笑顔: {'あり' if face['Smile']['Value'] else 'なし'} ({face['Smile']['Confidence']:.1f}%)")

無事APIを叩くことができました!

顔の分析API結果

「顔の比較」手順

1. 比較元と比較先の画像をS3に配置
2. 顔の比較用API client.compare_faces() を呼び出す

比較元:筆者
比較先:筆者と双子の兄弟

ソースコード:

# AWS SDK(boto3)を読み込む
import boto3
# S3の設定
BUCKET_NAME = "バケット名を記載"
SOURCE_KEY = "比較元の画像を指定"
TARGET_KEY = "比較先の画像を指定"
# Rekognitionクライアントを作成(東京リージョン)
client = boto3.client("rekognition", region_name="ap-northeast-1")
# CompareFaces APIを呼び出し、2枚の画像の顔を比較
response = client.compare_faces(
    SourceImage={"S3Object": {"Bucket": BUCKET_NAME, "Name": SOURCE_KEY}},
    TargetImage={"S3Object": {"Bucket": BUCKET_NAME, "Name": TARGET_KEY}},
    SimilarityThreshold=0,  # 0にすると類似度が低くても全て結果を出力
)
# 結果を表示
for i, match in enumerate(response["FaceMatches"], 1):
    print(f"比較{i}: 類似度 {match['Similarity']:.1f}%")

こちらも問題なく動作しました!

顔の比較API結果

筆者本人は100%、双子の兄弟は91%と評価されました!
同じ画像を使っているのに、コンソール(99.9%)とAPI(100%)で微妙に結果が異なるのも面白いですね。


まとめ

Amazon Rekognitionを使って、双子の顔がどのくらい似ているかを検証しました。

結果として、双子の兄弟は91%の類似度と判定されました。本人は99〜100%なので、Rekognitionは双子でも一応区別できているようです。
ただし写真の条件(角度・照明・表情)によっては評価が変動することもあり、双子を完全に見分けるのは現行のAIでもまだ難しいと感じました。

コンソールからもAPIからも手軽に試せるので、画像解析に興味がある方はぜひ触ってみてください。

次回は Amazon SageMaker を使ってみたいと思います!

参考:

この記事は私が書きました

高橋 憲太

記事一覧

パーソル&サーバーワークスの高橋です。 猫も犬も好きです。

高橋 憲太

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。