翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
DetectLabels オペレーションを使用して、イメージ内のラベル (オブジェクトと概念) を検出し、イメージのプロパティに関する情報を取得できます。イメージプロパティには、前景や背景の色、イメージの鮮明度、明るさ、コントラストなどの属性が含まれます。イメージ内のラベルのみ、イメージプロパティのみ、またはその両方を取得できます。例については、Amazon S3 バケットに保存されたイメージの分析を参照してください。
次の例では AWS SDKs と を使用して AWS CLI を呼び出しますDetectLabels
。DetectLabels
オペレーションからのレスポンスの詳細については、「DetectLabels のレスポンス」を参照してください。
イメージ内のラベルを検出するには
-
まだ実行していない場合:
AmazonRekognitionFullAccess
とAmazonS3ReadOnlyAccess
のアクセス権限を持つユーザーを作成または更新します。詳細については、「ステップ 1: AWS アカウントを設定してユーザーを作成する」を参照してください。と AWS SDKs をインストール AWS CLI して設定します。詳細については、「ステップ 2: AWS CLI と AWS SDK をセットアップする」を参照してください。
-
1 つ以上のオブジェクト (樹木、家、ボートなど) が含まれているイメージを S3 バケットにアップロードします。イメージは、.jpg 形式または .png 形式にする必要があります。
手順については、Amazon Simple Storage Service 入門ガイドの「Amazon S3 へのオブジェクトのアップロード」を参照してください。
-
以下の例を使用して、
DetectLabels
オペレーションを呼び出します。この例では、入力イメージ内で検出されたラベルのリストを表示します。
bucket
およびphoto
の値は、ステップ 2 で使用したバケット名とイメージ名に置き換えます。package com.amazonaws.samples; import java.util.List; import com.amazonaws.services.rekognition.model.BoundingBox; import com.amazonaws.services.rekognition.model.DetectLabelsRequest; import com.amazonaws.services.rekognition.model.DetectLabelsResult; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.Instance; import com.amazonaws.services.rekognition.model.Label; import com.amazonaws.services.rekognition.model.Parent; import com.amazonaws.services.rekognition.model.S3Object; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.AmazonRekognitionException; public class DetectLabels { public static void main(String[] args) throws Exception { String photo = "photo"; String bucket = "bucket"; AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); DetectLabelsRequest request = new DetectLabelsRequest() .withImage(new Image().withS3Object(new S3Object().withName(photo).withBucket(bucket))) .withMaxLabels(10).withMinConfidence(75F); try { DetectLabelsResult result = rekognitionClient.detectLabels(request); List<Label> labels = result.getLabels(); System.out.println("Detected labels for " + photo + "\n"); for (Label label : labels) { System.out.println("Label: " + label.getName()); System.out.println("Confidence: " + label.getConfidence().toString() + "\n"); List<Instance> instances = label.getInstances(); System.out.println("Instances of " + label.getName()); if (instances.isEmpty()) { System.out.println(" " + "None"); } else { for (Instance instance : instances) { System.out.println(" Confidence: " + instance.getConfidence().toString()); System.out.println(" Bounding box: " + instance.getBoundingBox().toString()); } } System.out.println("Parent labels for " + label.getName() + ":"); List<Parent> parents = label.getParents(); if (parents.isEmpty()) { System.out.println(" None"); } else { for (Parent parent : parents) { System.out.println(" " + parent.getName()); } } System.out.println("--------------------"); System.out.println(); } } catch (AmazonRekognitionException e) { e.printStackTrace(); } } }
DetectLabels オペレーションのリクエスト
DetectLabel
への入力はイメージです。この JSON 入力の例では、ソースイメージを Amazon S3 バケットからロードします。MaxLabels
はレスポンスで返すラベルの最大数です。MinConfidence
は Amazon Rekognition イメージが検出済みラベルの精度で保持しなければならない必要最小限の信頼度であり、それのためにレスポンスで返されます。
Features では、返されるイメージの 1 つ以上の特徴を指定でき、GENERAL_LABELS
と IMAGE_PROPERTIES
を選択できます。GENERAL_LABELS
を含めると、入力イメージで検出されたラベルが返され、IMAGE_PROPERTIES
を含めるとイメージの色と品質を確認できるようになります。
Settings では、返されるアイテムを GENERAL_LABELS
と IMAGE_PROPERTIES
機能の両方でフィルターできます。ラベルには、包含フィルターと除外フィルターを使用できます。特定のラベル、個別のラベル、またはラベルカテゴリ別にフィルタリングすることもできます。
-
LabelInclusionFilters - レスポンスに含めるラベルを指定できます。
-
LabelExclusionFilters - レスポンスから除外するラベルを指定できます。
-
LabelCategoryInclusionFilters - レスポンスに含めるラベルカテゴリを指定できます。
-
LabelCategoryExclusionFilters - レスポンスから除外するラベルカテゴリを指定できます。
また、必要に応じて包含フィルターと除外フィルターを組み合わせて、一部のラベルやカテゴリを除外したり、含めたりすることもできます。
IMAGE_PROPERTIES
は、イメージのドミナントカラーや、鮮明度、明るさ、コントラストなどの品質属性を指します。IMAGE_PROPERTIES
の検出時に、MaxDominantColors
パラメータを使用して、返されるドミナントカラーの最大数を指定できます (デフォルトは 10)。
{
"Image": {
"S3Object": {
"Bucket": "bucket",
"Name": "input.jpg"
}
},
"MaxLabels": 10,
"MinConfidence": 75,
"Features": [ "GENERAL_LABELS", "IMAGE_PROPERTIES" ],
"Settings": {
"GeneralLabels": {
"LabelInclusionFilters": [<Label(s)>],
"LabelExclusionFilters": [<Label(s)>],
"LabelCategoryInclusionFilters": [<Category Name(s)>],
"LabelCategoryExclusionFilters": [<Category Name(s)>]
},
"ImageProperties": {
"MaxDominantColors":10
}
}
}
DetectLabels のレスポンス
DetectLabels
からのレスポンスは、イメージ内で検出されたラベルとラベルの検出に使用された信頼度の配列です。
以下に、DetectLabels
からのレスポンス例を示します。以下のサンプルレスポンスには、GENERAL_LABELS に対して返される次のようなさまざまな属性が含まれています。
-
名前 - 検出されたラベルの名前 この例では、オペレーションによって「携帯電話」というラベルの付いたオブジェクトが検出されました。
-
信頼度 - 各ラベルには信頼度が関連付けられています。この例では、ラベルの信頼度は 99.36% でした。
-
親 - 検出されたラベルの祖先ラベルです。この例では、「携帯電話」というラベルには「電話」という親ラベルが 1 つあります。
-
エイリアス - ラベルに含まれている可能があるエイリアスの情報 この例では、「携帯電話」ラベルに「セルフォン」というエイリアスが含まれている可能性があります。
-
カテゴリ - 検出されたラベルが属するラベルカテゴリ この例では、「テクノロジーとコンピューティング」です。
共通オブジェクトラベルに対するレスポンスは、入力画像上のラベルの位置に対する境界ボックス情報を含みます。例えば、Person ラベルには、2 つの境界ボックスを含むインスタンス配列があります。これらは、画像内で検出された 2 人の人物の位置です。
レスポンスには IMAGE_PROPERTIES に関する属性も含まれています。IMAGE_PROPERTIES 機能によって提供される属性は以下のとおりです。
-
品質 - 入力イメージの鮮明度、明るさ、コントラストに関する情報です。スコアは 0~100 です。品質で評価されるのは、イメージ全体、イメージの背景と前景 (可能な場合) です。ただし、コントラストで評価されるのはイメージ全体のみです。鮮明度と明るさでは、背景と前景も評価に含まれます。
-
ドミナントカラー - イメージ内のドミナントカラーの配列です。ドミナントカラーはそれぞれ、簡略化された色名、CSS カラーパレット、RGB 値、16 進コードで記述されます。
-
前景 - 入力イメージの前景のドミナントカラー、鮮明度、明るさに関する情報です。
-
背景 - 入力イメージの背景のドミナントカラー、鮮明度、明るさに関する情報です。
GENERAL_LABELS と IMAGE_PROPERTIES を入力パラメータとして一緒に使用すると、Amazon Rekognition Image は境界ボックスを持つオブジェクトのドミナントカラーも返します。
フィールド LabelModelVersion
には DetectLabels
で使用される検出モデルのバージョン番号が含まれます。
{
"Labels": [
{
"Name": "Mobile Phone",
"Parents": [
{
"Name": "Phone"
}
],
"Aliases": [
{
"Name": "Cell Phone"
}
],
"Categories": [
{
"Name": "Technology and Computing"
}
],
"Confidence": 99.9364013671875,
"Instances": [
{
"BoundingBox": {
"Width": 0.26779675483703613,
"Height": 0.8562285900115967,
"Left": 0.3604024350643158,
"Top": 0.09245597571134567,
}
"Confidence": 99.9364013671875,
"DominantColors": [
{
"Red": 120,
"Green": 137,
"Blue": 132,
"HexCode": "3A7432",
"SimplifiedColor": "red",
"CssColor": "fuscia",
"PixelPercentage": 40.10
}
],
}
]
}
],
"ImageProperties": {
"Quality": {
"Brightness": 40,
"Sharpness": 40,
"Contrast": 24,
},
"DominantColors": [
{
"Red": 120,
"Green": 137,
"Blue": 132,
"HexCode": "3A7432",
"SimplifiedColor": "red",
"CssColor": "fuscia",
"PixelPercentage": 40.10
}
],
"Foreground": {
"Quality": {
"Brightness": 40,
"Sharpness": 40,
},
"DominantColors": [
{
"Red": 200,
"Green": 137,
"Blue": 132,
"HexCode": "3A7432",
"CSSColor": "",
"SimplifiedColor": "red",
"PixelPercentage": 30.70
}
],
}
"Background": {
"Quality": {
"Brightness": 40,
"Sharpness": 40,
},
"DominantColors": [
{
"Red": 200,
"Green": 137,
"Blue": 132,
"HexCode": "3A7432",
"CSSColor": "",
"SimplifiedColor": "Red",
"PixelPercentage": 10.20
}
],
},
},
"LabelModelVersion": "3.0"
}
DetectLabels レスポンスの変換
DetectLabels API を使用する場合、プライマリラベルとエイリアスの両方が同じリストに含まれていた古い API のレスポンス構造を模倣したレスポンス構造が必要になることがあります。
以下は、DetectLabels からの現在の API レスポンスの例です。
"Labels": [
{
"Name": "Mobile Phone",
"Confidence": 99.99717712402344,
"Instances": [],
"Parents": [
{
"Name": "Phone"
}
],
"Aliases": [
{
"Name": "Cell Phone"
}
]
}
]
以下は、DetectLabels からの以前の API レスポンスの例です。
"Labels": [
{
"Name": "Mobile Phone",
"Confidence": 99.99717712402344,
"Instances": [],
"Parents": [
{
"Name": "Phone"
}
]
},
{
"Name": "Cell Phone",
"Confidence": 99.99717712402344,
"Instances": [],
"Parents": [
{
"Name": "Phone"
}
]
},
]
必要に応じて、現在のレスポンスを古いレスポンスの形式に従うように変換できます。次のサンプルコードを使用して、最新の API レスポンスを以前の API レスポンス構造に変換できます。
次のコードサンプルは、DetectLabels API からの現在のレスポンスを変換する方法を示しています。以下のコードサンプルでは、EXAMPLE_INFERENCE_OUTPUT
の値を、実行した DetectLabels オペレーションの出力に置き換えることができます。
from copy import deepcopy
LABEL_KEY = "Labels"
ALIASES_KEY = "Aliases"
INSTANCE_KEY = "Instances"
NAME_KEY = "Name"
#Latest API response sample
EXAMPLE_INFERENCE_OUTPUT = {
"Labels": [
{
"Name": "Mobile Phone",
"Confidence": 97.530106,
"Categories": [
{
"Name": "Technology and Computing"
}
],
"Aliases": [
{
"Name": "Cell Phone"
}
],
"Instances":[
{
"BoundingBox":{
"Height":0.1549897,
"Width":0.07747964,
"Top":0.50858885,
"Left":0.00018205095
},
"Confidence":98.401276
}
]
},
{
"Name": "Urban",
"Confidence": 99.99982,
"Categories": [
"Colors and Visual Composition"
]
}
]
}
def expand_aliases(inferenceOutputsWithAliases):
if LABEL_KEY in inferenceOutputsWithAliases:
expandInferenceOutputs = []
for primaryLabelDict in inferenceOutputsWithAliases[LABEL_KEY]:
if ALIASES_KEY in primaryLabelDict:
for alias in primaryLabelDict[ALIASES_KEY]:
aliasLabelDict = deepcopy(primaryLabelDict)
aliasLabelDict[NAME_KEY] = alias[NAME_KEY]
del aliasLabelDict[ALIASES_KEY]
if INSTANCE_KEY in aliasLabelDict:
del aliasLabelDict[INSTANCE_KEY]
expandInferenceOutputs.append(aliasLabelDict)
inferenceOutputsWithAliases[LABEL_KEY].extend(expandInferenceOutputs)
return inferenceOutputsWithAliases
if __name__ == "__main__":
outputWithExpandAliases = expand_aliases(EXAMPLE_INFERENCE_OUTPUT)
print(outputWithExpandAliases)
変換されたレスポンスの例を以下に示します。
#Output example after the transformation
{
"Labels": [
{
"Name": "Mobile Phone",
"Confidence": 97.530106,
"Categories": [
{
"Name": "Technology and Computing"
}
],
"Aliases": [
{
"Name": "Cell Phone"
}
],
"Instances":[
{
"BoundingBox":{
"Height":0.1549897,
"Width":0.07747964,
"Top":0.50858885,
"Left":0.00018205095
},
"Confidence":98.401276
}
]
},
{
"Name": "Cell Phone",
"Confidence": 97.530106,
"Categories": [
{
"Name": "Technology and Computing"
}
],
"Instances":[]
},
{
"Name": "Urban",
"Confidence": 99.99982,
"Categories": [
"Colors and Visual Composition"
]
}
]
}