IT・ビジネススキル・人材育成の情報を掲載 | 人材育成のトレノケート【公式ブログ】

200枚のプロフィール写真から奇跡の1枚をAmazon Rekognitionに選んでもらいました

こんにちは。ラーニングサービス部 TT1チーム兼プロトタイプビルダーの山下です。
先日、プロフィール写真を撮影しまして、200枚少しの中から選ぶというタスクがありました。
せっかくなのでRekognitionさんに選んでもらいました。

Amazon Rekognitionとは

Amazon Rekognitionは、画像と動画を構築済みのモデルで分析する機械学習サービスです。
上のイメージ例では、私の2枚の写真を比較して、同一人物の可能性が93.3%という結果になりました。
このように写真の大きさやメガネの有無、髪型や背景などが違っていても分析してくれます。
他には、写真に何が写っているかを自動判定したり、わいせつな違反画像を自動検知したり、有名人の画像が勝手に使われていないか検知したり、写真の表情を解析したりすることができます。

以前、Pepperが自動撮影した写真をRekognitionによって分析して、結果をPepperに話してもらうというデモをしました。

  新宿ラーニングセンターのPepperにAmazon Rekognitionで顔の分析をしてもらいました 新宿ラーニングセンターのPepperが撮影した写真をAmazon Rekognitionで分析してその結果をしゃべるというデモをしました トレノケート公式ブログ

 

やったこと

今回はこの表情の分析機能を使って、200枚以上のプロフィール写真から最も幸せ度の高い写真を選んでもらいました。

 

アーキテクチャはシンプルです。
S3に写真画像ファイルをマネジメントコンソールから一気に全部アップロードします。
S3のオブジェクト作成イベントで、Lambdaを実行してRekognitionにDetectFacesをリクエストして結果をDynamoDBにPutItemします。
DynamoDBテーブルでは、Smile属性とHappy属性のローカルセカンダリインデックスを用意しておいて、後で検索しやすくしておきました。
今回は最もHappy属性の数値が高い写真をプロフィール写真にしました。

ソースコードはこちらです。

import json

import boto3
from decimal import Decimal
from urllib.parse import unquote_plus
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.core import patch_all patch_all()
def add_face_details(payload, face_details):
print(payload)
attributes = [
'Smile',
'Eyeglasses',
'Sunglasses',
'Gender',
'Beard',
'Mustache',
'EyesOpen',
'MouthOpen'
]

for attribute in attributes:
if attribute in face_details:
payload[attribute] = Decimal(face_details[attribute]['Confidence'])
return payload
def add_face_emotions(payload, emotions):
for emotion in emotions:
payload[emotion['Type']] = Decimal(emotion['Confidence'])
return payload
def lambda_handler(event, context):
rekognition = boto3.client('rekognition')
table = boto3.resource('dynamodb').Table('ProfilePhotos')
for record in event['Records']:
bucket = record['s3']['bucket']['name']
key = unquote_plus(record['s3']['object']['key'])
face_response = rekognition.detect_faces(
Image={
'S3Object': {
'Bucket': bucket,
'Name': key
}
},
Attributes=[
'ALL',
]
)
payload = {
'Prefix': key.split('/')[0],
'ObjectKey': key
}
payload = add_face_details(
payload,
face_response['FaceDetails'][0] )
if 'Emotions' in face_response['FaceDetails'][0]:
payload = add_face_emotions(
payload,
face_response['FaceDetails'][0]['Emotions']
)
table.put_item(
Item=payload
)

 

 

結果発表

こちらがRekognitionさんが最もHappy属性が高い(99.601)とした写真です。
確かに幸せそうです。

こちらのプロフィールで使用しています。

  アマゾン ウェブ サービス(AWS)認定トレーニング | IT研修のトレノケート 【オンライン研修も対応・AWS認定トレーニングならトレノケートへ】トレノケートはAWS認定トレーニングパートナー(ATP)として、AWS入門からAWS認定資格対応の研修まで多数開催しています。「AWS Authorized Instructor Champion」に認定された講師や複数の資格を所有した講師が、皆様のAWS知識修得をサポートいたします。 https://www.trainocate.co.jp/reference/aws/index.html

このように、手作業で1枚づつ確認するような気の遠くなる作業をしなくても、一瞬で結果を求められるのって幸せですね。
そして、人の好みが入らない評価で選ぶことができることで、公平性もあるのかもしれません。

ちなみに、最もHappy属性が低い(0.101)とされた写真です。

 

トレノケートのAWS研修(AWS認定トレーニング)

トレノケートのAWS認定トレーニングでは、AWS社の厳格なテクニカルスキル及びティーチングスキルチェックに合格した認定トレーナーがコースを担当します。AWS初心者向けの研修や、AWS認定資格を目指す人向けの研修をご提供し、皆様のAWS知識修得のサポートをいたします。
トレノケートのAWS研修(AWS認定トレーニング)はこちら


▼AWS初心者の方は、 AWS Cloud Practitioner Essentialsから!
座学中心の研修で、AWSを初めて学ぶ方や、営業などで提案に関わる方におすすめです。
「AWS Certified Cloud Practitioner」資格取得を目指す方の基礎知識修得にも最適です。
→ AWS Cloud Practitioner Essentials 詳細・日程はこちらから

​​​​​​​​​