A la découverte d’AWS Rekognition

Aujourd’hui à l’occasion du Re:Invent 2016, Andy Jassy (CEO Amazon Web Services), a annoncé la mise à disposition du service AWS Rekognition qui permet de faire de l’analyse d’images.

Cet article va vous faire découvrir les possibilités offertes par ce tout nouveau service.

AWS Rekognition se concentre sur trois types d’analyses différentes:

  • La détection de mots-clefs en utilisant la fonction detect-labels
  • L’analyse de visages en utilisant la fonction detect-faces
  • La comparaison de visages en utilisant la fonction compare-faces

Chacune des fonctions renvoie des réponses avec un taux de confiance exprimé en pourcentage, 0 étant une certitude de non correspondance alors que plus on se rapproche de 100 et plus le taux de confiance dans celle-ci est élevé.

Au moment d’écrire ces lignes, seul le SDK pour Java et l’AWS CLI sont disponibles. J’ai fait le choix de me concentrer sur l’AWS CLI. Les SDK pour les différents langages devraient être disponibles dans un futur relativement proche. Les images que je vais analyser seront stockées sur AWS S3. A noter que l’on peut également analyser des images sur base d’URL mais il faut pour cela que celle-ci soit accessible via HTTPS. Le protocole HTTP n’est pas supporté.

La fonction detect-labels

Comme expliqué plus haut, la fonction detect-labels va permettre d’analyser une image et d’y accrocher une série de mots-clefs.


001

La première image analysée est l’image du tigre ici à droite. Pour l’oeil humain, il est facile de reconnaitre un tigre mais remarquons que si la tête du tigre est bien visible, le reste du corps est partiellement caché ce qui peut compliquer une reconnaissance automatisée.

 

 

La commande pour analyser l’image est la suivante:

 aws rekognition detect-labels --image '{"S3Object":{"Bucket":"testrekognition","Name":"001.jpeg"}}' --region eu-west-1 --output json 

Le résultat de la commande sous format json


{
"Labels": [
{
"Confidence": 95.10633087158203,
"Name": "Animal"
},
{
"Confidence": 95.10633087158203,
"Name": "Mammal"
},
{
"Confidence": 95.10633087158203,
"Name": "Tiger"
},
{
"Confidence": 56.77920150756836,
"Name": "Asleep"
},
{
"Confidence": 51.13365173339844,
"Name": "Face"
},
{
"Confidence": 51.13365173339844,
"Name": "Selfie"
}
]
}

On peut voir que Rekognition a détecté 6 mots-clefs, dont 3 qui sont “Animal”, “Mammal”, “Tiger” qui ont été détecté avec un taux de confiance de 95%. Trois autres mots-clefs, “Asleep”, “Face” et “Selfie” avec un taux de confiance à peine plus élévé que 50%.
Si l’on peut faire confiance à un mot-clef détecté avec un taux de confiance de 95%, il vous revient de savoir ce que vous souhaitez faire d’un mot-clef qui a un taux de confiance aux alentours de 50%. Rappelons nous qu’un taux de 50% signifie qu’il y a une chance sur deux pour que le mot-clef corresponde à l’image.

La deuxième image que nous allons analyser est l’image du temple ici à droite.

002

 

 

 

 

La commande pour analyser l’image est:


aws rekognition detect-labels --image '{"S3Object":{"Bucket":"testrekognition","Name":"002.jpg"}}' --region eu-west-1 --output json

Le résultat de cette commande est le suivant:


