Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Utilizzo delle funzioni Lambda di pre-annotazione e post-annotazione

Modalità Focus
Utilizzo delle funzioni Lambda di pre-annotazione e post-annotazione - Amazon SageMaker AI

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à.

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à.

Usa questi argomenti per conoscere la sintassi delle richieste inviate alle funzioni Lambda di pre-annotazione e post-annotazione e la sintassi di risposta richiesta che Ground Truth utilizza nei flussi di lavoro di etichettatura personalizzati.

Lambda di pre-annotazione

Prima che un'attività di etichettatura venga inviata al lavoratore, è possibile richiamare una funzione Lambda di pre-annotazione opzionale.

Ground Truth invia alla funzione Lambda una richiesta in formato JSON per fornire dettagli sul processo di etichettatura e sull'oggetto dati.

Di seguito sono riportati 2 esempi di richieste in formato JSON.

Data object identified with "source-ref"
{ "version": "2018-10-16", "labelingJobArn": <labelingJobArn> "dataObject" : { "source-ref": <s3Uri> } }
Data object identified with "source"
{ "version": "2018-10-16", "labelingJobArn": <labelingJobArn> "dataObject" : { "source": <string> } }
{ "version": "2018-10-16", "labelingJobArn": <labelingJobArn> "dataObject" : { "source-ref": <s3Uri> } }

L'elenco seguente contiene gli schemi di richiesta di pre-annotazione. Di seguito è riportata una descrizione di ciascun parametro.

  • version (stringa): questo è un numero di versione usato internamente da Ground Truth.

  • labelingJobArn (stringa): questo è l'Amazon Resource Name, o ARN, del proprio processo di etichettatura. Questo ARN può essere utilizzato come riferimento al processo di etichettatura quando si utilizzano operazioni dell'API Ground Truth come DescribeLabelingJob.

  • dataObject (oggetto JSON): la chiave contiene un'unica riga JSON, dal file manifest di input o inviata da Amazon SNS. Gli oggetti riga JSON nel tuo manifest possono essere di dimensioni fino a 100 KB e contenere un'ampia gamma di dati. Per un processo di annotazione di immagini molto semplice, il JSON dataObject può contenere solo una chiave source-ref, che identifica l'immagine da annotare. Se l'oggetto dati (ad esempio, una riga di testo) è incluso direttamente nel file manifest di input, l'oggetto dati viene identificato con source. Se si crea un processo di verifica o regolazione, questa riga può contenere i dati dell'etichetta e i metadati del precedente processo di etichettatura.

I seguenti esempi a schede mostrano esempi di richiesta di pre-annotazione. Ogni parametro di queste richieste di esempio è spiegato sotto la tabella a schede.

Data object identified with "source-ref"
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/<labeling_job_name>" "dataObject" : { "source-ref": "s3://input-data-bucket/data-object-file-name" } }
Data object identified with "source"
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:<aws_region>:111122223333:labeling-job/<labeling_job_name>" "dataObject" : { "source": "Sue purchased 10 shares of the stock on April 10th, 2020" } }
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/<labeling_job_name>" "dataObject" : { "source-ref": "s3://input-data-bucket/data-object-file-name" } }

In cambio, Ground Truth richiede una risposta formattata come la seguente:

