Amazon Rekognition のラベル検出機能にドミナントカラーと画像品質の検出オプションが追加されました

2022.11.14

いわさです。

Amazon Rekognition のラベル検出機能を使ってオブジェクトのラベル抽出を行うことが出来ます。
マネジメントコンソールでは以下のようにサンプル画像をベースにいくつかの要素が認識されています。

先日のアップデートで新しいオプションが追加され、画像の配色や画像品質も検出することが出来るようになったようです。
本日時点でマネジメントコンソール上では利用出来ませんが AWS CLI では利用出来るようになっているので使ってみました。

こちらを利用して画像の色や品質に応じた自動分類を行うなどが可能になります。

AWS CLI からラベル検出機能を使う

マネジメントコンソールでは公開されているサンプルイメージを利用した API の動作を確認することが出来ます。
今回は AWS CLI から DetectLabels を実行するので、必要な画像パラメータはマネジメントコンソール上に表示されているものを利用させて頂きました。

まずは通常のラベル検出を AWS CLI で実行すると以下のようになります。

% aws rekognition detect-labels --image '
{
    "S3Object": {
        "Bucket": "rekognition-console-v4-prod-nrt",
        "Name": "assets/StaticImageAssets/SampleImages/skateboard.jpg"
    }
}'

{
    "Labels": [
        {
            "Name": "Neighborhood",
            "Confidence": 99.99999237060547,
            "Instances": [],
            "Parents": []
        },
:
        {
            "Name": "Person",
            "Confidence": 98.77580261230469,
            "Instances": [
                {
                    "BoundingBox": {
                        "Width": 0.20574712753295898,
                        "Height": 0.2853928506374359,
                        "Left": 0.4315406382083893,
                        "Top": 0.3422974646091461
                    },
                    "Confidence": 98.77580261230469
                },
:
        {
            "Name": "Path",
            "Confidence": 55.08345413208008,
            "Instances": [],
            "Parents": []
        },
        {
            "Name": "Sedan",
            "Confidence": 55.04528045654297,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Car"
                },
                {
                    "Name": "Transportation"
                },
                {
                    "Name": "Vehicle"
                }
            ]
        }
    ],
    "LabelModelVersion": "3.0"
}

抜粋した形ですが、実行結果として抽出されたラベルが詳細情報とともに Labels リストとして取得されています。

features オプションを指定すると ImageProperties にアクセス出来る

今回のアップデートの情報源は以下です。

先程の AWS CLI リファレンスを見ていただくと確認出来ますが、DetectLabels に--featuresというオプションが追加されています。
AWS CLI v1.27.8 から利用可能になっています。

--featuresオプションではGENERAL_LABELSIMAGE_PROPERTIESを指定することが出来ます。
GENERAL_LABELSは従来の通常のラベル検出情報、IMAGE_PROPERTIESが今回新たに取得出来るようになったドミナントカラーや画像品質情報を取得出来るオプションです。

IMAGE_PROPERTIESを指定してみましょう。

% aws-v1 rekognition detect-labels --image '
{
    "S3Object": {
        "Bucket": "rekognition-console-v4-prod-nrt",
        "Name": "assets/StaticImageAssets/SampleImages/skateboard.jpg"
    }
}' --features IMAGE_PROPERTIES
{
    "Labels": [],
    "LabelModelVersion": "3.0",
    "ImageProperties": {
        "Quality": {
            "Brightness": 90.90383911132812,
            "Sharpness": 85.10932159423828,
            "Contrast": 87.2052230834961
        },
        "DominantColors": [
            {
                "Red": 255,
                "Blue": 255,
                "Green": 255,
                "HexCode": "#ffffff",
                "CSSColor": "white",
                "SimplifiedColor": "white",
                "PixelPercent": 26.541555404663086
            },
            {
                "Red": 220,
                "Blue": 220,
                "Green": 220,
                "HexCode": "#dcdcdc",
                "CSSColor": "gainsboro",
                "SimplifiedColor": "grey",
                "PixelPercent": 16.42091178894043
            },
:
            {
                "Red": 0,
                "Blue": 0,
                "Green": 0,
                "HexCode": "#000000",
                "CSSColor": "black",
                "SimplifiedColor": "black",
                "PixelPercent": 3.954423666000366
            },
            {
                "Red": 222,
                "Blue": 135,
                "Green": 184,
                "HexCode": "#deb887",
                "CSSColor": "burlywood",
                "SimplifiedColor": "brown",
                "PixelPercent": 1.5415549278259277
            }
        ]
    }
}