{
"Labels": [
{
"Confidence": 94.2605972290039,
"Name": "Architecture"
},
{
"Confidence": 94.2605972290039,
"Name": "Bell Tower"
},
{
"Confidence": 94.2605972290039,
"Name": "Clock Tower"
},
{
"Confidence": 94.2605972290039,
"Name": "Tower"
},
{
"Confidence": 89.91984558105469,
"Name": "Pagoda"
},
{
"Confidence": 89.91984558105469,
"Name": "Shrine"
},
{
"Confidence": 89.91984558105469,
"Name": "Temple"
},
{
"Confidence": 89.91984558105469,
"Name": "Worship"
},
{
"Confidence": 64.45289611816406,
"Name": "Dome"
},
{
"Confidence": 60.48169708251953,
"Name": "Lumber"
},
{
"Confidence": 60.318626403808594,
"Name": "Building"
},
{
"Confidence": 59.59885787963867,
"Name": "Housing"
},
{
"Confidence": 59.59885787963867,
"Name": "Monastery"
},
{
"Confidence": 58.4223747253418,
"Name": "Castle"
},
{
"Confidence": 58.4223747253418,
"Name": "Mansion"
},
{
"Confidence": 58.4223747253418,
"Name": "Palace"
},
{
"Confidence": 52.373199462890625,
"Name": "City"
},
{
"Confidence": 52.373199462890625,
"Name": "Downtown"
},
{
"Confidence": 51.6230583190918,
"Name": "Church"
},
{
"Confidence": 51.53582763671875,
"Name": "Furniture"
},
{
"Confidence": 51.193363189697266,
"Name": "Art"
},
{
"Confidence": 51.193363189697266,
"Name": "Sculpture"
},
{
"Confidence": 51.193363189697266,
"Name": "Statue"
},
{
"Confidence": 51.07057189941406,
"Name": "Town"
},
{
"Confidence": 50.749385833740234,
"Name": "Child"
},
{
"Confidence": 50.749385833740234,
"Name": "Kid"
}
]
}

Dans le cas de cette image, on peut voir que le nombre de mots-clefs trouvés par Rekognition est beaucoup plus important. Nous avons 26 mots-clefs avec certaines surprises telle que “Kid” (enfant en Anglais) avec un taux de confiance de 50%. Par contre, certains mots-clefs ne correspondant pas complètement à la photo comme “Bell Tower” (clocher en anglais) arrivent avec un taux de confiance, de 94%, ce qui est plus élevé que le taux de confiance correspondant le mieux à la photo “Temple” qui a lui un taux de confiance de 90%. La différence du taux de confiance entre les deux mots-clefs n’est pas énorme, mais il est intéressant de la remarquer.

 

005

La dernière image que nous allons analyser avec la fonction “detect-labels” est cette image d’un ordinateur portable.

J’ai choisi cette image spécialement pour la simplicité de son décor, pas d’arrière plan, une image nette. D’un point de vue humain, la reconnaissance semble évidente. Qu’en est-il pour Rekognition ?

 

 

La commande pour l’analyse de cette image est la suivante:


aws rekognition detect-labels --image '{"S3Object":{"Bucket":"testrekognition","Name":"005.jpg"}}' --region eu-west-1 --output json

Le résultat de cette commande est le suivant:


{
"Labels": [
{
"Confidence": 97.73299407958984,
"Name": "Computer"
},
{
"Confidence": 97.73299407958984,
"Name": "Electronics"
},
{
"Confidence": 97.73299407958984,
"Name": "LCD Screen"
},
{
"Confidence": 97.73299407958984,
"Name": "Laptop"
},
{
"Confidence": 97.73299407958984,
"Name": "Pc"
}
]
}

La reconnaissance est dans ce cas-ci sans ambiguïté. Nous avons seulement 5 mots-clefs détectés mais ils ont tous un taux de confiance de plus de 97%. A noter que tous les mots-clefs ont d’ailleurs  le même taux de confiance. Rekognition n’a pas trop de doute sur le fait que l’image est bien un PC de type laptop avec un écran LCD.

Il est donc à noter que plus l’image est précise et plus Rekognition donnera une réponse précise. Le taux de confiance minimum et la pertinence d’un mot-clef rapporté par Rekognition sera une question de point de vue métier.  Il est aussi important de faire attention au fait que le mot-clef le plus adapté ne correspond pas forcément au mot-clef avec le taux de confiance le plus élevé.

Deux arguments sont disponibles pour la commande detect-labels. Le premier permet de limiter le nombre de mots-clefs renvoyés par Rekognition en employant l’argument –max-labels. Le deuxième permet de ne récupérer que les mots-clefs avec un taux de confiance supérieur à un minimum déterminé en utilisant l’argument –min-confidence.

Après avoir fait quelques autres tests, je peux ajouter également que Rekognition n’est pas capable de donner un nom à un bâtiment. La Tour Eiffel est bien reconnue dans les bâtiments, l’architecture et les tours, mais le mot-clef “Eiffel” n’apparaîtra jamais dans les résultats proposés par Rekognition.

