Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Erkennen von Labels in einem Video
Amazon Rekognition Video kann Label (Objekte und Konzepte) und den Zeitpunkt, zu dem ein Label erkannt wird, in einem Video erkennen. Ein SDK Codebeispiel finden Sie unterAnalysieren eines in einem Amazon S3 S3-Bucket gespeicherten Videos mit Java oder Python (SDK). Ein AWS CLI Beispiel finden Sie unterAnalysieren eines Videos mit dem AWS Command Line Interface.
Die Amazon-Rekognition-Video-Labelerkennung ist eine asynchrone Operation. Rufen Sie an, um die Erkennung von Etiketten in einem Video zu starten StartLabelDetection.
Das Amazon-Simple-Notification-Service-Thema, zu dem Amazon Rekognition Video die Ergebnisse der Objekterkennung und den Abschlussstatus einer Videoanalyse-Operation veröffentlicht. Wenn die Videoanalyse erfolgreich ist, rufen Sie an, um die erkannten Etiketten GetLabelDetectionzu erhalten. Informationen zum Aufrufen der API Videoanalysefunktionen finden Sie unter. Amazon-Rekognition-Video-Operationen aufrufen
StartLabelDetectionAnfrage
Das folgende Beispiel ist eine Anforderung für die StartLabelDetection
-Operation. Sie stellen für die StartLabelDetection
-Operation ein Video bereit, das in einem Amazon-S3-Bucket gespeichert ist. In der Beispielanforderung JSON werden der Amazon S3 S3-Bucket und der Videoname zusammen mitMinConfidence
, Features
Settings
, und angegebenNotificationChannel
.
MinConfidence
ist das Mindestvertrauen, das Amazon Rekognition Video in die Genauigkeit des erkannten Labels oder eines Instance-Begrenzungsrahmens (falls erkannt) haben muss, damit es in der Antwort zurückgegeben wird.
Mit Features
können Sie angeben, dass GENERAL _ als Teil der Antwort LABELS zurückgegeben werden soll.
Mit Settings
können Sie die zurückgegebenen Artikel nach GENERAL _ filternLABELS. Für Label können Sie inklusive und exklusive Filter verwenden. Sie können auch nach labelspezifischen, individuellen Labels oder Nach-Label-Kategorien filtern:
-
LabelInclusionFilters
– Wird verwendet, um anzugeben, welche Label in der Antwort enthalten sein sollen -
LabelExclusionFilters
– Wird verwendet, um anzugeben, welche Label aus der Antwort ausgeschlossen werden sollen. -
LabelCategoryInclusionFilters
– Wird verwendet, um anzugeben, welche Labelkategorien in die Antwort aufgenommen werden sollen. -
LabelCategoryExclusionFilters
– Wird verwendet, um anzugeben, welche Labelkategorien aus der Antwort ausgeschlossen werden sollen.
Sie können je nach Bedarf auch inklusive und exklusive Filter kombinieren, wobei Sie einige Label oder Kategorien ausschließen und andere einbeziehen.
NotificationChannel
ist das ARN SNS Amazon-Thema, für das Amazon Rekognition Video den Abschlussstatus des Etikettenerkennungsvorgangs veröffentlichen soll. Wenn Sie die AmazonRekognitionServiceRole
Berechtigungsrichtlinie verwenden, muss das SNS Amazon-Thema einen Themennamen haben, der mit Rekognition beginnt.
Im Folgenden finden Sie ein Beispiel für eine StartLabelDetection
Anfrage in JSON Form eines Formulars, einschließlich Filtern:
{ "ClientRequestToken": "5a6e690e-c750-460a-9d59-c992e0ec8638", "JobTag": "5a6e690e-c750-460a-9d59-c992e0ec8638", "Video": { "S3Object": { "Bucket": "bucket", "Name": "video.mp4" } }, "Features": ["GENERAL_LABELS"], "MinConfidence": 75, "Settings": { "GeneralLabels": { "LabelInclusionFilters": ["Cat", "Dog"], "LabelExclusionFilters": ["Tiger"], "LabelCategoryInclusionFilters": ["Animals and Pets"], "LabelCategoryExclusionFilters": ["Popular Landmark"] } }, "NotificationChannel": { "RoleArn": "arn:aws:iam::012345678910:role/SNSAccessRole", "SNSTopicArn": "arn:aws:sns:us-east-1:012345678910:notification-topic", } }
GetLabelDetection Reaktion auf den Vorgang
GetLabelDetection
gibt ein Array (Labels
) zurück, das Informationen über die erkannten Labels im Video enthält. Das Array kann entweder nach Zeit oder nach dem Label sortiert werden, das bei der Angabe des SortBy
-Parameters erkannt wurde. Mithilfe des Parameters können Sie auch auswählen, wie Antwortelemente mit AggregateBy
aggregiert werden.
Das folgende Beispiel ist die JSON Antwort vonGetLabelDetection
. In der Antwort ist Folgendes zu beachten:
-
Sortierreihenfolge – Das Array der zurückgegebenen Labels wird nach der Zeit sortiert. Um nach dem Label zu sortieren, geben Sie
NAME
im EingabeparameterSortBy
fürGetLabelDetection
an. Wenn das Label im Video mehrfach vorkommt, wird das Element (LabelDetection) mehrfach vorkommen. Die Standardsortierreihenfolge istTIMESTAMP
, die sekundäre Sortierreihenfolge istNAME
. -
Label-Informationen – Das
LabelDetection
-Arrayelement enthält ein (Label)-Objekt, das wiederum den Namen des Labels und das Vertrauen, das Amazon Rekognition in die Genauigkeit des erkannten Labels hat, enthält. EinLabel
-Objekt enthält auch eine hierarchische Taxonomie der Labels und Begrenzungsrahmen-Informationen für gängige Labels.Timestamp
ist die Zeit, zu der das Label erkannt wurde, definiert als die Anzahl der seit dem Start des Videos verstrichenen Millisekunden.Informationen zu allen Kategorien oder Aliasnamen, die einem Label zugeordnet sind, werden ebenfalls zurückgegeben. Bei nach Video
SEGMENTS
aggregierten Ergebnissen werden dieStartTimestampMillis
-,EndTimestampMillis
- undDurationMillis
-Strukturen zurückgegeben, die jeweils die Startzeit, die Endzeit und die Dauer eines Segments definieren. -
Aggregation: Gibt an, wie Ergebnisse aggregiert werden, wenn sie zurückgegeben werden. Standardmäßig wird nach
TIMESTAMPS
aggregiert. Sie können sich auch für die Aggregation nachSEGMENTS
entscheiden, wodurch die Ergebnisse über ein Zeitfenster aggregiert werden. Bei der Aggregation nachSEGMENTS
werden Informationen über erkannte Instances mit Begrenzungsrahmen nicht zurückgegeben. Es werden nur Label zurückgegeben, die während der Segmente erkannt wurden. -
Seiteninformationen – Das Beispiel zeigt eine Seite mit Informationen der Label-Erkennung. Sie können festlegen, wie viele
LabelDetection
-Objekte zurückgegeben werden sollen, durch den EingabeparameterMaxResults
vonGetLabelDetection
. Wenn mehr Ergebnisse alsMaxResults
vorhanden sind, gibtGetLabelDetection
einen Token zurück (NextToken
), der dazu verwendet wird, die nächste Seite mit Ergebnissen zu erhalten. Weitere Informationen finden Sie unter Analyseergebnisse von Amazon Rekognition Video abrufen. -
Video-Informationen – Die Antwort enthält Informationen über das Videoformat (
VideoMetadata
) in jeder Seite mit Informationen, die vonGetLabelDetection
zurückgegeben werden.
Im Folgenden finden Sie ein Beispiel für eine GetLabelDetection Antwort in JSON Form einer Aggregation nach: TIMESTAMPS
{ "JobStatus": "SUCCEEDED", "LabelModelVersion": "3.0", "Labels": [ { "Timestamp": 1000, "Label": { "Name": "Car", "Categories": [ { "Name": "Vehicles and Automotive" } ], "Aliases": [ { "Name": "Automobile" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875, // Classification confidence "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 // Detection confidence } ] } }, { "Timestamp": 1000, "Label": { "Name": "Cup", "Categories": [ { "Name": "Kitchen and Dining" } ], "Aliases": [ { "Name": "Mug" } ], "Parents": [], "Confidence": 99.9364013671875, // Classification confidence "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 // Detection confidence } ] } }, { "Timestamp": 2000, "Label": { "Name": "Kangaroo", "Categories": [ { "Name": "Animals and Pets" } ], "Aliases": [ { "Name": "Wallaby" } ], "Parents": [ { "Name": "Mammal" } ], "Confidence": 99.9364013671875, "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567, }, "Confidence": 99.9364013671875 } ] } }, { "Timestamp": 4000, "Label": { "Name": "Bicycle", "Categories": [ { "Name": "Hobbies and Interests" } ], "Aliases": [ { "Name": "Bike" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875, "Instances": [ { "BoundingBox": { "Width": 0.26779675483703613, "Height": 0.8562285900115967, "Left": 0.3604024350643158, "Top": 0.09245597571134567 }, "Confidence": 99.9364013671875 } ] } } ], "VideoMetadata": { "ColorRange": "FULL", "DurationMillis": 5000, "Format": "MP4", "FrameWidth": 1280, "FrameHeight": 720, "FrameRate": 24 } }
Das Folgende ist ein Beispiel für eine GetLabelDetection Antwort in einem JSON Formular mit Aggregation nach: SEGMENTS
{ "JobStatus": "SUCCEEDED", "LabelModelVersion": "3.0", "Labels": [ { "StartTimestampMillis": 225, "EndTimestampMillis": 3578, "DurationMillis": 3353, "Label": { "Name": "Car", "Categories": [ { "Name": "Vehicles and Automotive" } ], "Aliases": [ { "Name": "Automobile" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875 // Maximum confidence score for Segment mode } }, { "StartTimestampMillis": 7578, "EndTimestampMillis": 12371, "DurationMillis": 4793, "Label": { "Name": "Kangaroo", "Categories": [ { "Name": "Animals and Pets" } ], "Aliases": [ { "Name": "Wallaby" } ], "Parents": [ { "Name": "Mammal" } ], "Confidence": 99.9364013671875 } }, { "StartTimestampMillis": 22225, "EndTimestampMillis": 22578, "DurationMillis": 2353, "Label": { "Name": "Bicycle", "Categories": [ { "Name": "Hobbies and Interests" } ], "Aliases": [ { "Name": "Bike" } ], "Parents": [ { "Name": "Vehicle" } ], "Confidence": 99.9364013671875 } } ], "VideoMetadata": { "ColorRange": "FULL", "DurationMillis": 5000, "Format": "MP4", "FrameWidth": 1280, "FrameHeight": 720, "FrameRate": 24 } }
Transformation der Antwort GetLabelDetection
Beim Abrufen von Ergebnissen mit der GetLabelDetection API Operation muss die Antwortstruktur möglicherweise die ältere API Antwortstruktur nachahmen, bei der sowohl primäre Labels als auch Aliase in derselben Liste enthalten waren.
Die im vorherigen Abschnitt gefundene JSON Beispielantwort zeigt die aktuelle Form der API Antwort von. GetLabelDetection
Das folgende Beispiel zeigt die vorherige Antwort von GetLabelDetection API:
{ "Labels": [ { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 60.51791763305664, "Parents": [], "Name": "Leaf" } }, { "Timestamp": 0, "Label": { "Instances": [], "Confidence": 99.53411102294922, "Parents": [], "Name": "Human" } }, { "Timestamp": 0, "Label": { "Instances": [ { "BoundingBox": { "Width": 0.11109819263219833, "Top": 0.08098889887332916, "Left": 0.8881205320358276, "Height": 0.9073750972747803 }, "Confidence": 99.5831298828125 }, { "BoundingBox": { "Width": 0.1268676072359085, "Top": 0.14018426835536957, "Left": 0.0003282368124928324, "Height": 0.7993982434272766 }, "Confidence": 99.46029663085938 } ], "Confidence": 99.63411102294922, "Parents": [], "Name": "Person" } }, . . . { "Timestamp": 166, "Label": { "Instances": [], "Confidence": 73.6471176147461, "Parents": [ { "Name": "Clothing" } ], "Name": "Sleeve" } } ], "LabelModelVersion": "2.0", "JobStatus": "SUCCEEDED", "VideoMetadata": { "Format": "QuickTime / MOV", "FrameRate": 23.976024627685547, "Codec": "h264", "DurationMillis": 5005, "FrameHeight": 674, "FrameWidth": 1280 } }
Bei Bedarf können Sie die aktuelle Antwort so transformieren, dass sie dem Format der älteren Antwort folgt. Sie können den folgenden Beispielcode verwenden, um die letzte API Antwort in die vorherige API Antwortstruktur umzuwandeln:
from copy import deepcopy VIDEO_LABEL_KEY = "Labels" LABEL_KEY = "Label" ALIASES_KEY = "Aliases" INSTANCE_KEY = "Instances" NAME_KEY = "Name" #Latest API response sample for AggregatedBy SEGMENTS EXAMPLE_SEGMENT_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label":{ "Name": "Person", "Confidence": 97.530106, "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, "StartTimestampMillis": 6400, "EndTimestampMillis": 8200, "DurationMillis": 1800 }, ] } #Output example after the transformation for AggregatedBy SEGMENTS EXPECTED_EXPANDED_SEGMENT_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label":{ "Name": "Person", "Confidence": 97.530106, "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, "StartTimestampMillis": 6400, "EndTimestampMillis": 8200, "DurationMillis": 1800 }, { "Timestamp": 0, "Label":{ "Name": "Human", "Confidence": 97.530106, "Parents": [], "Categories": [ { "Name": "Person Description" } ], }, "StartTimestampMillis": 0, "EndTimestampMillis": 500666, "DurationMillis": 500666 }, ] } #Latest API response sample for AggregatedBy TIMESTAMPS EXAMPLE_TIMESTAMP_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label": { "Name": "Person", "Confidence": 97.530106, "Instances": [ { "BoundingBox": { "Height": 0.1549897, "Width": 0.07747964, "Top": 0.50858885, "Left": 0.00018205095 }, "Confidence": 97.530106 }, ], "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Instances": [], "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, }, ] } #Output example after the transformation for AggregatedBy TIMESTAMPS EXPECTED_EXPANDED_TIMESTAMP_OUTPUT = { "Labels": [ { "Timestamp": 0, "Label": { "Name": "Person", "Confidence": 97.530106, "Instances": [ { "BoundingBox": { "Height": 0.1549897, "Width": 0.07747964, "Top": 0.50858885, "Left": 0.00018205095 }, "Confidence": 97.530106 }, ], "Parents": [], "Aliases": [ { "Name": "Human" }, ], "Categories": [ { "Name": "Person Description" } ], }, }, { "Timestamp": 6400, "Label": { "Name": "Leaf", "Confidence": 89.77790069580078, "Instances": [], "Parents": [ { "Name": "Plant" } ], "Aliases": [], "Categories": [ { "Name": "Plants and Flowers" } ], }, }, { "Timestamp": 0, "Label": { "Name": "Human", "Confidence": 97.530106, "Parents": [], "Categories": [ { "Name": "Person Description" } ], }, }, ] } def expand_aliases(inferenceOutputsWithAliases): if VIDEO_LABEL_KEY in inferenceOutputsWithAliases: expandInferenceOutputs = [] for segmentLabelDict in inferenceOutputsWithAliases[VIDEO_LABEL_KEY]: primaryLabelDict = segmentLabelDict[LABEL_KEY] if ALIASES_KEY in primaryLabelDict: for alias in primaryLabelDict[ALIASES_KEY]: aliasLabelDict = deepcopy(segmentLabelDict) aliasLabelDict[LABEL_KEY][NAME_KEY] = alias[NAME_KEY] del aliasLabelDict[LABEL_KEY][ALIASES_KEY] if INSTANCE_KEY in aliasLabelDict[LABEL_KEY]: del aliasLabelDict[LABEL_KEY][INSTANCE_KEY] expandInferenceOutputs.append(aliasLabelDict) inferenceOutputsWithAliases[VIDEO_LABEL_KEY].extend(expandInferenceOutputs) return inferenceOutputsWithAliases if __name__ == "__main__": segmentOutputWithExpandAliases = expand_aliases(EXAMPLE_SEGMENT_OUTPUT) assert segmentOutputWithExpandAliases == EXPECTED_EXPANDED_SEGMENT_OUTPUT timestampOutputWithExpandAliases = expand_aliases(EXAMPLE_TIMESTAMP_OUTPUT) assert timestampOutputWithExpandAliases == EXPECTED_EXPANDED_TIMESTAMP_OUTPUT