Qualityが画像の品質情報のサマリで、DominantColorsが抽出されたドミナントカラーのリストですね。
要素ごとにPixelPercentが確認出来るのでどれが主要なものかをフィルタリングすることも出来そうです。

なお、AWS CLI v2 は本日時点でまだ利用出来ないようです。

% aws --version
aws-cli/2.8.12 Python/3.9.11 Darwin/21.6.0 exe/x86_64 prompt/off

% aws rekognition detect-labels --image '
{
    "S3Object": {
        "Bucket": "rekognition-console-v4-prod-nrt",
        "Name": "assets/StaticImageAssets/SampleImages/skateboard.jpg"
    }
}' --features IMAGE_PROPERTIES

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

Unknown options: --features, IMAGE_PROPERTIES

GENERAL_LABELS を使う

GENERAL_LABELSを使うと従来のラベル検出情報が取得されます。
冒頭実行確認したように--featuresオプションを省略した場合はこちらが指定されたときの挙動となります。

また--featuresオプションはリストで指定することが出来るので、GENERAL_LABELSIMAGE_PROPERTIESを同時に指定して取得することも可能です。

% aws-v1 rekognition detect-labels --image '
{
    "S3Object": {
        "Bucket": "rekognition-console-v4-prod-nrt",
        "Name": "assets/StaticImageAssets/SampleImages/landscape.jpg"
    }
}' --features GENERAL_LABELS IMAGE_PROPERTIES
{
    "Labels": [
        {
            "Name": "City",
            "Confidence": 100.0,
            "Instances": [],
            "Parents": [],
            "Aliases": [
                {
                    "Name": "Town"
                }
            ],
            "Categories": [
                {
                    "Name": "Buildings and Architecture"
                }
            ]
        },
:
        {
            "Name": "Skyscraper",
            "Confidence": 55.31693649291992,
            "Instances": [],
            "Parents": [
                {
                    "Name": "Architecture"
                },
                {
                    "Name": "Building"
                },
                {
                    "Name": "City"
                },
                {
                    "Name": "High Rise"
                },
                {
                    "Name": "Urban"
                }
            ],
            "Aliases": [],
            "Categories": [
                {
                    "Name": "Buildings and Architecture"
                }
            ]
        }
    ],
    "LabelModelVersion": "3.0",
    "ImageProperties": {
        "Quality": {
            "Brightness": 80.26612091064453,
            "Sharpness": 65.3908920288086,
            "Contrast": 78.7590560913086
        },
        "DominantColors": [
            {
                "Red": 70,
                "Blue": 180,
                "Green": 130,
                "HexCode": "#4682b4",
                "CSSColor": "steelblue",
                "SimplifiedColor": "blue",
                "PixelPercent": 20.013614654541016
            },
:
            {
                "Red": 135,
                "Blue": 250,
                "Green": 206,
                "HexCode": "#87cefa",
                "CSSColor": "lightskyblue",
                "SimplifiedColor": "blue",
                "PixelPercent": 2.382573127746582
            }
        ]
    }
}

通常のラベルはLabelsを、画像品質にはImagePropertiesへアクセスしましょう。

動画処理 API 側も対応しているようだが...

