Amazon RekognitionをAWS CLIから使って二次元社員を解析してみた #reinvent

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWS re:Invent 2016が終わって数日経ちますが、まだまだ熱気は冷めません。特にAI関連のサービスは非常に面白いです。画像解析サービスであるAmazon Rekognitionについては以下に多数のブログを書いていますので、ぜひご覧ください。

さて、皆さんご存知の通り、弊社には二次元社員であるめそ子さんがいらっしゃいます。

mesoko_01

昨日は三次元に出張してました。

15325213_1133669820074455_7242188688757600733_o

そんなめそ子さんですが、二次元社員でもちゃんとRekognitionで認識してもらえるんだろうか?というのを、AWS CLIを使ってやってみました!

事前準備

Rekognitionが使えるリージョン

Rekognitionが使えるリージョンは以下の通りです。

US East (N. Virginia) us-east-1
US West (Oregon) us-west-2
EU (Ireland) eu-west-1

このため、aws --region us-east-1のように、Rekognitionが使えるリージョンを指定して実行します。

画像ファイルのアップロード

Rekognitionでは画像ファイルをS3バケットからインポートします。必要な画像をaws cliを使ってアップロードしておきます。

$ aws s3 cp ./mesoko.png s3://test-bucket/

RekognitionをAWS CLIで使ってみる

detect-labels

detect-labesは、GUI画面での「Object and scene detection」です。指定された画像ファイルからオブジェクトやシーン、コンセプトを検出し、ラベリングします。これには通常バージョンを使いました。

aws --region us-east-1 rekognition detect-labels \
--image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_normal.png"}}'

結果は以下の通り。ちゃんとHumanとして認識されています。二次元社員らしくComics、Mangaなどが出てきていますね。

{
    "Labels": [
        {
            "Confidence": 98.54424285888672,
            "Name": "People"
        },
        {
            "Confidence": 98.5442886352539,
            "Name": "Person"
        },
        {
            "Confidence": 98.43740844726562,
            "Name": "Human"
        },
        {
            "Confidence": 72.89351654052734,
            "Name": "Comics"
        },
        {
            "Confidence": 72.89351654052734,
            "Name": "Manga"
        },
        {
            "Confidence": 67.74996185302734,
            "Name": "Maillot"
        },
        {
            "Confidence": 66.44335174560547,
            "Name": "Costume"
        },
        {
            "Confidence": 62.694580078125,
            "Name": "Clown"
        },
        {
            "Confidence": 62.694580078125,
            "Name": "Performer"
        },
        {
            "Confidence": 60.902889251708984,
            "Name": "Heel"
        },
        {
            "Confidence": 52.33467102050781,
            "Name": "Figurine"
        },
        {
            "Confidence": 50.61745071411133,
            "Name": "Footwear"
        },
        {
            "Confidence": 50.61856460571289,
            "Name": "Hippie"
        },
        {
            "Confidence": 50.61745071411133,
            "Name": "Shoe"
        }
    ]
}

detect-faces

detect-facesは、GUI画面での「Facial analysis」です。指定された画像ファイルから顏を認識、表情やその他の要素を解析します。これには8月バージョンを使いました。

aws --region us-east-1 rekognition detect-faces \
--image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_aug.png"}}' \
--attributes "ALL"

結果は以下の通り。GenderがFemale、Smileがtrueとなっています。EyesOpen、MouthOpenもちゃんと検出出来ていますね。EmotionsがHAPPYなのも合ってます。

