AWS Rekognitionで画像解析を行う

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

AWS rekognitionを使用すると簡単に画像の解析を行うことができます。

Amazon Rekognition とは - Amazon Rekognition


Lambda関数でrekognitionを使用する

S3のPutObjectをイベントリソースにしたLambda関数の例。S3にアップロードされた画像を解析します。

import json
import urllib
import boto3
import os
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

s3 = boto3.client('s3')
rekognition = boto3.client('rekognition', 'us-east-1')
dynamodb = boto3.resource('dynamodb', region_name='ap-northeast-1')
table = dynamodb.Table(os.getenv('TABLE_NAME'))

def lambda_handler(event, context):
  bucket = event['Records'][0]['s3']['bucket']['name']
  key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], 'utf8')

  obj = s3.get_object(Bucket=bucket, Key=key)
  body = obj['Body'].read()

  # 画像内に含まれるlabel(大まかなオブジェクトの意味。(human | text | outdoor | etc ...))
  labels = rekognition.detect_labels(Image={'Bytes':body}, MinConfidence=75)
  # 顔識別
  faces = rekognition.detect_faces(Image={'Bytes':body}, Attributes=['ALL'])

  rekognized_label = {}
  rekognized_label['Labels'] = labels['Labels']
  rekognized_label['FaceDetails'] = faces['FaceDetails']
  logging.info(json.dumps(rekognized_label))
  return

以下のように簡単に利用することができる。


サンプルデータと解析結果

試しにこんな画像を解析してみると...

f:id:letitride:20200619192034j:plain


こんな結果が返されます(^_^)

