Aggiunta di volti a una raccolta - 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à.

Aggiunta di volti a una raccolta

È possibile utilizzare l'IndexFacesoperazione per rilevare i volti in un'immagine e aggiungerli a una raccolta. Per ogni volto rilevato, Amazon Rekognition ne estrae le caratteristiche e ne archivia le informazioni in un database. Inoltre, il comando archivia i metadati per ogni volto rilevato nella raccolta specificata. Amazon Rekognition non archivia i byte di immagine effettivi.

Per informazioni sulla fornitura di volti idonei per l'indicizzazione, consulta Raccomandazioni per immagini di input di confronto di volti.

Per ogni volto, l'operazione IndexFaces rende persistenti le informazioni seguenti:

  • Caratteristiche multidimensionali dei volti: IndexFaces utilizza l'analisi dei volti per estrarre informazioni multidimensionali sulle caratteristiche dei volti e archiviarle nella raccolta. Non è possibile accedere direttamente a queste informazioni. Tuttavia, Amazon Rekognition utilizza queste informazioni durante la ricerca di corrispondenze in una raccolta di volti.

     

  • Metadati: i metadati per ogni faccia includono un riquadro di delimitazione, un livello di confidenza (che il riquadro di delimitazione contenga una faccia), assegnato da IDs Amazon Rekognition (face ID e image ID) e un ID immagine esterno (se lo hai fornito) nella richiesta. Queste informazioni ti vengono restituite in risposta alla chiamata. IndexFaces API Per un esempio, consulta l'elemento face nella seguente risposta di esempio.

    Il servizio restituisce questi metadati in risposta alle seguenti API chiamate:

     

    • ListFaces

    • Operazioni di ricerca dei volti: le risposte SearchFacese SearchFacesByImagerestituiscono l'affidabilità della corrispondenza per ogni volto corrispondente, insieme ai metadati del volto corrispondente.

Il numero di volti indicizzati da IndexFaces dipende della versione del modello di rilevamento volti associato alla raccolta di input. Per ulteriori informazioni, consulta Comprendere il controllo delle versioni dei modelli.

Le informazioni sui volti indicizzati vengono restituite in una serie di oggetti. FaceRecord

È possibile associare volti indicizzati all'immagine in cui sono stati rilevati. Ad esempio, è possibile mantenere un indice lato client di immagini e volti nelle immagini. Per associare volti a un'immagine, specificare un'ID immagine nel parametro di richiesta ExternalImageId. L'ID immagine può essere il nome del file o un altro ID creato.

