AWSのAI画像認識で、顔写真から名前を判別するには【Python】

AWSのAI画像認識AI(Amazon Rekognition)で、顔写真からその人の名前を判別するには、compare_facesを使用します。

AI画像認識で、顔写真から名前を判別するには【AWS】

事前登録の写真(アリス、ボブ)

1枚目がアリスの事前登録写真、2枚目がボブの事前登録写真になります。
こちらの2枚の画像を、名前判定に使用します。

名前を判別したい写真1(アリス)

こちらも、アリスの写真になります。
事前の登録写真と雰囲気がかなり異なりますね。

さて、AWSのAIは、写真の人物の名前をアリスと、正しく判別できるでしょうか?

顔比較結果【AWS】

AWSの顔比較結果は、顔の一致度:99.9%と、高いスコアとなりました。
したがって、AWSのAIは、上記の2つの顔画像を同じアリスと判定できています。

Pythonサンプル

以下は実際に、判定したい写真1を登録写真と順に比較して、名前を判別するPythonサンプルです。

import boto3

#boto3のclient作成、AWSサービス名とリージョンを指定
client = boto3.client('rekognition','ap-northeast-1')

# 事前登録の顔写真を読み込んでバイト列を取得
source_bytes = {}
with open('./Alice.jpg', 'rb') as source_image:
    source_bytes['Alice'] = source_image.read()

with open('./Bob.jpg', 'rb') as source_image:
    source_bytes['Bob'] = source_image.read()

# 判定写真を読み込んでバイト列を取得
with open('./判定写真.jpg', 'rb') as target_image:
    target_bytes = target_image.read()

# 判定写真と、事前登録の画像ファイルとを、順に比較する
for name in source_bytes:
    # AWSへバイト列を渡し、顔比較結果を受け取る
    response = client.compare_faces(SourceImage={'Bytes': source_bytes[name]},
                                    TargetImage={'Bytes': target_bytes})

    # レスポンスに顔の一致度があり、一致度95%以上なら本人と判断する
    if len(response['FaceMatches']) > 0:
        if(response['FaceMatches'][0]['Similarity'] > 95):
            print('判定写真.jpg は、' + name + ' です')
            break

実行結果

判定写真.jpg は、Alice です

判定写真1の人物はアリスと、名前をしっかり判別できています。

 

別の顔写真でも、名前判別できるか

では、判定写真を変えて上記のPythonサンプルを実行した場合でも、名前を正しく判別できるでしょうか。

名前を判別したい写真2(ボブ)

実行結果

判定写真.jpg は、Bob です

判定写真2の人物はボブとボブの写真でも名前をしっかり判別できました。

 

Pythonサンプル使用の前提

・AWSアカウント作成済み
・AWSキー情報を、自分のPCに初期設定済み

上記の準備の上、ご使用ください。

 

まとめ

Amazon Rekognitionで、写真の人物の名前を判別する方法を解説しました。
みなさんも、スマホで撮影した身近な人の写真で、名前判別のプログラムを作成して遊んでみてはどうでしょうか。

最後まで読んでいただき、ありがとうございます。
また、お会いしましょう。

 

【もくじ】AWSのAIサービスで、できること一覧