Esempio di dati di restituzione previsti
{ "taskInput": <json object>, "isHumanAnnotationRequired": <boolean> # Optional }

Nell'esempio precedente, <json object> deve contenere tutti i dati richiesti dal modello di attività del worker personalizzato. Se stai eseguendo un'attività del riquadro di delimitazione in cui le istruzioni rimangono sempre le stesse, può essere semplicemente la risorsa HTTP(S) o Amazon S3 per il file di immagine. Se si tratta di un'attività di analisi del sentiment e oggetti diversi possono avere scelte diverse, sarà il riferimento dell'oggetto come una stringa e le scelte come una matrice di stringhe.

Implicazioni di isHumanAnnotationRequired

Questo valore è facoltativo perché viene utilizzato true come valore predefinito. Il caso d'uso principale per l'impostazione esplicita è quando desideri escludere questo oggetto dati dall'etichettatura eseguita dai worker.

Se hai una combinazione di oggetti del manifest, in cui alcuni richiedono l'annotazione umana e alcuni non la richiedono, puoi includere un valore isHumanAnnotationRequired in ogni oggetto dati. È possibile aggiungere una logica alla propria Lambda di pre-annotazione per determinare in modo dinamico se un oggetto richiede l'annotazione e impostare questo valore booleano di conseguenza.

Esempi di funzioni Lambda di pre-annotazione

La seguente funzione Lambda di pre-annotazione di base accede all'oggetto JSON dataObject dalla richiesta iniziale e lo restituisce nel parametro. taskInput

import json def lambda_handler(event, context): return { "taskInput": event['dataObject'] }

Supponendo che il file manifest di input utilizzi "source-ref" per identificare gli oggetti dati, il modello di attività del worker utilizzato nello stesso processo di etichettatura di questa Lambda di pre-annotazione deve includere un elemento Liquid come il seguente da importare dataObject:

{{ task.input.source-ref | grant_read_access }}

Se il file manifest di input ha utilizzato source per identificare l'oggetto dati, il modello di attività di elaborazione può importare dataObject con quanto segue:

{{ task.input.source }}

Il seguente esempio di pre-annotazione Lambda include una logica per identificare la chiave utilizzata in dataObject e per indicare l'oggetto dati utilizzando taskObject nell'istruzione return di Lambda.

import json def lambda_handler(event, context): # Event received print("Received event: " + json.dumps(event, indent=2)) # Get source if specified source = event['dataObject']['source'] if "source" in event['dataObject'] else None # Get source-ref if specified source_ref = event['dataObject']['source-ref'] if "source-ref" in event['dataObject'] else None # if source field present, take that otherwise take source-ref task_object = source if source is not None else source_ref # Build response object output = { "taskInput": { "taskObject": task_object }, "humanAnnotationRequired": "true" } print(output) # If neither source nor source-ref specified, mark the annotation failed if task_object is None: print(" Failed to pre-process {} !".format(event["labelingJobArn"])) output["humanAnnotationRequired"] = "false" return output

Lambda di post-annotazione

Quando tutti i worker hanno annotato l'oggetto dati o quando è stato raggiunto TaskAvailabilityLifetimeInSeconds, a seconda di ciò che avviene prima, Ground Truth invia tali annotazioni al proprio Lambda di post-annotazione. Questa Lambda viene generalmente utilizzata per Consolidamento delle annotazioni.

Il blocco di codice seguente contiene lo schema di richiesta di post-annotazione. Ogni parametro è descritto nell'elenco puntato seguente.

{ "version": "2018-10-16", "labelingJobArn": <string>, "labelCategories": [<string>], "labelAttributeName": <string>, "roleArn" : <string>, "payload": { "s3Uri": <string> } }
  • version (stringa): un numero di versione usato internamente da Ground Truth.

  • labelingJobArn (stringa): l'Amazon Resource Name, o ARN, del proprio processo di etichettatura. Questo ARN può essere utilizzato come riferimento al processo di etichettatura quando si utilizzano operazioni dell'API Ground Truth come DescribeLabelingJob.

  • labelCategories (elenco di stringhe): include le categorie di etichette e altri attributi specificati nella console o inclusi nel file di configurazione delle categorie di etichette.

  • labelAttributeName (stringa): il nome del processo di etichettatura o il nome dell'attributo dell'etichetta specificato quando si crea il processo di etichettatura.

  • roleArn (stringa): il nome della risorsa Amazon (ARN) del ruolo di esecuzione IAM specificato quando si crea il processo di etichettatura.

  • payload (oggetto JSON): un JSON che include una chiave s3Uri, che identifica la posizione dei dati di annotazione per quell'oggetto dati in Amazon S3. Il secondo blocco di codice riportato di seguito mostra un esempio di questo file di annotazioni.

Il blocco di codice seguente contiene un esempio di richiesta post-annotazione. Ogni parametro in questo esempio è spiegato sotto il blocco di codice.

Esempio di una richiesta Lambda post-annotazione
{ "version": "2018-10-16", "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/labeling-job-name", "labelCategories": ["Ex Category1","Ex Category2", "Ex Category3"], "labelAttributeName": "labeling-job-attribute-name", "roleArn" : "arn:aws:iam::111122223333:role/role-name", "payload": { "s3Uri": "s3://amzn-s3-demo-bucket/annotations.json" } }
Nota

Se nessun worker utilizza l'oggetto dati ed è stato raggiunto TaskAvailabilityLifetimeInSeconds, l'oggetto dati verrà contrassegnato come non riuscito e non verrà incluso come parte della richiesta Lambda post-annotazione.

Il seguente blocco di codice contiene lo schema di payload. Questo è il file indicato dal parametro s3Uri nell'oggetto JSON payload della richiesta Lambda post-annotazione. Ad esempio, se il blocco di codice precedente è la richiesta Lambda post-annotazione, il seguente file di annotazione si trova in s3://amzn-s3-demo-bucket/annotations.json.

Ogni parametro è descritto nell'elenco puntato seguente.

Esempio di un file di annotazioni
[ { "datasetObjectId": <string>, "dataObject": { "s3Uri": <string>, "content": <string> }, "annotations": [{ "workerId": <string>, "annotationData": { "content": <string>, "s3Uri": <string> } }] } ]
  • datasetObjectId (stringa): identifica un ID univoco che Ground Truth assegna a ciascun oggetto dati inviato al processo di etichettatura.

  • dataObject (oggetto JSON): l'oggetto dati che è stato etichettato. Se l'oggetto dati è incluso nel file manifesto di input e identificato utilizzando la chiave source (ad esempio una stringa), dataObject include una chiave content che identifica l'oggetto dati. Altrimenti, la posizione dell'oggetto dati (ad esempio, un link o un URI S3) viene identificata con s3Uri.

  • annotations (elenco di oggetti JSON): questo elenco contiene un unico oggetto JSON per ciascuna annotazione inviata dai worker a tale dataObject. Un singolo oggetto JSON contiene un workerId univoco che può essere utilizzato per identificare il worker che ha inviato l'annotazione. La chiave annotationData contiene uno dei seguenti elementi:

    • content (stringa): contiene i dati di annotazione.

    • s3Uri (stringa): contiene un URI S3 che identifica la posizione dei dati di annotazione.

La tabella seguente contiene esempi del contenuto che è possibile trovare nel payload per diversi tipi di annotazioni.

Named Entity Recognition Payload
[ { "datasetObjectId": "1", "dataObject": { "content": "Sift 3 cups of flour into the bowl." }, "annotations": [ { "workerId": "private.us-west-2.ef7294f850a3d9d1", "annotationData": { "content": "{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}" } } ] } ]
Semantic Segmentation Payload
[ { "datasetObjectId": "2", "dataObject": { "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird3.jpg" }, "annotations": [ { "workerId": "private.us-west-2.ab1234c5678a919d0", "annotationData": { "content": "{\"crowd-semantic-segmentation\":{\"inputImageProperties\":{\"height\":2000,\"width\":3020},\"labelMappings\":{\"Bird\":{\"color\":\"#2ca02c\"}},\"labeledImage\":{\"pngImageData\":\"iVBOR...\"}}}" } } ] } ]
Bounding Box Payload
[ { "datasetObjectId": "0", "dataObject": { "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird1.jpg" }, "annotations": [ { "workerId": "private.us-west-2.ab1234c5678a919d0", "annotationData": { "content": "{\"boundingBox\":{\"boundingBoxes\":[{\"height\":2052,\"label\":\"Bird\",\"left\":583,\"top\":302,\"width\":1375}],\"inputImageProperties\":{\"height\":2497,\"width\":3745}}}" } } ] } ]
[ { "datasetObjectId": "1", "dataObject": { "content": "Sift 3 cups of flour into the bowl." }, "annotations": [ { "workerId": "private.us-west-2.ef7294f850a3d9d1", "annotationData": { "content": "{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}" } } ] } ]

La funzione Lambda post-annotazione può contenere una logica simile alla seguente per scorrere in loop e accedere a tutte le annotazioni contenute nella richiesta. Per un esempio completo, consulta annotation_consolidation_lambda.py nel repository -recipe. aws-sagemaker-ground-truth GitHub In questo GitHub esempio, è necessario aggiungere la propria logica di consolidamento delle annotazioni.

for i in range(len(annotations)): worker_id = annotations[i]["workerId"] annotation_content = annotations[i]['annotationData'].get('content') annotation_s3_uri = annotations[i]['annotationData'].get('s3uri') annotation = annotation_content if annotation_s3_uri is None else s3_client.get_object_from_s3( annotation_s3_uri) annotation_from_single_worker = json.loads(annotation) print("{} Received Annotations from worker [{}] is [{}]" .format(log_prefix, worker_id, annotation_from_single_worker))
Suggerimento

Quando esegui algoritmi di consolidamento sui dati, puoi utilizzare un servizio di database AWS per archiviare i risultati oppure puoi restituire i risultati elaborati a Ground Truth. I dati restituiti a Ground Truth vengono archiviati in manifesti di annotazione consolidati nel bucket S3 specificato per l'output durante la configurazione del processo di etichettatura.

In cambio, Ground Truth richiede una risposta formattata come la seguente:

Esempio di dati di restituzione previsti
[ { "datasetObjectId": <string>, "consolidatedAnnotation": { "content": { "<labelattributename>": { # ... label content } } } }, { "datasetObjectId": <string>, "consolidatedAnnotation": { "content": { "<labelattributename>": { # ... label content } } } } . . . ]

A questo punto, tutti i dati che stai inviando al bucket S3, tranne datasetObjectId, saranno nell'oggetto content.

Quando restituisci le annotazioni content, ciò porta a una voce nel manifesto di output del proprio processo simile alla seguente:

Esempio di formato etichetta nel manifest di output
{ "source-ref"/"source" : "<s3uri or content>", "<labelAttributeName>": { # ... label content from you }, "<labelAttributeName>-metadata": { # This will be added by Ground Truth "job_name": <labelingJobName>, "type": "groundTruth/custom", "human-annotated": "yes", "creation_date": <date> # Timestamp of when received from Post-labeling Lambda } }

A causa della natura potenzialmente complessa di un modello personalizzato e dei dati che raccoglie, Ground Truth non offre un'ulteriore elaborazione dei dati.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.