Amazon Rekognitionを新米エンジニアが触ってみた。

本記事でやること

AWS CLIからS3に画像をアップロードし、
アップロードした画像で顔の比較を行ってみます。

対象読者

私自身、AWSを全く触ったことが無いのですが

  • 何かしらのAWSを触ってみたい
  • Amazon Rekognitionで何が出来るか知りたい
  • Amazon Rekognitionをサクッと触ってみたい

といった方々のお役に立てればと思います。

Amazon Rekognitionについて

機械学習の専門知識を持っていなくても、APIに画像や動画を渡すだけで、画像分析や動画分析が行えるサービスです。
Amazon Rekognition にはAmazon Rekognition Image とAmazon Rekognition Videoの2つのAPI セットがあります。
本記事では、画像分析を行えるAmazon Rekognition Imageを取り扱っていきます。

できること

Amazon Rekognition Imageで出来ることを簡単にまとめてみます。

  • 物体の判別

車両、ペット、家具など何千もの物体を認識

  • シーンの判別

夕焼けやビーチの様なシーンの検出

  • 顔認識

顔の有無を検出

  • 顔分析

表情の認識

  • 顔の比較

2枚の画像から同一人物かどうか判別

  • 危険画像の検出

アダルトコンテンツや暴力的なコンテンツなどが含まれていないか判別

  • 有名人の認識

エンターテインメントやメディア、スポーツ、ビジネス、政治などの幅広いカテゴリから数千人の有名人を認識

  • 文字検出

画像中の文字を認識

※詳しく知りたい方は下記を参照してください。
参考文献:
コンテンツの節度
Amazon Rekognition Image

docs.aws.amazon.com

aws.amazon.com

やってみたこと

今回は、顔の比較を行うので

  • 「対象となる人物の画像」

対象となる人物の画像

  • 「対象となる人物の別アングル画像」

対象となる人物の別アングル画像

  • 「他人の画像」

を使用していきます。

S3に画像をアップロード

東京リージョンでバケットを作成し、下記のコマンドで画像をアップロードします。

aws s3 cp "アップロードするフォルダパス" "S3パス" --recursive

同一人物を比較

【実行】

aws --region ap-northeast-1 rekognition compare-faces\
--source-image '{"S3Object" : {"Bucket": "test-rekognition","Name":"currentImage.jpg"}}'\
--target-image '{"S3Object":{"Bucket":"test-rekognition","Name":"currentImage_anotherAngle.jpg"}}'

【レスポンス】

    "SourceImageFace": {
        "BoundingBox": {
            "Width": 0.13136573135852814,
            "Height": 0.2187146544456482,
            "Left": 0.43602484464645386,
            "Top": 0.20232082903385162
        },
        "Confidence": 99.9979248046875
    },
    "FaceMatches": [
        {
            "Similarity": 99.99911499023438,
            "Face": {
                "BoundingBox": {
                    "Width": 0.13633866608142853,
                    "Height": 0.22260189056396484,
                    "Left": 0.4336059093475342,
                    "Top": 0.18315382301807404
                },
                "Confidence": 99.99791717529297,
                "Landmarks": [
                    {
                        "Type": "eyeLeft",
                        "X": 0.48327165842056274,
                        "Y": 0.2613270580768585
                    },
                    {
                        "Type": "eyeRight",
                        "X": 0.542209267616272,
                        "Y": 0.27048996090888977
                    },
                    {
                        "Type": "mouthLeft",
                        "X": 0.4791518747806549,
                        "Y": 0.3530019223690033
                    },
                    {
                        "Type": "mouthRight",
                        "X": 0.5285117030143738,
                        "Y": 0.3604651689529419
                    },
                    {
                        "Type": "nose",
                        "X": 0.5147782564163208,
                        "Y": 0.3210946321487427
                    }
                ],
                "Pose": {
                    "Roll": 5.87201452255249,
                    "Yaw": 9.833817481994629,
                    "Pitch": -2.7739710807800293
                },
                "Quality": {
                    "Brightness": 92.60699462890625,
                    "Sharpness": 83.14741516113281
                }
            }
        }
    ],
    "UnmatchedFaces": []
}

「FaceMatches」はソース画像の顔と一致するターゲット画像の顔の配列です。
その中にある、「Similarity」の値が類似性を表したものです。
結果としては99.999114...%同一人物と判別されています。

他人との比較

【実行】

aws --region ap-northeast-1 rekognition compare-faces\
--source-image '{"S3Object" : {"Bucket": "test-rekognition","Name":"currentImage.jpg"}}'\
--target-image '{"S3Object":{"Bucket":"test-rekognition","Name":"others.jpg"}}'

【レスポンス】

{
    "SourceImageFace": {
        "BoundingBox": {
            "Width": 0.13136573135852814,
            "Height": 0.2187146544456482,
            "Left": 0.43602484464645386,
            "Top": 0.20232082903385162
        },
        "Confidence": 99.9979248046875
    },
    "FaceMatches": [],
    "UnmatchedFaces": [
        {
            "BoundingBox": {
                "Width": 0.11476979404687881,
                "Height": 0.20385313034057617,
                "Left": 0.5618985891342163,
                "Top": 0.2616237998008728
            },
            "Confidence": 99.9979248046875,
            "Landmarks": [
                {
                    "Type": "eyeLeft",
                    "X": 0.5824908018112183,
                    "Y": 0.33990299701690674
                },
                {
                    "Type": "eyeRight",
                    "X": 0.6316983699798584,
                    "Y": 0.3396041691303253
                },
                {
                    "Type": "mouthLeft",
                    "X": 0.5921949148178101,
                    "Y": 0.4113447368144989
                },
                {
                    "Type": "mouthRight",
                    "X": 0.6334533095359802,
                    "Y": 0.41160646080970764
                },
                {
                    "Type": "nose",
                    "X": 0.5963849425315857,
                    "Y": 0.38325539231300354
                }
            ],
            "Pose": {
                "Roll": -4.30775785446167,
                "Yaw": -19.50286293029785,
                "Pitch": -1.7162246704101562
            },
            "Quality": {
                "Brightness": 96.10675811767578,
                "Sharpness": 78.64350128173828
            }
        }
    ]
}

「UnmatchedFaces」はソース画像の顔と一致しないターゲット画像の顔の配列です。
今回使用した、他人の画像データは「UnmatchedFaces」に格納されているため、同一人物ではないと判別されています。

困った点

下記のコマンドで実行した際に出たエラーです。
【実行】

aws rekognition compare-faces\
--source-image '{"S3Object" : {"Bucket": "test-rekognition","Name":"currentImage.jpg"}}'\
--target-image '{"S3Object":{"Bucket":"test-rekognition","Name":"currentImage_anotherAngle.jpg"}}'

【エラー】

You must specify a region. You can also configure your region by running "aws configure".

内容は「リージョンが指定されてないよ」という内容なので
awsの後に--region ap-northeast-1を追加すると東京リージョンが指定され、正常に実行されます。

※各リージョンの指定方法は下記を参照してください。
参考文献:
https://docs.aws.amazon.com/general/latest/gr/rande.html

まとめ

今回は、コンソール上からS3に画像をアップロードし
Amazon Rekognition Imageで顔の比較を行い、JSON形式で結果を受け取ることが出来ました。
顔の比較のみを行いましたが、他にも面白そうな機能が沢山あるので
気になった方は是非調べてみてください。

おまけ

今回使用したターゲット画像には、一人しか写っていませんでしたが
複数人写っている画像でも、すべての顔を比較して判別してくれるそうです。

 

 

ブログ著者

 

 

 

アプリケーション開発バナー

AWS相談会バナー