Oltre alle informazioni precedenti secondo cui API persiste nella raccolta di volti, restituisce API anche dettagli del viso che non sono persistenti nella raccolta. (Consulta l'elemento faceDetail nella seguente risposta di esempio).

Nota

DetectFaces restituisce le stesse informazioni, perciò non è necessario chiamare sia DetectFaces che IndexFaces per la stessa immagine.

Filtraggio dei volti

L' IndexFaces operazione consente di filtrare i volti indicizzati da un'immagine. Con IndexFaces è possibile specificare un numero massimo di volti da indicizzare, oppure è possibile scegliere solo facce rilevate con un indice di alta qualità.

È possibile specificare il numero massimo di volti indicizzati, IndexFaces utilizzando il parametro di input MaxFaces. Questa funzione è utile quando si vogliono indicizzare i volti più grandi in un'immagine e non le facce più piccole, come quelle di persone che sono sullo sfondo.

Per impostazione predefinita, IndexFaces sceglie un livello di qualità utilizzato per filtrare i volti. È possibile utilizzare il parametro di input QualityFilter per impostare esplicitamente il livello di qualità. I valori sono:

  • AUTO: Amazon Rekognition sceglie il livello di qualità utilizzato per filtrare i volti (valore predefinito).

  • LOW: tutti i volti, tranne quelli di qualità più bassa, vengono indicizzati.

  • MEDIUM

  • HIGH: vengono indicizzati solo i volti di migliore qualità.

  • NONE: non viene indicizzato alcun volto in base alla qualità.

IndexFaces filtra i volti per i seguenti motivi:

  • Il volto è troppo piccolo rispetto alle dimensioni dell'immagine.

  • Il volto è troppo sfocato.

  • L'immagine è troppo scura.

  • La faccia ha una posa esagerata.

  • Il volto non ha abbastanza dettagli per essere adatto alla ricerca di volti.

Nota

Per utilizzare il filtraggio della qualità, hai bisogno di una raccolta associata alla versione 3 o superiore del modello facciale. Per ottenere la versione del modello facciale associata a una collezione, chiama. DescribeCollection

Le informazioni sui volti che non sono indicizzati da IndexFaces vengono restituite in una serie di UnindexedFaceoggetti. La serie Reasons contiene un elenco di motivi per cui un volto non è stato indicizzato. Ad esempio, il valore EXCEEDS_MAX_FACES rappresenta un volto non indicizzato poiché il numero di volti specificato da MaxFaces è già stato rilevato.

Per ulteriori informazioni, consulta Gestione dei volti in una raccolta.

Per aggiungere volti a una raccolta () SDK
  1. Se non lo hai già fatto:

    1. Crea o aggiorna un utente con le autorizzazioni AmazonRekognitionFullAccess e AmazonS3ReadOnlyAccess. Per ulteriori informazioni, consulta Passaggio 1: configura un AWS account e crea un utente.

    2. Installa e configura il AWS CLI e il AWS SDKs. Per ulteriori informazioni, consulta Fase 2: Configurare il AWS CLI e AWS SDKs.

  2. Carica un'immagine (contenente uno o più volti) nel bucket Amazon S3.

    Per le istruzioni, consulta Caricamento di oggetti in Amazon S3 nella Guida per l'utente di Amazon Simple Storage Service.

  3. Utilizzare i seguenti esempi per richiamare l'operazione IndexFaces.

    Java

    In questo esempio vengono visualizzati gli identificatori dei volti aggiunti alla raccolta.

    Modifica il valore di collectionId nel nome della raccolta a cui desideri aggiungere un volto. Sostituisci i valori bucket e photo con i nomi del bucket Amazon S3 e dell'immagine utilizzati nella fase 2. Il parametro .withMaxFaces(1) limita il numero di facce indicizzate a 1. Rimuovi o modifica il valore in base alle tue esigenze.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) package aws.example.rekognition.image; import com.amazonaws.services.rekognition.AmazonRekognition; import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder; import com.amazonaws.services.rekognition.model.FaceRecord; import com.amazonaws.services.rekognition.model.Image; import com.amazonaws.services.rekognition.model.IndexFacesRequest; import com.amazonaws.services.rekognition.model.IndexFacesResult; import com.amazonaws.services.rekognition.model.QualityFilter; import com.amazonaws.services.rekognition.model.S3Object; import com.amazonaws.services.rekognition.model.UnindexedFace; import java.util.List; public class AddFacesToCollection { public static final String collectionId = "MyCollection"; public static final String bucket = "bucket"; public static final String photo = "input.jpg"; public static void main(String[] args) throws Exception { AmazonRekognition rekognitionClient = AmazonRekognitionClientBuilder.defaultClient(); Image image = new Image() .withS3Object(new S3Object() .withBucket(bucket) .withName(photo)); IndexFacesRequest indexFacesRequest = new IndexFacesRequest() .withImage(image) .withQualityFilter(QualityFilter.AUTO) .withMaxFaces(1) .withCollectionId(collectionId) .withExternalImageId(photo) .withDetectionAttributes("DEFAULT"); IndexFacesResult indexFacesResult = rekognitionClient.indexFaces(indexFacesRequest); System.out.println("Results for " + photo); System.out.println("Faces indexed:"); List<FaceRecord> faceRecords = indexFacesResult.getFaceRecords(); for (FaceRecord faceRecord : faceRecords) { System.out.println(" Face ID: " + faceRecord.getFace().getFaceId()); System.out.println(" Location:" + faceRecord.getFaceDetail().getBoundingBox().toString()); } List<UnindexedFace> unindexedFaces = indexFacesResult.getUnindexedFaces(); System.out.println("Faces not indexed:"); for (UnindexedFace unindexedFace : unindexedFaces) { System.out.println(" Location:" + unindexedFace.getFaceDetail().getBoundingBox().toString()); System.out.println(" Reasons:"); for (String reason : unindexedFace.getReasons()) { System.out.println(" " + reason); } } } }
    Java V2

    Questo codice è tratto dal GitHub repository AWS Documentation SDK examples. Guarda l'esempio completo qui.

    //snippet-start:[rekognition.java2.add_faces_collection.import] import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider; import software.amazon.awssdk.core.SdkBytes; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.rekognition.RekognitionClient; import software.amazon.awssdk.services.rekognition.model.IndexFacesResponse; import software.amazon.awssdk.services.rekognition.model.IndexFacesRequest; import software.amazon.awssdk.services.rekognition.model.Image; import software.amazon.awssdk.services.rekognition.model.QualityFilter; import software.amazon.awssdk.services.rekognition.model.Attribute; import software.amazon.awssdk.services.rekognition.model.FaceRecord; import software.amazon.awssdk.services.rekognition.model.UnindexedFace; import software.amazon.awssdk.services.rekognition.model.RekognitionException; import software.amazon.awssdk.services.rekognition.model.Reason; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; //snippet-end:[rekognition.java2.add_faces_collection.import] /** * Before running this Java V2 code example, set up your development environment, including your credentials. * * For more information, see the following documentation topic: * * https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html */ public class AddFacesToCollection { public static void main(String[] args) { final String usage = "\n" + "Usage: " + " <collectionId> <sourceImage>\n\n" + "Where:\n" + " collectionName - The name of the collection.\n" + " sourceImage - The path to the image (for example, C:\\AWS\\pic1.png). \n\n"; if (args.length != 2) { System.out.println(usage); System.exit(1); } String collectionId = args[0]; String sourceImage = args[1]; Region region = Region.US_EAST_1; RekognitionClient rekClient = RekognitionClient.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("profile-name")) .build(); addToCollection(rekClient, collectionId, sourceImage); rekClient.close(); } // snippet-start:[rekognition.java2.add_faces_collection.main] public static void addToCollection(RekognitionClient rekClient, String collectionId, String sourceImage) { try { InputStream sourceStream = new FileInputStream(sourceImage); SdkBytes sourceBytes = SdkBytes.fromInputStream(sourceStream); Image souImage = Image.builder() .bytes(sourceBytes) .build(); IndexFacesRequest facesRequest = IndexFacesRequest.builder() .collectionId(collectionId) .image(souImage) .maxFaces(1) .qualityFilter(QualityFilter.AUTO) .detectionAttributes(Attribute.DEFAULT) .build(); IndexFacesResponse facesResponse = rekClient.indexFaces(facesRequest); System.out.println("Results for the image"); System.out.println("\n Faces indexed:"); List<FaceRecord> faceRecords = facesResponse.faceRecords(); for (FaceRecord faceRecord : faceRecords) { System.out.println(" Face ID: " + faceRecord.face().faceId()); System.out.println(" Location:" + faceRecord.faceDetail().boundingBox().toString()); } List<UnindexedFace> unindexedFaces = facesResponse.unindexedFaces(); System.out.println("Faces not indexed:"); for (UnindexedFace unindexedFace : unindexedFaces) { System.out.println(" Location:" + unindexedFace.faceDetail().boundingBox().toString()); System.out.println(" Reasons:"); for (Reason reason : unindexedFace.reasons()) { System.out.println("Reason: " + reason); } } } catch (RekognitionException | FileNotFoundException e) { System.out.println(e.getMessage()); System.exit(1); } } // snippet-end:[rekognition.java2.add_faces_collection.main] }
    AWS CLI

    Questo AWS CLI comando visualizza l'JSONoutput dell'index-facesCLIoperazione.

    Sostituisci il valore di collection-id con il nome della raccolta in cui desideri archiviare il volto. Sostituisci i valori Bucket e Name con il nome del bucket Amazon S3 e il nome del file di immagine utilizzato nella fase 2. Il parametro max-faces limita il numero di facce indicizzate a 1. Rimuovi o modifica il valore in base alle tue esigenze. Sostituisci il valore di profile_name nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore.

    aws rekognition index-faces --image '{"S3Object":{"Bucket":"bucket-name","Name":"file-name"}}' --collection-id "collection-id" \ --max-faces 1 --quality-filter "AUTO" --detection-attributes "ALL" \ --external-image-id "example-image.jpg" --profile profile-name

    Se accedi a da un dispositivo Windows, usa le CLI virgolette doppie anziché le virgolette singole ed evita le virgolette doppie interne usando la barra rovesciata (ad esempio\) per correggere eventuali errori del parser che potresti riscontrare. Per un esempio, consulta quanto segue:

    aws rekognition index-faces --image "{\"S3Object\":{\"Bucket\":\"bucket-name\",\"Name\":\"image-name\"}}" \ --collection-id "collection-id" --max-faces 1 --quality-filter "AUTO" --detection-attributes "ALL" \ --external-image-id "example-image.jpg" --profile profile-name
    Python

    In questo esempio vengono visualizzati gli identificatori dei volti aggiunti alla raccolta.

    Modifica il valore di collectionId nel nome della raccolta a cui desideri aggiungere un volto. Sostituisci i valori bucket e photo con i nomi del bucket Amazon S3 e dell'immagine utilizzati nella fase 2. Il parametro di input MaxFaces limita il numero di facce indicizzate a 1. Rimuovi o modifica il valore in base alle tue esigenze. Sostituisci il valore di profile_name nella riga che crea la sessione di Rekognition con il nome del tuo profilo di sviluppatore.

    # Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. # PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) import boto3 def add_faces_to_collection(bucket, photo, collection_id): session = boto3.Session(profile_name='profile-name') client = session.client('rekognition') response = client.index_faces(CollectionId=collection_id, Image={'S3Object': {'Bucket': bucket, 'Name': photo}}, ExternalImageId=photo, MaxFaces=1, QualityFilter="AUTO", DetectionAttributes=['ALL']) print('Results for ' + photo) print('Faces indexed:') for faceRecord in response['FaceRecords']: print(' Face ID: ' + faceRecord['Face']['FaceId']) print(' Location: {}'.format(faceRecord['Face']['BoundingBox'])) print('Faces not indexed:') for unindexedFace in response['UnindexedFaces']: print(' Location: {}'.format(unindexedFace['FaceDetail']['BoundingBox'])) print(' Reasons:') for reason in unindexedFace['Reasons']: print(' ' + reason) return len(response['FaceRecords']) def main(): bucket = 'bucket-name' collection_id = 'collection-id' photo = 'photo-name' indexed_faces_count = add_faces_to_collection(bucket, photo, collection_id) print("Faces indexed count: " + str(indexed_faces_count)) if __name__ == "__main__": main()
    .NET

    In questo esempio vengono visualizzati gli identificatori dei volti aggiunti alla raccolta.

    Modifica il valore di collectionId nel nome della raccolta a cui desideri aggiungere un volto. Sostituisci i valori bucket e photo con i nomi del bucket Amazon S3 e dell'immagine utilizzati nella fase 2.

    //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved. //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.) using System; using System.Collections.Generic; using Amazon.Rekognition; using Amazon.Rekognition.Model; public class AddFaces { public static void Example() { String collectionId = "MyCollection"; String bucket = "bucket"; String photo = "input.jpg"; AmazonRekognitionClient rekognitionClient = new AmazonRekognitionClient(); Image image = new Image() { S3Object = new S3Object() { Bucket = bucket, Name = photo } }; IndexFacesRequest indexFacesRequest = new IndexFacesRequest() { Image = image, CollectionId = collectionId, ExternalImageId = photo, DetectionAttributes = new List<String>(){ "ALL" } }; IndexFacesResponse indexFacesResponse = rekognitionClient.IndexFaces(indexFacesRequest); Console.WriteLine(photo + " added"); foreach (FaceRecord faceRecord in indexFacesResponse.FaceRecords) Console.WriteLine("Face detected: Faceid is " + faceRecord.Face.FaceId); } }

IndexFaces richiesta di operazione

L'input per IndexFaces è l'immagine da indicizzare e la raccolta a cui aggiungere i volti.

{ "CollectionId": "MyCollection", "Image": { "S3Object": { "Bucket": "bucket", "Name": "input.jpg" } }, "ExternalImageId": "input.jpg", "DetectionAttributes": [ "DEFAULT" ], "MaxFaces": 1, "QualityFilter": "AUTO" }

IndexFaces risposta operativa

IndexFaces restituisce le informazioni sui volti rilevati nell'immagine. Ad esempio, la JSON risposta seguente include gli attributi di rilevamento predefiniti per i volti rilevati nell'immagine di input. L'esempio mostra anche volti non indicizzati perché il valore del parametro di MaxFaces input è stato superato: l'Reasonsarray contiene EXCEEDS _ _. MAX FACES Se una faccia non è indicizzata per motivi di qualità, Reasons contiene valori come _ o _. LOW SHARPNESS LOW BRIGHTNESS Per ulteriori informazioni, vedere. UnindexedFace

{ "FaceModelVersion": "3.0", "FaceRecords": [ { "Face": { "BoundingBox": { "Height": 0.3247932195663452, "Left": 0.5055555701255798, "Top": 0.2743072211742401, "Width": 0.21444444358348846 }, "Confidence": 99.99998474121094, "ExternalImageId": "input.jpg", "FaceId": "b86e2392-9da1-459b-af68-49118dc16f87", "ImageId": "09f43d92-02b6-5cea-8fbd-9f187db2050d" }, "FaceDetail": { "BoundingBox": { "Height": 0.3247932195663452, "Left": 0.5055555701255798, "Top": 0.2743072211742401, "Width": 0.21444444358348846 }, "Confidence": 99.99998474121094, "Landmarks": [ { "Type": "eyeLeft", "X": 0.5751981735229492, "Y": 0.4010535478591919 }, { "Type": "eyeRight", "X": 0.6511467099189758, "Y": 0.4017036259174347 }, { "Type": "nose", "X": 0.6314528584480286, "Y": 0.4710812568664551 }, { "Type": "mouthLeft", "X": 0.5879443287849426, "Y": 0.5171778798103333 }, { "Type": "mouthRight", "X": 0.6444502472877502, "Y": 0.5164633989334106 } ], "Pose": { "Pitch": -10.313642501831055, "Roll": -1.0316886901855469, "Yaw": 18.079818725585938 }, "Quality": { "Brightness": 71.2919921875, "Sharpness": 78.74752044677734 } } } ], "OrientationCorrection": "", "UnindexedFaces": [ { "FaceDetail": { "BoundingBox": { "Height": 0.1329464465379715, "Left": 0.5611110925674438, "Top": 0.6832437515258789, "Width": 0.08777777850627899 }, "Confidence": 92.37225341796875, "Landmarks": [ { "Type": "eyeLeft", "X": 0.5796897411346436, "Y": 0.7452847957611084 }, { "Type": "eyeRight", "X": 0.6078574657440186, "Y": 0.742687463760376 }, { "Type": "nose", "X": 0.597953200340271, "Y": 0.7620673179626465 }, { "Type": "mouthLeft", "X": 0.5884202122688293, "Y": 0.7920381426811218 }, { "Type": "mouthRight", "X": 0.60627681016922, "Y": 0.7919750809669495 } ], "Pose": { "Pitch": 15.658954620361328, "Roll": -4.583454608917236, "Yaw": 10.558992385864258 }, "Quality": { "Brightness": 42.54612350463867, "Sharpness": 86.93206024169922 } }, "Reasons": [ "EXCEEDS_MAX_FACES" ] } ] }

Per ottenere tutte le informazioni sul viso, specifica ALL '' come parametro di DetectionAttributes richiesta. Ad esempio, nella seguente risposta, notare le informazioni aggiuntive nell'elemento faceDetail, non conservato nel server:

  • 25 punti di riferimento del volto (rispetto a solo cinque nell'esempio precedente)

  • Dieci attributi del volto (occhiali, barba, occlusione, direzione dello sguardo e così via)

  • Emozioni (osserva l'elemento emotion)

L'elemento face fornisce i metadati resi persistenti nel server.

FaceModelVersion è la versione del modello di volto associato alla raccolta. Per ulteriori informazioni, consulta Comprendere il controllo delle versioni dei modelli.

OrientationCorrection è l'orientamento stimato dell'immagine. Le informazioni sulla correzione dell'orientamento non vengono restituite se utilizzi un modello di rilevamento facciale successivo alla versione 3. Per ulteriori informazioni, consulta Ottenere l'orientamento dell'immagine e le coordinate del riquadro di delimitazione.

Il seguente esempio di risposta mostra la risposta restituita JSON quando si specifica [» ALL «]:

{ "FaceModelVersion": "3.0", "FaceRecords": [ { "Face": { "BoundingBox": { "Height": 0.06333333253860474, "Left": 0.17185185849666595, "Top": 0.7366666793823242, "Width": 0.11061728745698929 }, "Confidence": 99.99999237060547, "ExternalImageId": "input.jpg", "FaceId": "578e2e1b-d0b0-493c-aa39-ba476a421a34", "ImageId": "9ba38e68-35b6-5509-9d2e-fcffa75d1653" }, "FaceDetail": { "AgeRange": { "High": 25, "Low": 15 }, "Beard": { "Confidence": 99.98077392578125, "Value": false }, "BoundingBox": { "Height": 0.06333333253860474, "Left": 0.17185185849666595, "Top": 0.7366666793823242, "Width": 0.11061728745698929 }, "Confidence": 99.99999237060547, "Emotions": [ { "Confidence": 95.40877532958984, "Type": "HAPPY" }, { "Confidence": 6.6088080406188965, "Type": "CALM" }, { "Confidence": 0.7385611534118652, "Type": "SAD" } ], "EyeDirection": { "yaw": 16.299732, "pitch": -6.407457, "confidence": 99.968704 } "Eyeglasses": { "Confidence": 99.96795654296875, "Value": false }, "EyesOpen": { "Confidence": 64.0671157836914, "Value": true }, "Gender": { "Confidence": 100, "Value": "Female" }, "Landmarks": [ { "Type": "eyeLeft", "X": 0.21361233294010162, "Y": 0.757106363773346 }, { "Type": "eyeRight", "X": 0.2518567442893982, "Y": 0.7599404454231262 }, { "Type": "nose", "X": 0.2262365221977234, "Y": 0.7711842060089111 }, { "Type": "mouthLeft", "X": 0.2050037682056427, "Y": 0.7801263332366943 }, { "Type": "mouthRight", "X": 0.2430567592382431, "Y": 0.7836716771125793 }, { "Type": "leftPupil", "X": 0.2161938101053238, "Y": 0.756662905216217 }, { "Type": "rightPupil", "X": 0.2523181438446045, "Y": 0.7603650689125061 }, { "Type": "leftEyeBrowLeft", "X": 0.20066319406032562, "Y": 0.7501518130302429 }, { "Type": "leftEyeBrowUp", "X": 0.2130996286869049, "Y": 0.7480520606040955 }, { "Type": "leftEyeBrowRight", "X": 0.22584207355976105, "Y": 0.7504606246948242 }, { "Type": "rightEyeBrowLeft", "X": 0.24509544670581818, "Y": 0.7526801824569702 }, { "Type": "rightEyeBrowUp", "X": 0.2582615911960602, "Y": 0.7516844868659973 }, { "Type": "rightEyeBrowRight", "X": 0.26881539821624756, "Y": 0.7554477453231812 }, { "Type": "leftEyeLeft", "X": 0.20624476671218872, "Y": 0.7568746209144592 }, { "Type": "leftEyeRight", "X": 0.22105035185813904, "Y": 0.7582521438598633 }, { "Type": "leftEyeUp", "X": 0.21401576697826385, "Y": 0.7553104162216187 }, { "Type": "leftEyeDown", "X": 0.21317370235919952, "Y": 0.7584449648857117 }, { "Type": "rightEyeLeft", "X": 0.24393919110298157, "Y": 0.7600628137588501 }, { "Type": "rightEyeRight", "X": 0.2598416209220886, "Y": 0.7605880498886108 }, { "Type": "rightEyeUp", "X": 0.2519053518772125, "Y": 0.7582084536552429 }, { "Type": "rightEyeDown", "X": 0.25177454948425293, "Y": 0.7612871527671814 }, { "Type": "noseLeft", "X": 0.2185886949300766, "Y": 0.774715781211853 }, { "Type": "noseRight", "X": 0.23328955471515656, "Y": 0.7759330868721008 }, { "Type": "mouthUp", "X": 0.22446128726005554, "Y": 0.7805567383766174 }, { "Type": "mouthDown", "X": 0.22087252140045166, "Y": 0.7891407608985901 } ], "MouthOpen": { "Confidence": 95.87068939208984, "Value": false }, "Mustache": { "Confidence": 99.9828109741211, "Value": false }, "Pose": { "Pitch": -0.9409101605415344, "Roll": 7.233824253082275, "Yaw": -2.3602254390716553 }, "Quality": { "Brightness": 32.01998519897461, "Sharpness": 93.67259216308594 }, "Smile": { "Confidence": 86.7142105102539, "Value": true }, "Sunglasses": { "Confidence": 97.38925170898438, "Value": false } } } ], "OrientationCorrection": "ROTATE_0" "UnindexedFaces": [] }