La fonction detect-faces

La fonction detect-faces va nous permettre d’analyser l’image d’un visage.

barack-obamaLa première image que nous allons analyser est une photo de Barack Obama. Le 44ème président des Etats-Unis y affiche un visage plutôt sévère.  Que va détecter Rekognition ?

 

 

 

 

La commande pour analyser cette image est désormais la suivante:

aws rekognition detect-faces --image '{"S3Object":{"Bucket":"testrekognition","Name":"barack-obama.jpg"}}' --region eu-west-1 --output json

Le résultat de cette analyse faciale est le suivant:

{
 "FaceDetails": [
 {
 "BoundingBox": {
 "Width": 0.5266666412353516,
 "Top": 0.14160583913326263,
 "Left": 0.3799999952316284,
 "Height": 0.6905109286308289
 },
 "Landmarks": [
 {
 "Y": 0.40538182854652405,
 "X": 0.5483677983283997,
 "Type": "eyeLeft"
 },
 {
 "Y": 0.40079349279403687,
 "X": 0.7309470176696777,
 "Type": "eyeRight"
 },
 {
 "Y": 0.5226081609725952,
 "X": 0.6347886919975281,
 "Type": "nose"
 },
 {
 "Y": 0.6676706075668335,
 "X": 0.5675134658813477,
 "Type": "mouthLeft"
 },
 {
 "Y": 0.663138747215271,
 "X": 0.708221435546875,
 "Type": "mouthRight"
 }
 ],
 "Pose": {
 "Yaw": -2.9242265224456787,
 "Roll": -1.3087852001190186,
 "Pitch": 4.694238662719727
 },
 "Quality": {
 "Sharpness": 130.0,
 "Brightness": 44.980709075927734
 },
 "Confidence": 99.89759826660156
 }
 ],
 "OrientationCorrection": "ROTATE_0"
}

Je ne vous cache pas que j’ai été assez surpris du résultat reçu pour l’analyse de cette image car il manquait beaucoup d’informations disponible dans l’analyse de la même image via la console Rekognition. Après quelques recherches, j’ai découvert qu’il faut ajouter l’argument “–attributes ALL” à la commande pour récupérer tous les attributs fournis par la console.

La commande devient donc :

aws rekognition detect-faces --image '{"S3Object":{"Bucket":"testrekognition","Name":"barack-obama.jpg"}}' --region eu-west-1 --output json

Le résultat correspond donc désormais à ce qui est attendu en terme de description du visage.