{
    "FaceDetails": [
        {
            "Confidence": 88.54199981689453,
            "Eyeglasses": {
                "Confidence": 99.9925765991211,
                "Value": false
            },
            "Sunglasses": {
                "Confidence": 98.67586517333984,
                "Value": false
            },
            "Gender": {
                "Confidence": 100.0,
                "Value": "Female"
            },
            "Landmarks": [
                {
                    "Y": 0.2552224397659302,
                    "X": 0.3957245647907257,
                    "Type": "eyeLeft"
                },
                {
                    "Y": 0.25708654522895813,
                    "X": 0.44977006316185,
                    "Type": "eyeRight"
                },
                {
                    "Y": 0.2762846350669861,
                    "X": 0.42634454369544983,
                    "Type": "nose"
                },
                {
                    "Y": 0.3213154673576355,
                    "X": 0.3897435963153839,
                    "Type": "mouthLeft"
                },
                {
                    "Y": 0.32372066378593445,
                    "X": 0.43350324034690857,
                    "Type": "mouthRight"
                },
                {
                    "Y": 0.2566165626049042,
                    "X": 0.39412373304367065,
                    "Type": "leftPupil"
                },
                {
                    "Y": 0.2581627666950226,
                    "X": 0.44744673371315,
                    "Type": "rightPupil"
                },
                {
                    "Y": 0.22764962911605835,
                    "X": 0.3792399764060974,
                    "Type": "leftEyeBrowLeft"
                },
                {
                    "Y": 0.22367167472839355,
                    "X": 0.39797037839889526,
                    "Type": "leftEyeBrowRight"
                },
                {
                    "Y": 0.2365337312221527,
                    "X": 0.41573676466941833,
                    "Type": "leftEyeBrowUp"
                },
                {
                    "Y": 0.2299892008304596,
                    "X": 0.4426124691963196,
                    "Type": "rightEyeBrowLeft"
                },
                {
                    "Y": 0.2252616286277771,
                    "X": 0.4613278806209564,
                    "Type": "rightEyeBrowRight"
                },
                {
                    "Y": 0.23516058921813965,
                    "X": 0.47599753737449646,
                    "Type": "rightEyeBrowUp"
                },
                {
                    "Y": 0.2536274194717407,
                    "X": 0.38417407870292664,
                    "Type": "leftEyeLeft"
                },
                {
                    "Y": 0.25952738523483276,
                    "X": 0.4083125591278076,
                    "Type": "leftEyeRight"
                },
                {
                    "Y": 0.2499462068080902,
                    "X": 0.39566507935523987,
                    "Type": "leftEyeUp"
                },
                {
                    "Y": 0.2591436505317688,
                    "X": 0.3952653706073761,
                    "Type": "leftEyeDown"
                },
                {
                    "Y": 0.2588331997394562,
                    "X": 0.4374157786369324,
                    "Type": "rightEyeLeft"
                },
                {
                    "Y": 0.2596224844455719,
                    "X": 0.46207863092422485,
                    "Type": "rightEyeRight"
                },
                {
                    "Y": 0.25124311447143555,
                    "X": 0.4495422840118408,
                    "Type": "rightEyeUp"
                },
                {
                    "Y": 0.2607886493206024,
                    "X": 0.4500206708908081,
                    "Type": "rightEyeDown"
                },
                {
                    "Y": 0.29305756092071533,
                    "X": 0.409304678440094,
                    "Type": "noseLeft"
                },
                {
                    "Y": 0.29468250274658203,
                    "X": 0.43120652437210083,
                    "Type": "noseRight"
                },
                {
                    "Y": 0.3182951509952545,
                    "X": 0.41752180457115173,
                    "Type": "mouthUp"
                },
                {
                    "Y": 0.33339062333106995,
                    "X": 0.4158816337585449,
                    "Type": "mouthDown"
                }
            ],
            "Pose": {
                "Yaw": 9.999004364013672,
                "Roll": 0.8055953979492188,
                "Pitch": 17.73681640625
            },
            "Emotions": [
                {
                    "Confidence": 98.50025939941406,
                    "Type": "HAPPY"
                },
                {
                    "Confidence": 18.25212860107422,
                    "Type": "SURPRISED"
                },
                {
                    "Confidence": 1.1148333549499512,
                    "Type": "CALM"
                }
            ],
            "EyesOpen": {
                "Confidence": 99.43682098388672,
                "Value": true
            },
            "BoundingBox": {
                "Width": 0.14222222566604614,
                "Top": 0.18611110746860504,
                "Left": 0.3444444537162781,
                "Height": 0.17638888955116272
            },
            "Smile": {
                "Confidence": 99.83159637451172,
                "Value": true
            },
            "MouthOpen": {
                "Confidence": 97.49351501464844,
                "Value": false
            },
            "Quality": {
                "Sharpness": 30.000001907348633,
                "Brightness": 58.01166915893555
            },
            "Mustache": {
                "Confidence": 99.9998779296875,
                "Value": false
            },
            "Beard": {
                "Confidence": 99.99998474121094,
                "Value": false
            }
        }
    ],
    "OrientationCorrection": "ROTATE_0"
}

compare-faces

compare-facesは、GUI画面での「Face comparison」です。指定された2つの画像ファイルから顏をベースに認識、同一人物判定をします。これには11月バージョン12月バージョンを使用しました。

aws --region us-east-1 rekognition compare-faces \
--source-image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_nov.png"}}' \
--target-image '{"S3Object":{"Bucket":"test-bucket","Name":"mesoko_dec.png"}}' 

結果は以下の通り。96%で一致しました。すごい。二次元社員もちゃんと見分けてる。

{
    "FaceMatches": [
        {
            "Face": {
                "BoundingBox": {
                    "Width": 0.14222222566604614,
                    "Top": 0.19722221791744232,
                    "Left": 0.7311111092567444,
                    "Height": 0.17777778208255768
                },
                "Confidence": 96.19059753417969
            },
            "Similarity": 96.0
        }
    ],
    "SourceImageFace": {
        "BoundingBox": {
            "Width": 0.1688888818025589,
            "Top": 0.24166665971279144,
            "Left": 0.22777777910232544,
            "Height": 0.21111111342906952
        },
        "Confidence": 99.58025360107422
    }
}

余談ですが、8月バージョンを使ったところ、狐のお面が顔として認識されてしまいました。この辺の精度は今後に期待ですね。

さいごに

二次元社員めそ子さんも、ちゃんとRekognitionで認識してくれました。素晴らしいです!