cf24ac4d73a9 
{
    "Labels": [
        {
            "Name": "Human",
            "Confidence": 99.48844146728516,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Person",
            "Confidence": 99.48844146728516,
            "Instances": [
                {
                    "BoundingBox": {
                        "Width": 0.20328140258789062,
                        "Height": 0.38710319995880127,
                        "Left": 0.36973658204078674,
                        "Top": 0.6079409718513489
                    },
                    "Confidence": 99.48844146728516
                },
                {
                    "BoundingBox": {
                        "Width": 0.27378788590431213,
                        "Height": 0.5127241611480713,
                        "Left": 0.6623964309692383,
                        "Top": 0.4001222252845764
                    },
                    "Confidence": 69.43467712402344
                }
            ],
            "Parents": []
        },
        {
            "Name": "Comics",
            "Confidence": 98.47220611572266,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Book"
                }
            ]
        },
        {
            "Name": "Manga",
            "Confidence": 98.47220611572266,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Comics"
                },
                {
                    "Name": "Book"
                }
            ]
        },
        {
            "Name": "Book",
            "Confidence": 98.47220611572266,
            "Instances": [],
            "Parents": []
        }
    ],
    "FaceDetails": [
        {
            "BoundingBox": {
                "Width": 0.07516269385814667,
                "Height": 0.09448358416557312,
                "Left": 0.8122304677963257,
                "Top": 0.477640300989151
            },
            "AgeRange": {
                "Low": 52,
                "High": 70
            },
            "Smile": {
                "Value": false,
                "Confidence": 54.83989715576172
            },
            "Eyeglasses": {
                "Value": false,
                "Confidence": 53.24875259399414
            },
            "Sunglasses": {
                "Value": false,
                "Confidence": 54.3681755065918
            },
            "Gender": {
                "Value": "Male",
                "Confidence": 54.61311340332031
            },
            "Beard": {
                "Value": true,
                "Confidence": 50.3885612487793
            },
            "Mustache": {
                "Value": false,
                "Confidence": 54.03059005737305
            },
            "EyesOpen": {
                "Value": true,
                "Confidence": 54.86281967163086
            },
            "MouthOpen": {
                "Value": false,
                "Confidence": 53.010009765625
            },
            "Emotions": [
                {
                    "Type": "ANGRY",
                    "Confidence": 45.84453582763672
                },
                {
                    "Type": "FEAR",
                    "Confidence": 49.08755874633789
                },
                {
                    "Type": "SAD",
                    "Confidence": 48.044490814208984
                },
                {
                    "Type": "CALM",
                    "Confidence": 45.60464096069336
                },
                {
                    "Type": "HAPPY",
                    "Confidence": 45.03826904296875
                },
                {
                    "Type": "CONFUSED",
                    "Confidence": 45.1912956237793
                },
                {
                    "Type": "SURPRISED",
                    "Confidence": 46.129150390625
                },
                {
                    "Type": "DISGUSTED",
                    "Confidence": 45.060054779052734
                }
            ],
            "Landmarks": [
                {
                    "Type": "eyeLeft",
                    "X": 0.8781353235244751,
                    "Y": 0.5331472754478455
                },
                {
                    "Type": "eyeRight",
                    "X": 0.869394063949585,
                    "Y": 0.5533623099327087
                },
                {
                    "Type": "mouthLeft",
                    "X": 0.8543952703475952,
                    "Y": 0.5070979595184326
                },
                {
                    "Type": "mouthRight",
                    "X": 0.8477988243103027,
                    "Y": 0.5230692625045776
                },
                {
                    "Type": "nose",
                    "X": 0.8716346025466919,
                    "Y": 0.5304551720619202
                },
                {
                    "Type": "leftEyeBrowLeft",
                    "X": 0.8835707902908325,
                    "Y": 0.5290471315383911
                },
                {
                    "Type": "leftEyeBrowRight",
                    "X": 0.8868613839149475,
                    "Y": 0.5454819202423096
                },
                {
                    "Type": "leftEyeBrowUp",
                    "X": 0.8883397579193115,
                    "Y": 0.5390796065330505
                },
                {
                    "Type": "rightEyeBrowLeft",
                    "X": 0.8814401030540466,
                    "Y": 0.5579567551612854
                },
                {
                    "Type": "rightEyeBrowRight",
                    "X": 0.8670448660850525,
                    "Y": 0.5670304298400879
                },
                {
                    "Type": "rightEyeBrowUp",
                    "X": 0.877813458442688,
                    "Y": 0.5652103424072266
                },
                {
                    "Type": "leftEyeLeft",
                    "X": 0.8783277273178101,
                    "Y": 0.5284242033958435
                },
                {
                    "Type": "leftEyeRight",
                    "X": 0.8757176995277405,
                    "Y": 0.5359859466552734
                },
                {
                    "Type": "leftEyeUp",
                    "X": 0.8795347809791565,
                    "Y": 0.5335092544555664
                },
                {
                    "Type": "leftEyeDown",
                    "X": 0.8771616220474243,
                    "Y": 0.53129643201828
                },
                {
                    "Type": "rightEyeLeft",
                    "X": 0.8699447512626648,
                    "Y": 0.5485483407974243
                },
                {
                    "Type": "rightEyeRight",
                    "X": 0.8652085661888123,
                    "Y": 0.5564696788787842
                },
                {
                    "Type": "rightEyeUp",
                    "X": 0.8697998523712158,
                    "Y": 0.554349958896637
                },
                {
                    "Type": "rightEyeDown",
                    "X": 0.8675624132156372,
                    "Y": 0.5517592430114746
                },
                {
                    "Type": "noseLeft",
                    "X": 0.864964485168457,
                    "Y": 0.5220027565956116
                },
                {
                    "Type": "noseRight",
                    "X": 0.8609451055526733,
                    "Y": 0.5307477712631226
                },
                {
                    "Type": "mouthUp",
                    "X": 0.8589581251144409,
                    "Y": 0.5209534168243408
                },
                {
                    "Type": "mouthDown",
                    "X": 0.850980818271637,
                    "Y": 0.5131813287734985
                },
                {
                    "Type": "leftPupil",
                    "X": 0.8781353235244751,
                    "Y": 0.5331472754478455
                },
                {
                    "Type": "rightPupil",
                    "X": 0.869394063949585,
                    "Y": 0.5533623099327087
                },
                {
                    "Type": "upperJawlineLeft",
                    "X": 0.8650891780853271,
                    "Y": 0.5151005387306213
                },
                {
                    "Type": "midJawlineLeft",
                    "X": 0.8431430459022522,
                    "Y": 0.49400797486305237
                },
                {
                    "Type": "chinBottom",
                    "X": 0.8355048298835754,
                    "Y": 0.5003891587257385
                },
                {
                    "Type": "midJawlineRight",
                    "X": 0.8251460790634155,
                    "Y": 0.5319800972938538
                },
                {
                    "Type": "upperJawlineRight",
                    "X": 0.8428035974502563,
                    "Y": 0.5624011158943176
                }
            ],
            "Pose": {
                "Roll": 118.93660736083984,
                "Yaw": -44.56156921386719,
                "Pitch": 20.28704833984375
            },
            "Quality": {
                "Brightness": 85.13558197021484,
                "Sharpness": 89.85481262207031
            },
            "Confidence": 99.96990203857422
        },
        {
            "BoundingBox": {
                "Width": 0.04701037332415581,
                "Height": 0.07499895244836807,
                "Left": 0.4147825241088867,
                "Top": 0.6886023283004761
            },
            "AgeRange": {
                "Low": 22,
                "High": 34
            },
            "Smile": {
                "Value": false,
                "Confidence": 50.31565475463867
            },
            "Eyeglasses": {
                "Value": false,
                "Confidence": 50.11409378051758
            },
            "Sunglasses": {
                "Value": false,
                "Confidence": 50.2744026184082
            },
            "Gender": {
                "Value": "Male",
                "Confidence": 50.42430114746094
            },
            "Beard": {
                "Value": true,
                "Confidence": 50.027400970458984
            },
            "Mustache": {
                "Value": false,
                "Confidence": 50.360809326171875
            },
            "EyesOpen": {
                "Value": true,
                "Confidence": 50.451690673828125
            },
            "MouthOpen": {
                "Value": false,
                "Confidence": 50.06884765625
            },
            "Emotions": [
                {
                    "Type": "ANGRY",
                    "Confidence": 49.627830505371094
                },
                {
                    "Type": "SAD",
                    "Confidence": 49.56283187866211
                },
                {
                    "Type": "FEAR",
                    "Confidence": 50.061988830566406
                },
                {
                    "Type": "CALM",
                    "Confidence": 49.60093688964844
                },
                {
                    "Type": "DISGUSTED",
                    "Confidence": 49.54352569580078
                },
                {
                    "Type": "HAPPY",
                    "Confidence": 49.54714584350586
                },
                {
                    "Type": "CONFUSED",
                    "Confidence": 49.520606994628906
                },
                {
                    "Type": "SURPRISED",
                    "Confidence": 49.535133361816406
                }
            ],
            "Landmarks": [
                {
                    "Type": "eyeLeft",
                    "X": 0.4284121096134186,
                    "Y": 0.7184935212135315
                },
                {
                    "Type": "eyeRight",
                    "X": 0.43668362498283386,
                    "Y": 0.7126566767692566
                },
                {
                    "Type": "mouthLeft",
                    "X": 0.4349792003631592,
                    "Y": 0.7283509373664856
                },
                {
                    "Type": "mouthRight",
                    "X": 0.4419858157634735,
                    "Y": 0.7235278487205505
                },
                {
                    "Type": "nose",
                    "X": 0.43629977107048035,
                    "Y": 0.722704291343689
                },
                {
                    "Type": "leftEyeBrowLeft",
                    "X": 0.4241586923599243,
                    "Y": 0.7180318236351013
                },
                {
                    "Type": "leftEyeBrowRight",
                    "X": 0.4287092387676239,
                    "Y": 0.7148158550262451
                },
                {
                    "Type": "leftEyeBrowUp",
                    "X": 0.4261903762817383,
                    "Y": 0.7157451510429382
                },
                {
                    "Type": "rightEyeBrowLeft",
                    "X": 0.4335206151008606,
                    "Y": 0.7113913893699646
                },
                {
                    "Type": "rightEyeBrowRight",
                    "X": 0.43840110301971436,
                    "Y": 0.7075032591819763
                },
                {
                    "Type": "rightEyeBrowUp",
                    "X": 0.4355311989784241,
                    "Y": 0.7088116407394409
                },
                {
                    "Type": "leftEyeLeft",
                    "X": 0.42720815539360046,
                    "Y": 0.7193988561630249
                },
                {
                    "Type": "leftEyeRight",
                    "X": 0.43036019802093506,
                    "Y": 0.7175643444061279
                },
                {
                    "Type": "leftEyeUp",
                    "X": 0.42846548557281494,
                    "Y": 0.7181983590126038
                },
                {
                    "Type": "leftEyeDown",
                    "X": 0.4290151298046112,
                    "Y": 0.7190854549407959
                },
                {
                    "Type": "rightEyeLeft",
                    "X": 0.43517008423805237,
                    "Y": 0.7140955924987793
                },
                {
                    "Type": "rightEyeRight",
                    "X": 0.43798673152923584,
                    "Y": 0.7115782499313354
                },
                {
                    "Type": "rightEyeUp",
                    "X": 0.4364575743675232,
                    "Y": 0.7124010920524597
                },
                {
                    "Type": "rightEyeDown",
                    "X": 0.4369019567966461,
                    "Y": 0.7133592367172241
                },
                {
                    "Type": "noseLeft",
                    "X": 0.43508270382881165,
                    "Y": 0.7241132259368896
                },
                {
                    "Type": "noseRight",
                    "X": 0.4380292296409607,
                    "Y": 0.7219674587249756
                },
                {
                    "Type": "mouthUp",
                    "X": 0.43793272972106934,
                    "Y": 0.7257525324821472
                },
                {
                    "Type": "mouthDown",
                    "X": 0.4395196735858917,
                    "Y": 0.728694498538971
                },
                {
                    "Type": "leftPupil",
                    "X": 0.4284121096134186,
                    "Y": 0.7184935212135315
                },
                {
                    "Type": "rightPupil",
                    "X": 0.43668362498283386,
                    "Y": 0.7126566767692566
                },
                {
                    "Type": "upperJawlineLeft",
                    "X": 0.4227452874183655,
                    "Y": 0.7198435068130493
                },
                {
                    "Type": "midJawlineLeft",
                    "X": 0.43062615394592285,
                    "Y": 0.7304227352142334
                },
                {
                    "Type": "chinBottom",
                    "X": 0.4420109987258911,
                    "Y": 0.733522355556488
                },
                {
                    "Type": "midJawlineRight",
                    "X": 0.44504693150520325,
                    "Y": 0.7198812961578369
                },
                {
                    "Type": "upperJawlineRight",
                    "X": 0.44071856141090393,
                    "Y": 0.7067651748657227
                }
            ],
            "Pose": {
                "Roll": -31.231826782226562,
                "Yaw": -7.7481231689453125,
                "Pitch": -28.088232040405273
            },
            "Quality": {
                "Brightness": 82.80461120605469,
                "Sharpness": 86.86019134521484
            },
            "Confidence": 99.26252746582031
        }
    ]
}