{
 "FaceDetails": [
 {
 "Confidence": 99.89759826660156,
 "Eyeglasses": {
 "Confidence": 99.98517608642578,
 "Value": false
 },
 "Sunglasses": {
 "Confidence": 99.94210052490234,
 "Value": false
 },
 "Gender": {
 "Confidence": 99.92906188964844,
 "Value": "Male"
 },
 "Landmarks": [
 {
 "Y": 0.40538182854652405,
 "X": 0.5483677983283997,
 "Type": "eyeLeft"
 },
 {
 "Y": 0.40079349279403687,
 "X": 0.7309470176696777,
 "Type": "eyeRight"
 },
 {
 "Y": 0.5226081609725952,
 "X": 0.6347886919975281,
 "Type": "nose"
 },
 {
 "Y": 0.6676706075668335,
 "X": 0.5675134658813477,
 "Type": "mouthLeft"
 },
 {
 "Y": 0.663138747215271,
 "X": 0.708221435546875,
 "Type": "mouthRight"
 },
 {
 "Y": 0.3957294523715973,
 "X": 0.5594143867492676,
 "Type": "leftPupil"
 },
 {
 "Y": 0.39697006344795227,
 "X": 0.7369691133499146,
 "Type": "rightPupil"
 },
 {
 "Y": 0.3709719777107239,
 "X": 0.4853002727031708,
 "Type": "leftEyeBrowLeft"
 },
 {
 "Y": 0.3359399139881134,
 "X": 0.5333217978477478,
 "Type": "leftEyeBrowRight"
 },
 {
 "Y": 0.3448444902896881,
 "X": 0.5891711711883545,
 "Type": "leftEyeBrowUp"
 },
 {
 "Y": 0.34214019775390625,
 "X": 0.6820976138114929,
 "Type": "rightEyeBrowLeft"
 },
 {
 "Y": 0.3254317343235016,
 "X": 0.739876389503479,
 "Type": "rightEyeBrowRight"
 },
 {
 "Y": 0.36108461022377014,
 "X": 0.7906664609909058,
 "Type": "rightEyeBrowUp"
 },
 {
 "Y": 0.4135534167289734,
 "X": 0.512043297290802,
 "Type": "leftEyeLeft"
 },
 {
 "Y": 0.4069267213344574,
 "X": 0.584893524646759,
 "Type": "leftEyeRight"
 },
 {
 "Y": 0.3861546814441681,
 "X": 0.5468842387199402,
 "Type": "leftEyeUp"
 },
 {
 "Y": 0.4197508990764618,
 "X": 0.5497507452964783,
 "Type": "leftEyeDown"
 },
 {
 "Y": 0.40218019485473633,
 "X": 0.6939403414726257,
 "Type": "rightEyeLeft"
 },
 {
 "Y": 0.40625515580177307,
 "X": 0.7682569622993469,
 "Type": "rightEyeRight"
 },
 {
 "Y": 0.3817974328994751,
 "X": 0.7305538058280945,
 "Type": "rightEyeUp"
 },
 {
 "Y": 0.41636529564857483,
 "X": 0.7311884164810181,
 "Type": "rightEyeDown"
 },
 {
 "Y": 0.5691128969192505,
 "X": 0.5987941026687622,
 "Type": "noseLeft"
 },
 {
 "Y": 0.5648173689842224,
 "X": 0.6725196838378906,
 "Type": "noseRight"
 },
 {
 "Y": 0.6448885202407837,
 "X": 0.6400305032730103,
 "Type": "mouthUp"
 },
 {
 "Y": 0.6808777451515198,
 "X": 0.6390783786773682,
 "Type": "mouthDown"
 }
 ],
 "Pose": {
 "Yaw": -2.9242265224456787,
 "Roll": -1.3087852001190186,
 "Pitch": 4.694238662719727
 },
 "Emotions": [
 {
 "Confidence": 53.97029113769531,
 "Type": "CALM"
 },
 {
 "Confidence": 17.31169891357422,
 "Type": "ANGRY"
 },
 {
 "Confidence": 12.731629371643066,
 "Type": "CONFUSED"
 }
 ],
 "EyesOpen": {
 "Confidence": 99.99999237060547,
 "Value": true
 },
 "BoundingBox": {
 "Width": 0.5266666412353516,
 "Top": 0.14160583913326263,
 "Left": 0.3799999952316284,
 "Height": 0.6905109286308289
 },
 "Smile": {
 "Confidence": 91.85149383544922,
 "Value": false
 },
 "MouthOpen": {
 "Confidence": 99.9034194946289,
 "Value": false
 },
 "Quality": {
 "Sharpness": 130.0,
 "Brightness": 44.980709075927734
 },
 "Mustache": {
 "Confidence": 95.72433471679688,
 "Value": false
 },
 "Beard": {
 "Confidence": 92.74378967285156,
 "Value": false
 }
 }
 ],
 "OrientationCorrection": "ROTATE_0"
}

Nous pouvons voir que l’analyse d’un visage est très poussée, y compris la présence de lunettes ou lunettes de soleil, la présence d’une barbe ou d’une moustache, la présence et la position de points anatomiques comme la position des yeux, du nez, de la bouche, etc. L’analyse nous précise également les émotions exprimées sur le visage. Enfin l’analyse donne également l’orientation spatiale du visage en utilisant les notions de Yaw, Roll et Pitch.

Les différents points tels que Top, Left, Width, Height, X et Y sont tous donnés avec une échelle allant de 0 à 1 exprimée en proportion des dimensions de l’image analysée.

La fonction compare-faces

Cette fonction permet de reconnaitre une personne parmi une ou plusieurs personnes. Le premier test que nous allons faire, est une comparaison entre deux photos de Barack Obama.

Les photos utilisées sont les deux photos ci-dessous.

barack-obamabarack-obama-3

La commande pour analyser ces deux images est:


