Agregar rostros a una colección - Amazon Rekognition

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Agregar rostros a una colección

Puede utilizar la operación IndexFaces para detectar rostros en una imagen y añadirlas a una colección. Para cada rostro detectado, Amazon Rekognition extrae los rasgos faciales y almacena la información de rasgos en una base de datos. Además, el comando almacena los metadatos de cada uno de los rostros detectados en la colección de rostros especificada. Amazon Rekognition no conserva los bytes de las imágenes reales.

Para obtener información acerca de cómo proporcionar rostros adecuados para su indexación, consulte Recomendaciones para la comparación de rostros en las imágenes de entrada.

Para cada rostro, la operación IndexFaces conserva la siguiente información:

  • Rasgos faciales multidimensionales: IndexFaces usa análisis faciales para extraer información multidimensional sobre los rasgos faciales y almacena la información en la colección de rostros. No se tiene acceso a esta información directamente. Sin embargo, Amazon Rekognition utiliza esta información cuando busca rostros coincidentes en una colección de rostros.

     

  • Metadatos: los metadatos de cada rostro incluyen un cuadro delimitador, un nivel de confianza (de que el cuadro delimitador contiene un rostro), los ID asignados por Amazon Rekognition (ID de rostro e ID de imagen) y un ID de imagen externo (si lo proporciona) en la solicitud. Esta información se devuelve en respuesta a la llamada a la API IndexFaces. Para ver un ejemplo, consulte el elemento face en la siguiente respuesta de ejemplo.

    El servicio devuelve estos metadatos en respuesta a las siguientes llamadas API:

     

    • ListFaces

    • Operaciones de búsqueda de rostros: las respuestas de SearchFaces y SearchFacesByImage devuelven la confianza de cada rostro coincidente, junto con los metadatos del rostro coincidente.

El número de rostros indexada por IndexFaces depende de la versión del modelo de detección de rostros que esté asociada a la colección de entrada. Para obtener más información, consulte Control de versiones del modelo.

La información sobre los rostros indexados se devuelve en una matriz de objetos FaceRecord.

Es posible que desee asociar rostros indexados con la imagen en la que se detectaron. Por ejemplo, es posible que desee mantener un índice en el lado del cliente de imágenes y rostros en las imágenes. Para asociar rostros con una imagen, especifique un ID de imagen en el parámetro de solicitud ExternalImageId. El ID de imagen puede ser el nombre de archivo u otro ID que cree.

Además de la información anterior que la API conserva en la colección de rostros, la API devuelve también detalles del rostro que no se conservan en la colección. (Consulte el elemento faceDetail en la siguiente respuesta de ejemplo).

nota

DetectFaces devuelve la misma información, por lo que no es necesario llamar a DetectFaces y IndexFaces para la misma imagen.

Filtrado de rostros

La IndexFaces operación permite filtrar las caras indexadas a partir de una imagen. Con IndexFaces, puede especificar el número máximo de rostros que desea indexar, o bien indicar que solo se indexen los rostros detectados con un índice de calidad alto.

Puede especificar el número máximo de rostros que se indexan mediante IndexFaces utilizando el parámetro de entrada MaxFaces. Esto resulta útil cuando se desea indexar los rostros de mayor tamaño de una imagen, pero no los más pequeños, como, por ejemplo, los de las personas que están de pie en segundo plano.

De forma predeterminada, IndexFaces selecciona un estándar de calidad que se utiliza para filtrar los rostros. Puede utilizar el parámetro de entrada QualityFilter para establecer explícitamente el estándar de calidad. Los valores son:

  • AUTO: Amazon Rekognition elige el estándar de calidad que se usa para filtrar las caras (valor predeterminado).

  • LOW: todos los rostros, excepto los de menor calidad, están indexados.

  • MEDIUM

  • HIGH: solo se indexan los rostros de mayor calidad.

  • NONE: no se filtran rostros en función de la calidad.

IndexFaces filtra rostros basándose en lo siguiente:

  • El rostro es demasiado pequeño en comparación con las dimensiones de la imagen.

  • El rostro está demasiado borroso.

  • La imagen es demasiado oscura.

  • El rostro tiene una postura extrema.

  • El rostro no tiene suficiente detalle para incluirse en la búsqueda de rostros.

nota

Para utilizar el filtrado según la calidad, necesita una colección asociada a la versión 3, o posterior, del modelo de rostros. Para obtener la versión del modelo de rostros asociado a una colección, llame a DescribeCollection.

La información sobre los rostros no indexados por IndexFaces se devuelve en una matriz de objetos UnindexedFace. La matriz Reasons contiene una lista de razones por las que un rostro no se ha indexado. Por ejemplo, el valor EXCEEDS_MAX_FACES significa que un rostro no se ha indexado porque ya se ha detectado el número de rostros especificado por MaxFaces.

Para obtener más información, consulte Administración de rostros en una colección.

