この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
いわさです。
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_LABELS
とIMAGE_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_LABELS
とIMAGE_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"
}
検出されたラベルでインスタンスごとのBoundingBox
とConfidence
を確認出来ますが、これに追加してDominantColors
が追加されるはずですがされていません。
何か抽出条件があるのか、StartLabelDetection にオプションが追加されるを待つ必要があるのかもう少し調べてみます。
さいごに
本日は Amazon Rekognition のラベル検出機能にドミナントカラーと画像品質の検出オプションが追加されたので試してみました。
これらは Microsoft Azure の Compute Vision でいう Detecting Color Schemes、Google Cloud の Cloud Vision API でいう画像プロパティで得られる情報に近いもので、他のクラウドサービスでは取得出来る情報なのにと悩んでいた方には朗報ですね。
- 配色の検出 - Computer Vision - Azure Cognitive Services | Microsoft Learn
- 画像プロパティを検出する | Cloud Vision API | Google Cloud
Amazon Rekognition でもこれからはこれの情報を使った分析や分類が出来るようになりました。