aws rekognition compare-faces --source-image '{"S3Object":{"Bucket":"testrekognition","Name":"barack-obama.jpg"}}' --target-image '{"S3Object":{"Bucket":"testrekognition","Name":"barack-obama-3.jpg"}}' --region eu-west-1 --output json

Le résultat de cette commande est:


{
"FaceMatches": [
{
"Face": {
"BoundingBox": {
"Width": 0.2800000011920929,
"Top": 0.13833992183208466,
"Left": 0.3722222149372101,
"Height": 0.5
},
"Confidence": 99.98072814941406
},
"Similarity": 99.0
}
],
"SourceImageFace": {
"BoundingBox": {
"Width": 0.5266666412353516,
"Top": 0.14160583913326263,
"Left": 0.3799999952316284,
"Height": 0.6905109286308289
},
"Confidence": 99.89759826660156
}
}

Le premier élément à noter est que Rekognition conclut à une similarité de 99%, ce qui revient à confirmer qu’il y a une quasi certitude sur le fait que les deux photos correspondent bien au même individu. Rekognition nous montre également l’emplacement des visages détectés sur la photo target. Après avoir fait quelques tests complémentaires, il faut noter que Rekognition ne prend en compte pour la comparaison que le premier visage détecté sur l’image source.

Pour le deuxième test, nous allons comparer une photo de Werner Vogels (CTO Amazon.com) et une photo où il est en compagnie de plusieurs personnes. Nous verrons ensuite comment analyser le résultat proposé par Rekognition pour cette analyse.

Les deux photos utilisées pour ce test sont les suivantes:

werneralonewerner

La commande pour analyser ces deux images est:


aws rekognition compare-faces --source-image '{"S3Object":{"Bucket":"testrekognition","Name":"werneralone.jpeg"}}' --target-image '{"S3Object":{"Bucket":"testrekognition","Name":"wernergroup.jpg"}}' --region eu-west-1 --output json

Le résultat de cette commande est:


{
"FaceMatches": [
{
"Face": {
"BoundingBox": {
"Width": 0.05111110955476761,
"Top": 0.4014814794063568,
"Left": 0.41777777671813965,
"Height": 0.06814815104007721
},
"Confidence": 99.95947265625
},
"Similarity": 91.0
}
],
"SourceImageFace": {
"BoundingBox": {
"Width": 0.28777778148651123,
"Top": 0.14826840162277222,
"Left": 0.38777777552604675,
"Height": 0.5120202302932739
},
"Confidence": 99.98279571533203
}
}

Le résultat de cette analyse montre que Rekognition a bien détecté une correspondance entre les deux photos. Le visage qui est reconnu sur la photo cible est visible sur celle-ci en suivant les coordonnées FaceMatches/Fac/BoundingBox. La similarité est de 91% pour cette analyse.

La dernière fonctionnalité de Rekognition est sa capacité à stocker des informations concernant des visages pour ensuite faire de la reconnaissance de visages connus sur des photos. La première étape pour stocker des informations de reconnaissances faciales est de créer une collection. Cela se fait en exécutant la commande ci-dessous. Dans ce cas-ci nous allons appeler notre collection “rekognition-test”


aws rekognition create-collection --collection-id rekognition-test --ouput json

Le résultat de la commande confirme la création de la collection


{
"CollectionArn": "aws:rekognition:eu-west-1:068765350777:collection/rekognition-test",
"StatusCode": 200
}

L’étape suivante consiste à injecter des images de visages dans le collection créée. Nous allons donc ajouter à cette collection l’image de Werner Vogels et du président Obama que nous avons utilisées précédemment.

La commande pour injecter une image dans une collection est la suivante:


aws rekognition index-faces --image '{"S3Object":{"Bucket":"testrekognition","Name":"werneralone.jpeg"}}' --collection-id rekognition-test --detection-attributes ALL --output json

Le résultat de cette commande est:


