- 公開日
- 最終更新日
双子はどのくらい似ている?Amazon Rekognition で顔認証を試してみた!
この記事を共有する
目次
初めまして、パーソル&サーバーワークスの高橋です。
突然ですが、私は双子ということもあり、お互いのiPhoneの顔認証(Face ID)を突破できてしまいます(双子あるあるですね)。
そこで「実際どのくらい似ているのか?」を数値で確かめるべく、AWSの画像解析サービス Amazon Rekognition を使って検証してみました。
はじめに
Amazon Rekognitionは、AWSが提供する画像・動画解析のフルマネージドAIサービスです。
ディープラーニングを用いて、画像や動画内の「何が写っているか」「誰が写っているか」「どのような状態か」を高精度に検出・分析できます。
機械学習の知識がなくても、APIを呼ぶだけでアプリに組み込めるのが特徴です。
今回はRekognitionの「顔の分析」と「顔の比較」機能を、以下の2つの方法で試してみます。
- AWSマネジメントコンソール(GUI)
- 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を叩くことができました!

「顔の比較」手順
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}%")
こちらも問題なく動作しました!

筆者本人は100%、双子の兄弟は91%と評価されました!
同じ画像を使っているのに、コンソール(99.9%)とAPI(100%)で微妙に結果が異なるのも面白いですね。
まとめ
Amazon Rekognitionを使って、双子の顔がどのくらい似ているかを検証しました。
結果として、双子の兄弟は91%の類似度と判定されました。本人は99〜100%なので、Rekognitionは双子でも一応区別できているようです。
ただし写真の条件(角度・照明・表情)によっては評価が変動することもあり、双子を完全に見分けるのは現行のAIでもまだ難しいと感じました。
コンソールからもAPIからも手軽に試せるので、画像解析に興味がある方はぜひ触ってみてください。
次回は Amazon SageMaker を使ってみたいと思います!
参考:
- Amazon Rekognition とは - Amazon Rekognition
- イメージ内の顔の検出 - Amazon Rekognition
- イメージ間の顔の比較 - Amazon Rekognition
この記事は私が書きました
高橋 憲太
記事一覧パーソル&サーバーワークスの高橋です。 猫も犬も好きです。