Rilevamento di etichette in un video - Amazon Rekognition

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Rilevamento di etichette in un video

Video Amazon Rekognition è in grado di rilevare etichette (oggetti e concetti) e l'ora in cui viene rilevata un'etichetta in un video. Per un esempio di codice SDK, consultare Analisi di un video archiviato in un bucket Amazon S3 con Java o Python (SDK). Per un esempio, vedi. AWS CLI Analisi di un video con il AWS Command Line Interface

Il rilevamento dell’etichetta di Video Amazon Rekognition è un'operazione asincrona. Per avviare il rilevamento delle etichette in un video, chiama StartLabelDetection.

Amazon Rekognition per video pubblica lo stato di completamento dell'analisi video in un argomento Amazon Simple Notification Service. Se l'analisi video ha esito positivo, chiama GetLabelDetection per ottenere le etichette rilevate. Per informazioni su come richiamare le operazioni dell'API di analisi video, consulta Chiamata delle operazioni Video Amazon Rekognition.

StartLabelRichiesta di rilevamento

L’esempio seguente è una richiesta per l’operazione StartLabelDetection. Fornisci l’operazione StartLabelDetection con un video archiviato in un bucket Amazon S3. Nella richiesta di esempio vengono specificati JSON, il bucket Amazon S3 e il nome del video, oltre a MinConfidence, Features, Settings e NotificationChannel.

MinConfidence è l'affidabilità minima che Video Amazon Rekognition deve avere nella precisione dell'etichetta rilevata o un’istanza di riquadro di delimitazione (se rilevato) per ottenerne la restituzione nella risposta.

Con Features, puoi specificare che desideri che GENERAL_LABELS venga restituito come parte della risposta.

Con Settings, puoi filtrare gli articoli restituiti per GENERAL_LABELS. Per le etichette puoi utilizzare filtri inclusivi ed esclusivi. Puoi anche filtrare per etichette singole, specifiche per etichetta o per categoria di etichette:

  • LabelInclusionFilters - Usato per specificare quali etichette si desidera includere nella risposta

  • LabelExclusionFilters - Usato per specificare quali etichette si desidera escludere dalla risposta.

  • LabelCategoryInclusionFilters - Usato per specificare quali categorie di etichette si desidera includere nella risposta.

  • LabelCategoryExclusionFilters - Usato per specificare quali categorie di etichette si desidera escludere dalla risposta.

Puoi anche combinare filtri inclusivi ed esclusivi in base alle tue esigenze, escludendo alcune etichette o categorie e includendone altre.

NotificationChannel è l'ARN dell'argomento Amazon SNS su cui desideri che Video Amazon Rekognition pubblichi lo stato di completamento dell'operazione di rilevamento delle etichette. Se utilizzi la politica delle autorizzazioni AmazonRekognitionServiceRole, l'argomento Amazon SNS deve avere un nome che inizi con Rekognition.

Di seguito è riportato un esempio di richiesta StartLabelDetection in formato JSON, compresi i filtri:

{ "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 Risposta all'operazione

GetLabelDetection restituisce una matrice (Labels) che contiene informazioni sulle etichette rilevati nel video. L'array può essere ordinato in base all'ora o in base all'etichetta rilevata quando si specifica il parametro SortBy. È inoltre possibile selezionare il modo in cui gli elementi di risposta vengono aggregati utilizzando il parametro AggregateBy.

Di seguito è riportato un esempio di risposta JSON dell'operazione GetLabelDetection. Nella risposta, tenere presente quanto segue:

  • Ordinamento - La matrice di etichette restituite viene ordinata in base all'ora. Per ordinare in base all'etichetta, specificare NAME nel parametro di input SortBy per GetLabelDetection. Se l'etichetta appare più volte nel video, ci saranno più istanze dell'elemento (LabelDetection). L'ordinamento predefinito è TIMESTAMP, mentre l'ordinamento secondario è NAME.

  • Informazioni sull'etichetta - L'elemento della matrice LabelDetection contiene un (Etichetta) oggetto che a sua volta include il nome dell'etichetta e il livello di affidabilità dell'etichetta rilevata da Amazon Rekognition. Un oggetto Label include anche una tassonomia gerarchica delle etichette e le informazioni sul riquadro di delimitazione per le etichette comuni. Timestamp è l'orario di rilevamento dell'etichetta, definito come numero in millisecondi trascorsi dall'inizio del video.

    Vengono inoltre restituite informazioni su eventuali categorie o alias associati a un'etichetta. Per i risultati aggregati per video SEGMENTS, vengono restituite le strutture StartTimestampMillis, EndTimestampMillis e DurationMillis che definiscono rispettivamente l'ora di inizio, l'ora di fine e la durata di un segmento.

  • Aggregazione – Specifica in che modo i risultati vengono aggregati quando vengono restituiti. L'impostazione predefinita prevede l'aggregazione entro TIMESTAMPS. Puoi anche scegliere di aggregare per SEGMENTS, che aggrega i risultati in una finestra temporale. Se si aggrega per SEGMENTS, le informazioni sulle istanze rilevate con riquadri di delimitazione non vengono restituite. Vengono restituite solo le etichette rilevate durante i segmenti.

  • Informazioni di paginazione - L'esempio illustra una pagina di informazioni di rilevamento dell'etichetta. È possibile specificare il numero di oggetti LabelDetection da restituire nel parametro di input MaxResults per GetLabelDetection. Se esiste un numero di risultati maggiore di MaxResults, GetLabelDetection restituisce un token (NextToken) utilizzato per ottenere la pagina di risultati successiva. Per ulteriori informazioni, consulta Ottenere i risultati dell'analisi di Video Amazon Rekognition.

  • Informazioni video – La risposta include informazioni sul formato video (VideoMetadata) in ogni pagina di informazioni restituita da GetLabelDetection.

Di seguito è riportato un esempio di GetLabelDetection risposta in formato JSON con aggregazione tramite 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 } }

Di seguito è riportato un esempio di GetLabelDetection risposta in formato JSON con aggregazione per 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 } }

Trasformazione della risposta GetLabelDetection

Quando si recuperano i risultati con l'operazione GetLabelDetection API, potrebbe essere necessario che la struttura di risposta imiti la precedente struttura di risposta dell'API, in cui sia le etichette primarie che gli alias erano contenuti nello stesso elenco.

L'esempio di risposta JSON riportato nella sezione precedente mostra il formato corrente della risposta API di. GetLabelDetection

L'esempio seguente mostra la risposta precedente dell' 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 } }

Se necessario, puoi trasformare la risposta corrente in modo che segua il formato della risposta precedente. È possibile utilizzare il seguente codice di esempio per trasformare la risposta API più recente nella precedente struttura di risposta dell'API:

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