Para agregar rostros a una colección (SDK)
  1. Si aún no lo ha hecho:

    1. Cree o actualice un usuario con los permisos AmazonRekognitionFullAccess y AmazonS3ReadOnlyAccess. Para obtener más información, consulte Paso 1: Configurar una cuenta de AWS y crear un usuario.

    2. Instale y configure los AWS SDK AWS CLI y los mismos. Para obtener más información, consulte Paso 2: Configurar la AWS CLI y los AWS SDK.

  2. Cargue una imagen (que contenga uno o varios rostros) en su bucket de Amazon S3.

    Para ver las instrucciones, consulte Carga de objetos en Amazon S3 en la Guía del usuario de Amazon Simple Storage Service.

  3. Consulte los siguientes ejemplos para llamar a la operación IndexFaces.

    Java

    Este ejemplo muestra los identificadores de rostro para los rostros añadidos a la colección.

    Cambie el valor de collectionId por el nombre de la colección a la que desea agregar un rostro. Reemplace los valores de bucket y photo por los nombre del bucket de Amazon S3 y de la imagen que utilizó en el paso 2. El parámetro .withMaxFaces(1) reduce el número de rostros indexados a 1. Elimínelo o cambie su valor según sus necesidades.

    //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

    Este código se ha tomado del GitHub repositorio de ejemplos del SDK de AWS documentación. Consulta el ejemplo completo aquí.

    //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

    Este AWS CLI comando muestra el resultado JSON de la operación index-faces CLI.

    Reemplace el valor de collection-id por el nombre de la colección donde desea almacenar el rostro. Reemplace los valores Bucket y Name por el nombre del bucket de Amazon S3 y el nombre de archivo de imagen que utilizó en el paso 2. El parámetro max-faces reduce el número de rostros indexados a 1. Elimínelo o cambie su valor según sus necesidades. Sustituya el valor de profile_name en la línea que crea la sesión de Rekognition por el nombre de su perfil de desarrollador.

    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

    Si accede a la CLI en un dispositivo Windows, utilice comillas dobles en lugar de comillas simples y evite las comillas dobles internas con una barra invertida (es decir, \) para corregir cualquier error del analizador que pueda encontrar. Por ver un ejemplo, consulte lo siguiente:

    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

    Este ejemplo muestra los identificadores de rostro para los rostros añadidos a la colección.

    Cambie el valor de collectionId por el nombre de la colección a la que desea agregar un rostro. Reemplace los valores de bucket y photo por los nombre del bucket de Amazon S3 y de la imagen que utilizó en el paso 2. El parámetro de entrada MaxFaces determina el número de rostros indexados. Elimínelo o cambie su valor según sus necesidades. Sustituya el valor de profile_name en la línea que crea la sesión de Rekognition por el nombre de su perfil de desarrollador.

    # 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

    Este ejemplo muestra los identificadores de rostro para los rostros añadidos a la colección.

    Cambie el valor de collectionId por el nombre de la colección a la que desea agregar un rostro. Reemplace los valores de bucket y photo por los nombre del bucket de Amazon S3 y de la imagen que utilizó en el paso 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 solicitud de operación

La entrada de IndexFaces es la imagen que se va a indexar y la colección a la que se añadirá el rostro o los rostros.

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

IndexFaces respuesta de operación

IndexFaces devuelve información sobre los rostros que se han detectado en la imagen. Por ejemplo, la siguiente respuesta de JSON incluye los atributos de detección predeterminados para los rostros detectados en la imagen de entrada. El ejemplo también muestra rostros no indexados porque se ha superado el valor del parámetro de entrada MaxFaces: la matriz Reasons contiene EXCEEDS_MAX_FACES. Si un rostro no se indexa por razones de calidad, Reasons contiene valores como LOW_SHARPNESS o LOW_BRIGHTNESS. Para obtener más información, consulte 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" ] } ] }

Para obtener toda la información facial, especifique "ALL" para el parámetro de solicitud DetectionAttributes. Por ejemplo, en la siguiente respuesta de ejemplo, tenga en cuenta la información adicional del elemento faceDetail, que no se almacena de forma persistente en el servidor:

  • 25 referencias faciales (en comparación con las cinco del ejemplo anterior)

  • Diez atributos faciales (gafas, barba, oclusión, dirección de la mirada, etc.)

  • Emociones (véase el elemento emotion)

El elemento face proporciona metadatos que se almacenan de forma persistente en el servidor.

FaceModelVersion es la versión del modelo de rostros asociado a la colección. Para obtener más información, consulte Control de versiones del modelo.

OrientationCorrection es la orientación estimada de la imagen. No se devolverá información de corrección de la orientación si utiliza una versión del modelo de detección facial posterior a la versión 3. Para obtener más información, consulte Obtención de coordenadas de cuadro delimitador y orientación de imagen.

El siguiente ejemplo de respuesta muestra el JSON devuelto al especificar ["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": [] }