{
 "FaceRecords": [
 {
 "FaceDetail": {
 "Confidence": 99.98279571533203,
 "Eyeglasses": {
 "Confidence": 99.925537109375,
 "Value": false
 },
 "Sunglasses": {
 "Confidence": 99.95845794677734,
 "Value": false
 },
 "Gender": {
 "Confidence": 99.92684173583984,
 "Value": "Male"
 },
 "Landmarks": [
 {
 "Y": 0.36535710096359253,
 "X": 0.4869493544101715,
 "Type": "eyeLeft"
 },
 {
 "Y": 0.36258670687675476,
 "X": 0.5764246582984924,
 "Type": "eyeRight"
 },
 {
 "Y": 0.45826151967048645,
 "X": 0.5375473499298096,
 "Type": "nose"
 },
 {
 "Y": 0.5293899178504944,
 "X": 0.4883081316947937,
 "Type": "mouthLeft"
 },
 {
 "Y": 0.5268217325210571,
 "X": 0.571368932723999,
 "Type": "mouthRight"
 },
 {
 "Y": 0.3634977340698242,
 "X": 0.48942625522613525,
 "Type": "leftPupil"
 },
 {
 "Y": 0.36625751852989197,
 "X": 0.5742277503013611,
 "Type": "rightPupil"
 },
 {
 "Y": 0.3136322796344757,
 "X": 0.4494207799434662,
 "Type": "leftEyeBrowLeft"
 },
 {
 "Y": 0.3040206730365753,
 "X": 0.4786929786205292,
 "Type": "leftEyeBrowRight"
 },
 {
 "Y": 0.3160299062728882,
 "X": 0.506065309047699,
 "Type": "leftEyeBrowUp"
 },
 {
 "Y": 0.3131835162639618,
 "X": 0.5602383613586426,
 "Type": "rightEyeBrowLeft"
 },
 {
 "Y": 0.30440983176231384,
 "X": 0.584790050983429,
 "Type": "rightEyeBrowRight"
 },
 {
 "Y": 0.3082016110420227,
 "X": 0.6088752746582031,
 "Type": "rightEyeBrowUp"
 },
 {
 "Y": 0.36682310700416565,
 "X": 0.47125545144081116,
 "Type": "leftEyeLeft"
 },
 {
 "Y": 0.3671276271343231,
 "X": 0.5034504532814026,
 "Type": "leftEyeRight"
 },
 {
 "Y": 0.35515838861465454,
 "X": 0.4868057370185852,
 "Type": "leftEyeUp"
 },
 {
 "Y": 0.3739376366138458,
 "X": 0.4866892397403717,
 "Type": "leftEyeDown"
 },
 {
 "Y": 0.3643577992916107,
 "X": 0.5606155395507812,
 "Type": "rightEyeLeft"
 },
 {
 "Y": 0.36419805884361267,
 "X": 0.5919852256774902,
 "Type": "rightEyeRight"
 },
 {
 "Y": 0.3530966341495514,
 "X": 0.5764120817184448,
 "Type": "rightEyeUp"
 },
 {
 "Y": 0.3703855276107788,
 "X": 0.5765615701675415,
 "Type": "rightEyeDown"
 },
 {
 "Y": 0.4767528772354126,
 "X": 0.5135772228240967,
 "Type": "noseLeft"
 },
 {
 "Y": 0.4765097498893738,
 "X": 0.5526716113090515,
 "Type": "noseRight"
 },
 {
 "Y": 0.5194153189659119,
 "X": 0.5325577259063721,
 "Type": "mouthUp"
 },
 {
 "Y": 0.5436834096908569,
 "X": 0.532525897026062,
 "Type": "mouthDown"
 }
 ],
 "Pose": {
 "Yaw": 5.897272109985352,
 "Roll": -1.8942917585372925,
 "Pitch": -8.386834144592285
 },
 "Emotions": [
 {
 "Confidence": 84.31526184082031,
 "Type": "HAPPY"
 },
 {
 "Confidence": 4.339146614074707,
 "Type": "SAD"
 },
 {
 "Confidence": 1.0808289051055908,
 "Type": "CONFUSED"
 }
 ],
 "EyesOpen": {
 "Confidence": 99.84125518798828,
 "Value": true
 },
 "BoundingBox": {
 "Width": 0.28777778148651123,
 "Top": 0.14826840162277222,
 "Left": 0.38777777552604675,
 "Height": 0.5120202302932739
 },
 "Smile": {
 "Confidence": 86.8729019165039,
 "Value": false
 },
 "MouthOpen": {
 "Confidence": 99.8595199584961,
 "Value": false
 },
 "Quality": {
 "Sharpness": 100.0,
 "Brightness": 70.13583374023438
 },
 "Mustache": {
 "Confidence": 99.6712646484375,
 "Value": true
 },
 "Beard": {
 "Confidence": 99.69338989257812,
 "Value": true
 }
 },
 "Face": {
 "BoundingBox": {
 "Width": 0.28777778148651123,
 "Top": 0.14826840162277222,
 "Left": 0.38777777552604675,
 "Height": 0.5120202302932739
 },
 "FaceId": "603cf3b3-5aa3-5554-956a-4267bdab3c16",
 "Confidence": 99.98279571533203,
 "ImageId": "abed4f7a-5883-5514-bad6-55da8e888d6b"
 }
 }
 ],
 "OrientationCorrection": "ROTATE_0"
}