先程の DetectLabels では画像を処理しますが、動画を処理する場合は非同期 API が用意されていてそちらを利用します。
今回のアップデートではその GetLabelDetection もアップデートされており、レスポンスにドミナントカラー情報が追加されているようです。

ただし、私のほうでいくつかのサンプル動画を対象に試してみましたがうまく抽出されませんでした。

% aws-v1 rekognition start-label-detection --video '
{
    "S3Object": {
        "Bucket": "hoge1114rekognition",
        "Name": "hogehoge.mp4"
    }
}'
{
    "JobId": "d9f34de3ee1aaa4e1ace617e55a0557f94da0a9e24469b9bf4abbccf978672d7"
}

% aws-v1 rekognition get-label-detection --job-id d9f34de3ee1aaa4e1ace617e55a0557f94da0a9e24469b9bf4abbccf978672d7
{
    "JobStatus": "IN_PROGRESS",
    "Labels": [],
    "LabelModelVersion": "2.0"
}
{
    "JobStatus": "SUCCEEDED",
    "VideoMetadata": {
        "Codec": "h264",
        "DurationMillis": 18819,
        "Format": "QuickTime / MOV",
        "FrameRate": 59.940059661865234,
        "FrameHeight": 1080,
        "FrameWidth": 1920,
        "ColorRange": "LIMITED"
    },
    "Labels": [
:
        {
            "Timestamp": 0,
            "Label": {
                "Name": "Airplane",
                "Confidence": 74.68384552001953,
                "Instances": [
                    {
                        "BoundingBox": {
                            "Width": 0.17493301630020142,
                            "Height": 0.12100575864315033,
                            "Left": 0.06651143729686737,
                            "Top": 0.8758683204650879
                        },
                        "Confidence": 80.66650390625
                    },
                    {
                        "BoundingBox": {
                            "Width": 0.0532766655087471,
                            "Height": 0.05747217312455177,
                            "Left": 0.22737394273281097,
                            "Top": 0.8886312246322632
                        },
                        "Confidence": 71.10527038574219
                    },
                    {
                        "BoundingBox": {
                            "Width": 0.05916862562298775,
                            "Height": 0.087615966796875,
                            "Left": 0.0007124006515368819,
                            "Top": 0.8390210866928101
                        },
                        "Confidence": 70.60164642333984
                    },
                    {
                        "BoundingBox": {
                            "Width": 0.1347942352294922,
                            "Height": 0.07822853326797485,
                            "Left": 0.07157095521688461,
                            "Top": 0.8674405217170715
                        },
                        "Confidence": 56.41786575317383
                    }
                ],
                "Parents": [
                    {
                        "Name": "Aircraft"
                    },
                    {
                        "Name": "Vehicle"
                    },
                    {
                        "Name": "Transportation"
                    }
                ]
            }
        },
:
        {
            "Timestamp": 0,
            "Label": {
                "Name": "Control Tower",
                "Confidence": 58.28697204589844,
                "Instances": [],
                "Parents": [
                    {
                        "Name": "Tower"
                    },
                    {
                        "Name": "Architecture"
                    },
                    {
                        "Name": "Building"
                    }
                ]
            }
        },
:
    ],
    "LabelModelVersion": "2.0"
}

検出されたラベルでインスタンスごとのBoundingBoxConfidenceを確認出来ますが、これに追加してDominantColorsが追加されるはずですがされていません。
何か抽出条件があるのか、StartLabelDetection にオプションが追加されるを待つ必要があるのかもう少し調べてみます。

さいごに

本日は Amazon Rekognition のラベル検出機能にドミナントカラーと画像品質の検出オプションが追加されたので試してみました。

これらは Microsoft Azure の Compute Vision でいう Detecting Color Schemes、Google Cloud の Cloud Vision API でいう画像プロパティで得られる情報に近いもので、他のクラウドサービスでは取得出来る情報なのにと悩んでいた方には朗報ですね。

Amazon Rekognition でもこれからはこれの情報を使った分析や分類が出来るようになりました。