Nous pouvons noter que le résultat de l’analyse est similaire à la fonction “detect-faces” mais ici le résultat nous donne en plus de la description du visage un FaceID, qui est l’ID unique du visage dans cette collection. Cette image de Werner est donc reconnue sous l’ID “603cf3b3-5aa3-5554-956a-4267bdab3c16” dans l’image portant l’ID “abed4f7a-5883-5514-bad6-55da8e888d6b”.

J’ai par la suite injecté les photos de Barack Obama reprises ci-dessous.  Nous avons donc maintenant 3 visages enregistrés dans notre collection, reconnus avec les ID suivants:

werneralone

FaceID: 603cf3b3-5aa3-5554-956a-4267bdab3c16

ImageID: abed4f7a-5883-5514-bad6-55da8e888d6b

 

 

 

barack-obama-3FaceID: c27c0d68-293d-5873-b400-162c230af3ea

ImageID: 8259ea7b-0735-51ab-b886-6e97dc049c5e

 

 

 

barack-obamaFaceID: 61613149-60ca-5ca4-9ad8-835b8b02e4b2
ImageID: cc2ba8dd-a12f-54b2-a4c2-30dc741626c1

 

 

 

 

 

Nous allons maintenant soumettre l’image de Werner Vogels à notre collection pour voir si Rekognition va retrouver le visage du CTO d’Amazon.com. L’image utilisée pour cette recherche est la suivante:

werner

La commande pour cette analyse est:


aws rekognition search-faces-by-image --image '{"S3Object":{"Bucket":"testrekognition","Name":"wernergroup.jpg"}}' --collection-id rekognition-test --output json

Le résultat de cette commande est:


{
"SearchedFaceBoundingBox": {
"Width": 0.05111110955476761,
"Top": 0.4014814794063568,
"Left": 0.41777777671813965,
"Height": 0.06814815104007721
},
"SearchedFaceConfidence": 99.95947265625,
"FaceMatches": [
{
"Face": {
"BoundingBox": {
"Width": 0.28777799010276794,
"Top": 0.14826799929141998,
"Left": 0.38777801394462585,
"Height": 0.5120199918746948
},
"FaceId": "603cf3b3-5aa3-5554-956a-4267bdab3c16",
"Confidence": 99.98279571533203,
"ImageId": "abed4f7a-5883-5514-bad6-55da8e888d6b"
},
"Similarity": 90.36781311035156
}
]
}

Rekognition a donc bien fait la reconnaissance en détectant Werner Vogels sur la photo avec un taux de confiance de 90%. Nous savons également, grâce au FaceID et ImageID, à partir de quelle image la reconnaissance a été faite. Rekognition nous fournit également l’emplacement où a été détecté Werner Vogels.

En conclusion, nous pouvons donc dire que Rekognition est un outil très puissant de reconnaissance d’image avec une focalisation plus poussée pour ce qui est de la reconnaissance de visages. Il est a noter que Rekognition ne connaît que les noms communs et jamais les noms propres. La puissance d’analyse explique sans doute le coût assez élevé de ce service qui est facturé par image analysée (10$ pour 1000 images) et par nombre d’objets stockés dans les collections (10$ pour 1000 images). Notons quand même la dégressivité du prix qui peut descendre à 4$ pour 1000 images analysées par mois, si vous en analysez plus de 100 millions sur le mois.