Parfois l’intelligence artificielle (AI) se trompe

Introduction

Il y a plusieurs années j’avais testé à l’aide de photos de mes petits-enfants les services de reconnaissance de personnes et de motifs, disponibles sur le web, basés sur l’intelligence artificielle. Pour les GAFAM (Google, Apple, Facebook, Amazon et Microsoft) ces services sont devenus aujourd’hui des produits commerciaux lucratifs. Les start-up’s actives à l’époque dans ces domaines ont presque toutes été acquises entretemps par les géants du web, auxquels il faut ajouter IBM (GAFAMI).

La liste de mes anciennes contributions à ce sujet est relevée ci-après:

Reconnaissance faciale

La reconnaissance faciale est un moyen d’identifier ou de confirmer l’identité d’un individu grâce à son visage. Les systèmes de reconnaissance faciale peuvent servir à l’identification de personnes sur des photos, dans des vidéos ou en temps réel.

La reconnaissance faciale est devenue aujourd’hui un outil de la vie quotidienne : pour débloquer son mobile, pour retrouver des personnes sur les réseaux sociaux, pour gérer sa collection de photos numériques sur son ordinateur, sa station-disque ou dans le nuage (cloud).

J’ai sauvegardé sur ma station-disque Synology des dizaines de milliers de photos que je gère avec les applications PhotoStation et Moments. Il s’agit de photos récentes prises avec des appareils photographiques digitaux ou avec des mobiles, des diapositives ou négatives numérisés, d’anciennes photos scannées (avec un scanner ou avec Google PhotoScan) ou des images synthétiques respectivement des copies-écran.

La majorité des logiciels de gestion d’une collection de photos dispose aujourd’hui d’une application de reconnaissance faciale intégrée performante. Synology ne fait pas d’exception. Les images suivantes montrent les résultats de recherches de quelques anciens collaborateurs, collègues et amis, de mes anciens directeurs, de membres de ma famille.

Il est évident qu’il faut entrer le nom d’une personne la première fois qu’une photo avec un nouveau visage est enregistrée. Mais à partir de ce moment, la reconnaissance des personnes se fait automatiquement lors de chaque nouvelle sauvegarde d’une photo, avec une précision étonnante. Il peut s’agir de portraits, de photos plan buste, de cadrages plein pied et même de photos de groupe avec plusieurs dizaines d’individus. Il est même possible de regrouper automatiquement des mannequins, des sculptures de bustes, des peintures, même s’il s’agit de visages différents.

Si l’application ne réussit pas à identifier un visage, elle présente les photos afférentes avec la question “Who’s This?” On peut alors répondre en indiquant le nom correct et le tour est joué. Les raisons d’une identification non-réussie sont multiples : Des nouveaux-nés dont le visage change en permanence les premiers mois, des personnes costumées (carnaval) ou masquées (Covid) comme Thomas, Charles et Capucine, des personnes avec ou sans lunettes comme Frank, des personnes sans identification manuelle initiale comme Isabelle, des statues de pharaons sans noms.

Reconnaissance de motifs et d’objets

Une application d’intelligence artificielle (AI) intégrée dans les logiciels de gestion de photos, plus spectaculaire encore que la reconnaissance faciale, constitue la reconnaissance automatique des motifs et objets représentés sur les photos d’une collection, accompagnée d’une classification automatique dans des albums virtuels. L’utilisateur n’a pas besoin d’intervenir dans ce processus. L’entraînement des modèles AI se fait par les développeurs des logiciels à partir de bases de données publiques contenant des millions d’images annotées.

La base de données d’images avec étiquettes la plus fameuse est ImageNet. Lancée en 2006 par la chercheuse Fei-Fei-Li, spécialiste de la vision par ordinateur, la base de données ImageNet a été étendue progressivement et comprend actuellement plus que 14 millions d’images.

Au début mes photos ont été classées automatiquement par grandes rubriques : enfants, animaux, paysages, architectures. etc. J’ai considéré cette option comme gag intéressant. Avec chaque nouvelle mise à jour le logiciel est devenu plus performant. Pour les animaux des sous-catégories ont été créées: tortues, escargots, lapins, poissons, chevaux, moutons, chats etc. Actuellement l’AI commence à différencier les races des chiens. Aujourd’hui la classification automatique est un outil précieux pour moi pour rechercher des souvenirs.

Au niveau de l’alimentation, le programme fait la distinction entre pizza, paëlla, menu italien, dessert etc.

Identification de desserts non comestibles

Si on regarde l’image de couverture sélectionnée par l’AI pour la rubrique Dessert, on constate qu’il s’agit en réalité du livre “2. Schoulheft” de Capucine. J’ai constaté que parmi toutes les catégories c’est dans la rubrique “Dessert” que l’AI de Synology se trompe le plus souvent. Les copies-écran suivantes montrent quelques exemples: une oeuvre d’art peinte par un enfant, un tablier de jeu de moulin, deux poussins dans un carton, un jouet FisherPrice, une collection de minéraux, un bonhomme de neige, un caméléon télécommandé.

Je retire toutefois mon chapeau pour la reconnaissance par l’AI que les quatre photos de Capucine, avec des framboises sur les doigts, représentent un dessert.

Mais l’AI de Synology n’est pas la seule à se tromper avec des photos de menus. Il y a deux ans Google avait pris l’initiative automatique de créer un vidéoclip intitulé “Bon appétit” avec mes photos prises en 2019 avec mon iPhone. Parmi les dégustations figuraient des photos de têtards, du moisi dans un pot de confiture, des jouets de dinosaures qui sortent d’un oeuf et de plats garnis par mes petits-enfants avec des coquillages, fleurs et feuilles d’arbustes.

Mot de la fin

Malgré ces quelques erreurs qui font rire, les performances de l’intelligence artificielle progressent à grands pas et les résultats sont de plus en plus impressionnants.

Mäi Computer versicht Lëtzebuergesch ze verstoen

Dernière mise à jour : 1er août 2022

Introduction

Dans l’attente de l’élimination de quelques bogues dans les modèles de synthèse vocale (TTS) par la communauté Coqui.ai, aux fins de progresser avec mon projet de création d’une voix TTS luxembourgeoise, je me suis focalisé les dernières semaines sur la reconnaissance automatique de la parole luxembourgeoise (STT: Text to Speech ou ASR: Automatic Speech Recognition).

Mes premiers essais effectués dans ce domaine en janvier 2022 étaient encourageants. Impressionné par la présentation du premier modèle STT luxembourgeois par le Pr Peter Gilles de l’université du Luxembourg sur la plateforme d’intelligence artificielle HuggingFace en février 2022, j’ai poursuivi mes tests avec le projet Coqui-STT (version 1.3.0).

Bases de données LB-2880 et LB-27072

Pour entraîner un modèle STT avec des réseaux neuronaux, il faut disposer d’une base de données audio avec les transcriptions de la parole enregistrée. Au début 2022 j’avais finalisé une base de données avec les enregistrements de quatre oratrices (au total 1005 échantillons) pour l’entraînement d’un modèle TTS luxembourgeois avec quatre voix. Entretemps j’ai complété cette base avec des enregistrements publics de trois orateurs (1.676 échantillons) et je l’ai étoffé avec les enregistrements audio du dictionnaire luxembourgeois LOD (24.678 échantillons).

Ainsi j’ai pu constituer deux ensembles de données avec 2.880, respectivement 27.072, échantillons qui se prêtent pour l’entraînement de modèles TTS et STT. Je vais prochainement publier ces bases de données LB-2880 et LB-27072 sur mon compte Github.

Les deux ensembles sont segmentés en trois volets. Le plus large (train.csv) est utilisé pour l’entraînement du modèle, le deuxième (val.csv) sert à mesurer le progrès de l’entraînement après chaque cycle d’itérations (époque) et le troisième (test.csv) permet de tester la performance du modèle à la fin de l’entraînement. Les détails sont indiqués dans le tableau qui suit:

Base de donnéesLB-2880LB-27072
Durée totaleca 7 heuresca 13 heures
échantillons train256025600
échantillons val1921344
échantillons test128128

Transfert d’apprentissage

Convaincu que le seul moyen pour réussir l’entraînement d’un modèle STT luxembourgeois consiste à se baser sur un large modèle pré-entraîné dans une autre langue, je me suis tout de suite concentré sur cette option de transfert d’apprentissage. Les résultats impressionnants que le Pr Peter Gilles a obtenu sur base du modèle wav2vec2-XLS-R-300m créé par Meta AI (Facebook) ont renforcé ma conviction.

Coqui.ai a mis un modèle pré-entraîné en langue anglaise à disposition de la communauté. Comme la langue luxembourgeoise utilise un alphabet plus large que l’Anglais avec les caractères accentués suivants

['à','á','â','ä','ç','è','é','ê','ë','î','ï','ô','ö','û','ü']

il faut supprimer la dernière couche de neurones du modèle pré-entraîné anglais pour pourvoir l’entraîner avec une base de données luxembourgeoise. Le hyper-paramètre de configuration ‘--drop_source_layers 1‘ permet de remplacer la dernière couche avec une nouvelle couche, initialisée avec l’alphabet luxembourgeois.

Hélas les premiers résultats ne répondaient pas du tout à mes attentes et les métriques affichées étaient plus mauvaises que celles obtenues lors de mes premiers tests, effectués à partir de zéro au début de l’année.

Modèles HuggingFace

Pour exclure que la qualité de ma base de données soit insuffisante, j’ai essayé de reproduire l’entraînement du premier modèle STT luxembourgeois sur HuggingFace avec mes propres données. Comme l’utilisation du modèle géant wav2vec2-XLS-R-300m, qui a servi de base pour le premier modèle, dépassait avec 300 millions de paramètres la capacité de traitement de mon ordinateur desktop, ainsi que celle de mon compte Pro sur la plateforme Google Colab, j’ai choisi un modèle pré-entraîné plus simple sur HuggingFace, à savoir le modèle Wav2Vec2-XLSR-53.

Avec un résultat WER de 0,17 j’ai réussi à obtenir des valeurs de même niveau que celles rapportées par le Pr Peter Gilles. Je vais prochainement publier mon modèle résultant sur mon compte HuggingFace.

Modèle Coqui-STT

On peut se demander quel est l’intérêt de s’acharner sur d’autres modèles STT que ceux offerts en source ouverte sur la plateforme formidable HuggingFace qui constitue aujourd’hui la référence en matière de l’apprentissage automatique profond et la plus grande communauté d’intelligence artificielle (AI) sur le web.

La réponse n’est pas simple. Une raison est certainement la taille des modèles STT entraînés. Si la taille est de quelques Giga Bytes dans le premier cas, elle est de quelques dizaines de Mega Bytes dans le cas du modèle Coqui-STT, ce qui permet de le porter sur un mobilophone (iOS et Android) ou sur un nano-ordinateur mono-carte comme le Raspberry Pi. Une deuxième raison est l’adaptation plus simple à son propre environnement. La configuration fine du modèle Coqui-STT simplifie son optimisation pour une utilisation spécifique. Personnellement je suis d’avis que la majeure raison constitue toutefois la transparence des processus. Les recettes HuggingFace sont une sorte de boîte noire d’usine à gaz qui fournit des résultats spectaculaires, mais dont le fonctionnement interne est difficile à comprendre, malgré l’ouverture du code. Pour apprendre le fonctionnement interne de réseaux de neurones un modèle comme Coqui-STT est plus approprié. J’ai donc continué à explorer l’apprentissage automatique profond du modèle Coqui-STT à partir de zéro, avec la certitude que ma base de données est de qualité.

Comme le fichier de configuration Coqui-STT comporte 96 hyper-paramètres, j’ai essayé de comprendre le rôle de chaque hyper-paramètre. J’ai vérifié également l’influence de quelques hyper-paramètres clés sur l’entraînement du modèle à l’aide d’une base de données restreinte de 100 échantillons. Les résultats significatifs sont commentés ci-après:

Similarité des entraînements

La taille d’un réseau de neurones est déterminée par le nombre de couches, le nombre de neurones par couche et le nombre de connexions entre neurones. Le total constitue le nombre de paramètres du modèle, à ne pas confondre avec les hyper-paramètres qui spécifient la configuration du modèle. Les paramètres du modèle sont initialisés au hasard au début de l’entraînement. Pour cette raison chaque processus d’entraînement produit des résultats différents. Le graphique qui suit montre en trois différentes vues que les différences sont négligeables.

Nombre de couches

Le nombre de couches par défaut du modèle Coqui-STT est de 2048. Ce nombre est trop élevé pour une petite base de données. La figure suivante montre en deux vues l’évolution de l’entraînement en fonction du nombre de couches.

Nombre de lots

Les échantillons de la base de données pour entraîner le modèle STT sont répertoriés dans un fichier csv dans le format suivant:

wav_filename,wav_filesize,transcript

wavs/guy/walresultat-04.wav,232854,awer och net op eng spektakulär manéier obwuel a prozenter ausgedréckt ass de minus dach méi staark wéi a sëtz ausgedréckt

wavs/sara/Braun_042.wav,113942,ech hunn am bësch eng heemeleg kaz fonnt

wavs/jemp/WD-2007-jemp-07.wav,197962,wou en dag fir dag e puer vun deene fäll klasséiert

wavs/judith/marylux_lb-wiki-0138.wav,132754,florange ass eng franséisch uertschaft a gemeng am departement moselle a loutrengen

........... 

Chaque ligne du fichier csv correspond à un échantillon et comporte le chemin et le nom d’un fichier audio, la taille de ce fichier et la transcription de l’enregistrement audio, en lettres minuscules et sans signes de ponctuation. Les échantillons sont regroupés par lots lors de l’entraînement. Une itération d’entraînement comprend le traitement d’un seul lot. Une époque comprend le total des itérations pour traiter tous les échantillons. Si la taille d’un lot est égal à un, le nombre des itérations est égal au nombre des échantillons. Dans le cas d’un lot de 10, le nombre des itérations est seulement un dixième du nombre des échantillons. Comme le temps de calcul d’une itération n’augmente presque pas avec l’accroissement de la taille d’un lot, le temps d’entraînement se réduit de la même manière. On a donc intérêt à spécifier une taille élevée des lots. Hélas, la taille des lots est fonction de la mémoire disponible du processeur graphique (GPU). Une taille trop élevée génère des erreurs “memory overflow” .

J’ai réalisé tous mes entraînements sur mon ordinateur desktop avec GPU NVIDIA RTX2070 avec des lots de 32, respectivement de 16 dans certains cas spécifiques.

Rapport entre entraînement et validation

Le graphique qui suit montre l’évolution de l’entraînement pour une base de données déterminée en fonction de la répartition des échantillons pour l’entraînement et pour la validation.

La segmentation de 93:7 que j’ai chois semble être appropriée.

Taux Dropout

Le mécanisme de “dropout” permet de réguler l’apprentissage d’un réseau de neurones et de réduire le “overfitting“. Il consiste à la suppression au hasard de connexions entre neurones pendant chaque itération à un taux spécifié dans la configuration. Le graphique suivant montre l’influence de ce taux sur l’entraînement. La valeur par défaut est de 0.05 et produit les meilleurs résultats.

Taux d’apprentissage

Le taux d’apprentissage (learning rate) est un hyper-paramètre important dans la configuration d’un modèle STT ou TTS. La valeur par défaut du modèle Coqui-STT est de 0.001. La figure qui suit montre l’influence de ce taux sur l’entraînement.

Une option de configuration intéressante proposée par le modèle Coqui-STT est la suite des hyperparamètres suivants:

--reduce_lr_on_plateau true
--plateau_epochs 3
--plateau_reduction 0.5

Elle permet de modifier le taux d’apprentissage si la performance de l’entraînement ne progresse plus pendant trois époques. On parle de plateau dans la métrique affichée. J’ai utilisé cette option dans tous mes entraînements.

Augmentation des données

En général les modèles d’apprentissage automatique en profondeur sont très gourmands en données. Que faire si on ne dispose pas d’un nombre important de données pour alimenter un modèle ? On augmente les données existantes en ajoutant des copies modifiées des échantillons ! Dans le cas du modèle Coqui-STT on créé par exemple des fichiers audio modifiés avec les mêmes transcriptions. En changeant le volume, le ton, la cadence ou le spectre des enregistrements, on peut créer des échantillons supplémentaires.

L’outil data_augmentation_for_asr de Frederic S. Oliveira permet de générer aisément des nouveaux fichiers .wav et .cvs à ajouter à la base de données existante. J’ai réalisé des tests afférents en désignant ce processus comme augmentation externe. Le modèle Coqui-STT inclut une telle option sans recourir à un outil externe et sans augmenter le temps d’entraînement. L’hyper-paramètre suivant, ajouté au script d’entraînement,

--augment "pitch[p=1.0,pitch=1~0.2]" "tempo[p=1.0,factor=1~0.5]"

permet par exemple de tripler le nombre des échantillons.

Suivant mes tests l’augmentation des donnés ne présente plus d’intérêt si le nombre des échantillons originaux dépasse quelques milliers.

Un type d’augmentation pour l’entraînement STT que je n’ai pas encore testé est la création d’échantillons synthétiques moyennant un modèle TTS luxembourgeois. C’est une piste que je vais encore explorer.

Résultats des entraînements avec les deux bases de données

LB-2880

La base de données LB-2880 comprend 2530 échantillons enregistrés par 4 oratrices et par 3 orateurs, ainsi que 350 mots du dictionnaire LOD. Le tableau qui suit relève les résultats pour des entraînements avec différents paramètres, pendant 30 époques chacun:

coucheslotaugmentationmeilleur modèle acoustiqueWERCERLOSS
102416sansbest_dev_17600.7050.22173,9
102416internebest_dev_27200,7170.22269,0
204816sansbest_dev-14400.7230.22478.5
204816externebest_dev-23950.7760.27178.4
204816internebest_dev-35200.7100.23170,8

LB-27072

La base de données LB-72072 est identique à la base LB-2880, mais avec l’addition de 24.192 échantillons (mots) du dictionnaire LOD. Les résultats sont affichés ci-après:

coucheslotaugmentationmeilleur modèle acoustiqueWERCERLOSS
102416sansbest_dev-256000.7290.25394.2
204816sansbest_dev-192000.7320.24797.2
204816internebest_dev-416000.8700.33892.8

Comparaison

Contrairement à mes attentes, l’inclusion de tous les mots du dictionnaire LOD ne produit pas un meilleur modèle STT, au contraire. Les métriques des modèles LB-27072 sont globalement moins performants que celles des modèles entraînés avec la base de données LB-2880. Je vais prochainement explorer si la base de données LB-27072 présente des avantages pour l’entraînement d’un modèle TTS.

Les performances des cinq modèles entraînés avec la base de données LB-2880 ne diffèrent pas sensiblement. Je me propose de retenir le modèle à 1024 couches et entraîné sans augmentation de données comme meilleur modèle acoustique.

Tensorflow Lite

Il est recommandé de convertir le meilleur modèle en format Tensorflow Lite (.tflite) pour pouvoir le déployer sur des systèmes à ressources restreintes comme des mobilophones. Le script pour exporter le modèle est le suivant:

python3 -m coqui_stt_training.train \
--checkpoint_dir /home/mbarnig/STT/losanaju-camaguje/lb-datasets/checkpoints-2880-1024/ \
--export_dir /home/mbarnig/STT/losanaju-camaguje/lb-datasets/exported-model \
--export_tflite true

Le modèle exporté a une taille de 12.2 MB. Je signale qu’il existe un standard ouvert pour les modèles AI, appelé ONNX (Open Neural Network Exchange), qui n’est pas encore supporté par Coqui-STT.

Modèle de langage

Un système de reconnaissance de la parole ne comporte pas seulement un modèle acoustique comme nous l’avons vu jusqu’à présent, mais également un modèle de langage qui permet de corriger et de parfaire les résultats du modèle acoustique. L’outil KenML représente actuellement l’état d’art dans la création d’un modèle de langage. HuggingFace et Coqui-STT supportent tous les deux cet outil, en combinaison avec le modèle acoustique.

Dans le cas du projet Coqui-STT, dont le code est exécuté dans un conteneur Docker, sans intégration de l’outil KenML, la réalisation du modèle de langage luxembourgeois demande quelques bricolages informatiques. J’ai toutefois réussi à créer un modèle de langage à l’aide de la base de données LB-27072. Ce modèle se présente comme suit et comprend un vocabulaire de 25.000 mots uniques.

kenlm-luxembourgish.scorer  2.2 MB
lm.binary  887,6 kB
vocab-25000.txt  271,5 kB

Comparaison des modèles HuggingFace et Coqui-STT

A la fin de cet exposé il convient de comparer les performances de mon meilleur modèle acoustique Coqui-STT, combiné avec mon modèle de langage KenML, avec celles du modèle pgilles/wavevec2-large-xls-r-LUXEMBOURGISH-with-LM.

A ces fins j’ai sélectionné au hasard cinq échantillons qui ne font pas partie des entraînements effectués sur les deux modèles:

  • wavs/Braun_066.wav,233912,hues de do nach wierder et koum en donnerwieder an et huet emol net gereent
  • wavs/alles_besser-31.wav,168348,déngschtleeschtungen a wueren ginn automatesch och ëm zwee komma fënnef prozent adaptéiert
  • wavs/lb-northwind-0002.wav,82756,an der zäit hunn sech den nordwand an d’sonn gestridden
  • wavs/mbarnig-gsm-75.wav,104952,a wou den deemolege president et war e finnlänner
  • wavs/dictate_dict9-18.wav,182188,dobäi muss de bierger imperativ op allen niveaue méi am mëttelpunkt stoen

Les résultats sont présentés dans le tableau qui suit:

transcription sourcereconnaissance HuggingFaceWERreconnaissance
Coqui-STT
WER
hues de do nach wierder et koum en donnerwieder an et huet emol net gereenthues de do nach wierder et koum en donnerwieder an etude monet gereent0.267hues de do nach wierder et koum en donnerwieder an et huet mol net gereent0.067
déngschtleeschtungen a wueren ginn automatesch och ëm zwee komma fënnef prozent adaptéiertdéng schlecht jungenawouren ginautomatech or zweker a déiert1.0angscht leescht engen a wueren ginn automatesch och am zwee komma fanne prozent adapter0.500
an der zäit hunn sech den nordwand an d’sonn gestriddenan der zäit hunn sech de nocturnen zon gestridden0.4an der zeitung sech e nach finanzen lescht rieden0.700
a wou den deemolege president et war e finnlännerwou den deemolege president war e finnlänner0.222a wou den deemolege president et war finn aner0.222
dobäi muss de bierger imperativ op allen niveaue méi am mëttelpunkt stoendobäi muss de bierger imperativ op alle nivo méi a mëttepunkt stoen0.333do bei muss de bierger imperativ op allen niveaue ma am et e punkt stoen0.500

 

Conclusions

Il semble que le modèle HuggingFace fait moins d’erreurs, mais je pense qu’il faut faire plus de tests pour évaluer correctement la performance des deux modèles. Les résultats me réconfortent de continuer l’exploration du modèle Coqui-STT avec un apprentissage à partir de zéro. Je me propose de suivre les pistes suivantes:

  • étendre ma base de données LB-2880 avec la création d’échantillons supplémentaires à partir d’enregistrements audio de RTL Radio pour parfaire mes modèles Coqui-STT et Coqui-TTS
  • porter le modèle Coqui-STT sur iPhone
  • examiner la possibilité d’extension de ma base de données STT moyennant des échantillons synthétiques créés à l’aide de modèles TTS luxembourgeois
  • explorer l’utilisation de l’augmentation des données et d’échantillons synthétiques sur mon modèle HuggingFace

Application interactive de démonstration

J’ai publié le 31 juillet 2022 une application interactive lb-de-en-fr-pt-COQUI-STT de mon modèle sur la plateforme d’intelligence artificielle Huggingface. Veuillez utiliser un navigateur Chrome pour explorer la démo.

Bibliographie

GAFAM AI

La présente contribution est la suite de mon article récent Le web intelligent. AI est l’abbréviation de Artificial Intelligence, GAFAM est l’acronyme de Google, Apple, Facebook, Amazon et Microsoft. On appele ces cinq entreprises les géants du Web.

Dans l’article précité, on a passé en revue les produits commerciaux d’intelligence artificielle de Google et Amazon. Abstraction faite de Siri, Apple n’a pas encore lancé ses propres services AI pour le public, mais l’entreprise a publié sa première publication scientifique sur l’intelligence artificielle le 22 décembre 2016 (Learning from Simulated and Unsupervised Images through Adversarial Training).

Facebook publie depuis quelques années déjà des articles scientifiques sur l’intelligence artificielle et dispose de son propre site web Facebook Research. Parmi les activités de recherche on trouve Applied Machine Learning, Computer Vision, Data Science, Human Computer Interaction & UX, Natural Language Processing & Speech, Facebook AI Research (FAIR). Facebook n’offre pas encore de services AI en ligne, mais quelques logiciels qui accompagnent ses publications scientifiques sont disponibles en téléchargement sur son site web de recherche.

Parmi les entreprises GAFAM, Microsoft est le pionnier de la recherche technologique. Avec plus de 10.000 publications scientifiques et plus de 800 chercheurs internes dans ses laboratoires, Microsoft est le “leader” incontesté des services d’intelligence artificielle, appelés Microsoft Cognitive Services.

Microsoft a démarré ses services AI en 2015 et présente actuellement une panoplie impressionnante de produits commerciaux afférents. Rien que dans le domaine de la vision, les cinq services en ligne suivants sont à la disposition des développeurs:

Nous allons tester les trois premiers services avec les mêmes photos que celles utilisées pour les tests de Google Cloud Vision et Amazon Rekognition.

Microsoft Computer Vision

Parmi les données fournies par le service Computer Vision, les informations principales sont:

  • une description succincte de la photo
  • des étiquettes (tags) concernant le contenu
  • une catégorie
  • le sexe et l’âge des personnes

tags: indoor, child, baby, sitting, boy, young, toddler, room, high

Au sujet de la photo de Charles et Capucine ci-dessus, la description fournie est “a ltitle boy eating a piece of cake”. La catégorie est “others”, le sexe et l’âge (male et 0 ans pour Charles, female et 3 ans pour Capucine) sont indiqués correctement. Les étiquettes attribuées à la photo sont toutes correctes. Une meilleure description serait toutefois: “a baby boy and a toddler girl are eating a piece of cake”.

En ce qui concerne la photo ci-dessous, la description “person sitting on a bench in a park” est fausse. Le sexe (female) de Charles est également faux, l’âge (1 an), les étiquettes et la catégorie (outdoor) sont correctes.

tags: outdoor, ground, tree, grass, park, way, sidewalk

La prochaine photo s’appelle “a little girl sitting at a table with a cake”. La petite fille est en réalité le petit garçon Charles. Google Vision et Amazon Rekognition avaient le même problème de reconnaître les jouets. La catégorie (people-young) et les étiquettes sont OK. Le visage n’est pas reconnu par l’algorithme de Microsoft, ce qui explique l’absence des informations au sujet du sexe et de l’âge.

tags: table, person, indoor, child, little

La première photo de Thomas ci-après est décrite comme “a baby sitting in front of a cake”. Décidément le service Computer Vision de Microsoft favorise les gâteaux. Rien  à critiquer au sujet du sexe (male), âge (0 ans), catégorie (people-young) et étiquettes. Même la fenêtre à l’arrière-plan est reconnue correctement.

tags: person, indoor, sitting, baby, window, orange, high

La prochaine photo est intitulée “a baby sitting on a table”. Catégorie (people-young), sexe (male), âge (1 an) et étiquettes sont également correctes, abstraction faite du tag “cabinet” qui n’est pas approprié.

tags: cabinet, indoor, person, table, sitting, boy, little, baby, orange, toddler

La dernière photo de Thomas ci-après s’énonce “a young boy laying in the snow”. La catégorie est “people”, l’âge (2 ans) est correcte. Ce qui n’est pas cohérent, c’est l’indication du sexe féminin pour une personne libellée comme petit garçon.  Ce qui dérange en outre, c’est l’étiquette “bed”.

tags: snow, person, outdoor, little, boy, child, yound, laying, bed, toddler

Malgré les quelques erreurs et incohérences, il semble que l’application Computer Vision de Microsoft soit plus performante que Google Vision et Amazon Rekognition.

Microsoft Emotion

Contrairement aux services AI de Google et Amazon, Microsoft propose un service spécifique pour la reconnaissance des émotions dans les visages.

emotions: neutral, neutral

Je partage les avis de “visage neutre” pour Charles et Capucine sur la photo ci-dessus et de “joie” sur le visage de Charles sur la photo ci-dessous.

emotion: happiness

La troisième photo de Charles, où le visage n’est pas reconnu, n’est pas affichée dans l’application “Emotion” de Microsoft.

visage non détecté

emotion: neutral

Sur la photo en haut Thomas affiche effectivement un visage “neutre”, tandis que sur la photo en bas on décèle une légère surprise.

emotions: neutral, surprise

Microsoft Computer Vision est le seul service qui interprète correctement l’émotion de Thomas sur la photo qui suit:”sadness”.

emtion: sadness

Microsoft Face

La comparaison de visages est également un service spécifique dans la famille des produits AI de Microsoft. La comparaison des jumeaux Charles et Thomas est difficile pour les humains et on pardonne à l’application Computer Vision de prétendre que les deux personnes sont identiques, avec une très grande certitude.

Charles et Thomas : même personne

On pardonne moins que Computer Vision nous dit que Capucine et Charles sont la même personne, même s’il y a une petite ressemblance.

Capucine et Charles: même personne

C’est toutefois incompréhensible que Charles et Astor sont identifiés comme les mêmes personnes,

Charles et Astor: même personne

tandis que Capucine qui souffle des bougies sur un gâteau n’est pas reconnue comme Capucine.

Capucine et Capucine: personnes différentes

Marco n’est pas reconnu non plus comme même personne sur deux photos ayant un écart d’âge de 40 ans. Décidément le service “Microsoft Face” doit encore faire beaucoup de séances de “deep learning” pour se perfectionner. Heureusement les outils afférents pour parfaire la reconnaissance des visages fait partie du service en ligne “Face” de Microsoft.

Marco et Marco: 40 ans d’écart > personnes différentes

Google Vision n’offre pas encore un service public de reconnaissance des visages. Si on compare l’application Microsoft Face avec le service de reconnaissance faciale d’Amazon, il faut dire que ce dernier a plusieurs longueurs d’avance. Les services Microsoft Cognition offrent toutefois des options de “training” pour parfaire la reconnaissance des visages, ce qui manque encore pour Amazon Rekognition.

Le web intelligent

Dernière mise à jour: 19 mars 2017

Chronologie Internet

Il y a presque 4 ans, j’avais publié sur mon blog une proposition de diviser la chronologie du web (timeline) en neuf époques. J’avais opté pour le nom de web intelligent (web 3.5) pour caractériser la période de début 2015 à mi 2017.

Pour moi, le web intelligent a les compétences suivantes:

  • il parle notre langue
  • il lit notre écriture
  • il comprend notre langage et reconnaît notre voix
  • il reconnaît notre visage et décode nos émotions
  • il interprète des images et scènes vidéo
  • il a des connaissances vastes sur tous les sujets
  • il prend des décisions autonomes
  • il est capable d’apprendre afin de parfaire ses compétences

Les technologies qui sont à la base de ces compétences existent depuis des années, voire des décennies. Ils ont fait l’objet de recherches, de  tests, de prototypes, d’applications innovantes et de produits commerciaux, mais le plus souvent d’une façon isolée, pour une seule compétence.

Le GPS nous parle dans la voiture, Siri et Alexa répondent à nos questions sur le mobile, Google Photo et Facebook reconnaissent les visages sur nos photos, Wikipedia sait tout (ou presque), des outils d’aide à la décision sont omniprésents et les réseaux neuraux permettent aux machines d’apprendre en profondeur (deep learning).

Ce qui a changé en 2016, c’est le fait que toutes ces technologies ont été assemblées par Google et par Amazon Web Services (AWS) dans des produits commerciaux d’intelligence artificielle qui sont maintenant à la disposition des développeurs du monde entier.

Le web 3.5 est donc devenu réalité.

Google Cloud Platform

Google est bien connu pour son moteur de recherche, sa plateforme vidéo Youtube et ses services de traduction. Depuis 2011, Google offre aux programmeurs et sociétés d’héberger leurs propres applications sur la même infrastructure que celle qu’elle utilise en interne. Ce service est appelé Google Cloud Platform et se compose d’une famille de produits, chacun comportant une interface web, un outil de lignes de commande, et une interface de programmation applicative REST. Parmi ces produits on distingue:

  • Google App Engine
  • Google Storage
  • Goggle Compute Engine
  • Google Translate

L’ensemble des produits et services est décrit sur la page web cloud.google.com.

En mars 2016, Google a annoncé le lancement de la famille Cloud Machine Learning service mainstream. Les services suivants font partie, entre autres, de cette famille:

  • Cloud ML : Large Scale Machine Learning Service
  • Cloud Natural Language API : Powerful Text Analysis
  • Cloud Speech API : Powerful Speech Recognition in 80 languages
  • Cloud Translate API : Fast, Dynamic Translation
  • Cloud Vision API : Powerful Image Analysis

Google Cloud Vision

De prime abord, je me suis intéressé pour le nouveau service Cloud Vision. Dans le passé j’avais déjà effectué des tests avec différentes applications de reconnaissance faciale et de lecture de textes. Les contributions afférentes sont disponibles sur mon blog.

Pour faire des tests, j’ai pris au hasard quelques photos de mes petits-enfants.

Les résultats de Google Vision sont affichés dans plusieurs onglets:

  • Faces : reconnaissance de visages et d’émotions
  • Labels : reconnaissance de scènes et d’objets
  • Text : lecture de caractères et de textes
  • Colors : classification des couleurs dominantes
  • Safe Search : contenus avec nudité, violence, haine ou sujets médicaux
  • JSON Response : ensemble détaillé des données en format JSON

Les résultats ont été assemblés dans une seule image, par copie-collage, pour donner une meilleure vue globale.

Google Vision ne fournit pas un service de reconnaissance des personnes comme dans Google Photo, mais se limite à détecter les visages et à interpréter les émotions. Dans la figure ci-dessus les informations pour les deux visages sont indiquées en haut à droite (Charles) et en bas à gauche (Capucine). Les étiquettes (label)  pour la scène sont affichées en bas au milieu, le texte reconnu se trouve en bas à droite.

Les termes reconnus “Carla” et “Charlie” sont les noms de vaches qui figurent sur la nappe de la table, comme on peut le voir sur l’agrandissement ci-dessous.

Un exemple de l’onglet “JSON Response” est présenté ci-après. Tous les détails de l’analyse sont fournis dans cette structure JSON.

En ce qui concerne l’analyse proprement dite, Google Vision ne détecte pas d’émotions sur les visages des deux enfants, sauf une légère surprise sur le visage de Charles. Hormis la reconnaissance de personnes (toddler, child),  Il n’y a guère d’informations sur le contexte.

Pour les images suivantes, seuls les résultats “Faces” et “Labels” sont présentés dans les figures montées.
 Google Vision voit de la joie dans le visage de Charles qui se trouve dehors, dans une sorte de jardin, avec des feuilles, en automne. Bonne interprétation.
 Google Vision estime que Charles fête son anniversaire à Noël. En réalité il joue en février 2016 avec du Lego. Echec.
L’activity-Center Fisher-Prize de Thomas fait penser Google Vision à un anniversaire et à de la nourriture.

Google Vision considère que Thomas est un peu surpris et combine les activités jouer et manger. Bien.

Thomas semble être en colère et se trouve dans la neige, en hiver et il a froid. Analyse correcte.

Amazon Web Services

Tout le monde connaît Amazon en tant que fournisseur en ligne de livres et d’autres objets non périssables, mais peu de personnes savent que Amazon est un des plus grand fournisseurs mondiaux de services informatiques sous le nom de Amazon Web Services (AWS). Tout comme Google, Amazon profite de l’infrastructure nécessaire pour ses propres besoins pour offrir de la capacité et des services à des tiers. Lancé en 2006, AWS se classe aujourd’hui au premier rang des fournisseurs Cloud avec une part de marché de 31%, devant Microsoft (11%) et IBM (7%).

J’utilise les services d’AWS depuis octobre 2008.

Le 30 novembre 2016, Werner Vogels, le CTO (Chief Technological Officer) de Amazon, annonçait sur son blog All Things Distributed le lancement des nouveaux services d’intelligence artificielle (AmazonAI) de AWS.

Amazon AI

Le but d’Amazon AI est d’apporter une intelligence artificielle puissante à tous les développeurs. La gamme des services Amazon AI se compose de:

  • Amazon Lex : concevoir des interfaces conversationnelles ayant recours à la voix et au texte, via les mêmes technologies d’apprentissage approfondi que celles utilisées par Alexa
  • Amazon Rekognition : reconnaissance d’image basée sur l’apprentissage approfondi
  • Amazon Polly : convertir un texte en voix numérique
  • Amazon Machine Learning : un service d’apprentissage automatique évolutif pour les développeurs

Chez Amazon AI, je me suis également intéressé d’abord pour Amazon Rekognition. Du premier coup j’ai vu des ressemblances avec la technologie Orbeus ReKognition que j’avais exploré en 2014. Dans la suite j’ai trouvé sur le net un article de Bloomberg relatant que Amazon a acquis en automne 2015  la startup Orbeus Inc., mais sans en faire une annonce officielle.

Amazon Rekognition ne fournit pas seulement des informations sur les émotions détectées sur les visages, mais également des renseignements sur le sexe et sur des accessoires comme lunettes, barbes, moustaches. Dans la détection des scènes et objets on reçoit en général plus d’étiquettes qu’avec Google Vision. Amazon Rekognition n’offre toutefois pas une reconnaissance intégrée de textes.

Les résultats des tests effectués avec les mêmes six photos de mes petits-enfants sont présentés ci-après. On peut donc les comparer avec ceux fournis par Google Vision.

Charles est identifié comme une fille, ce qui n’est pas correct. Le décor est reconnu correctement comme maison et même le Dudu de Capucine est associé correctement à une courtepointe (quilt, towel).

La scène est considérée comme un labyrinthe, une arène ou un amphithéâtre. Il n’y a pas de notion de nature ou de bois.  Google a fait mieux. Amazon AI est toutefois d’accord avec Google Vision que Charles sourit.

Le système reconnaît des personnes, des jouets, une chaise et un coussin dans un décor de maison. Il confond toutefois des jouets avec de la nourriture. Google Vision n’a pas fait mieux.

Le centre d’activités Fisher-Price de Thomas est identifié comme un gâteau d’anniversaire, ou un dessert, en tout cas quelque chose pour manger. Google Vision a fait les mêmes réflexions.

Dans cette scène, le système détecte correctement qu’il s’agit d’objets pour boire et manger. Thomas, plus âgé que sur la précédente photo, est reconnu maintenant comme un garçon qui ne rit pas, mais qui paraît surpris.

La scène n’est pas reconnue comme activité dans la neige et le système interprète le pleur de Thomas comme un grand sourire. Echec complet.

Amazon Face Comparison

Le service Amazon Rekognition comprend l’application Face Comparison (comparaison faciale) qui est très performante. A partir d’une photo avec un visage de référence, le service Face Comparison fournit des taux de ressemblance des visages qui figurent sur une photo de comparaison. La série des figures ci-dessous montre quelques exemples:

Thomas est reconnu avec une fiabilité de 93%; similitude avec Charles (83%) et Capucine (76%).

Charles n’est pas reconnu, mais il y a similitude de 74,9% avec Thomas et de 55,1% avec Capucine.

Capucine est reconnue avec une fiabilité de 91%. Il n’y a pas de ressemblance avec les autres.

Marco est reconnu avec une fiabilité de 92%. Il n’y a pas de similitude détectée avec les enfants.

Astor, qui ne figure pas sur la photo à droite, ne ressemble à personne sur cette photo

Amazon fournit également un service de reconnaissance faciale. Il s’agit d’un processus d’identification et de vérification de l’identité d’une personne, en recherchant son visage dans un répertoire d’images de visages. Un répertoire d’images de visages est un index de recherche de vecteurs de caractéristiques faciales. AWS offre plusieurs interfaces (API) pour gérer un tel répertoire et pour ajouter ou supprimer des visages de référence dans le répertoire.

En ce temps Google Vision ne supporte pas encore la reconnaissance des visages dans son API public. Il n’y a donc pas moyen de comparer les performances avec Amazon Rekognition.

Dessins de Capucine

Pour pousser Google Vision et Amazon Rekognition aux limites, j’ai soumis deux dessins récents de ma petite-fille Capucine (4 ans et demi) et une des premières ébauches d’écriture de son nom aux deux systèmes.

Dessins et texte de Capucine à l’âge de 4 ans et demi

Les résultats fournis par Google Vision et Amazon Rekognition ont été assemblés chaque fois dans une seule image.

Le dessin du bonhomme est reconnu par Google Vision (résultats au milieu) comme cartoon et oeuvre d’art, tandis que Amazon Rekognition voit une signature ou un insecte. Aucun des deux systèmes reconnaît une figure humaine.
Les visages avec des boucles d’oreille qui ornent le contour de la main de Capucine ne sont pas identifiés comme tels par aucun des systèmes. Ce sont des lignes, des dessins, des formes ou diagrammes. Amazon Rekognition est au moins d’avis qu’il s’agit de l’art.
En ce qui concerne le nom de Capucine, Google Vision estime qu’il s’agit d’un texte, mais n’est pas en mesure de le lire. L’OCR (optical character recognition) ne fait pas encore partie du produit Amazon Rekognition. Ce système détecte toutefois qu’il s’agit de textes, de caractères, d’une signature ou d’un autographe.

Conclusions

Les performances des deux systèmes Google Vision et Amazon Rekognition sont impressionnantes. Globalement Google Vision semble être plus fiable dans ses analyses en comparaison avec Amazon Rekognition, abstraction faite de la reconnaissance faciale d’Amazon qui est unique.

Bien sûr il y a encore un besoin d’amélioration pour les deux systèmes. Les services Machine Learning des deux fournisseurs permettent de mieux adapter la reconnaissance d’objets et de scènes à son propre environnement, en formant les systèmes moyennant un échantillon d’images et de photos d’apprentissage, avec des étiquettes (labels) sélectionnées manuellement et des étiquettes corrigées en cas d’erreur.

Google profite d’ailleurs sur son site de démonstration d’une variante de son système reCAPTCHA pour exclure les robots à l’utilisation de sa plateforme Cloud. Les réponses fournies par les humains sont utilisées pour parfaire Google Vision.

Google CAPTCHA: Completely Automated Public Turing test to tell Computers and Humans Apart

Face Recognition Tests

Referring to my recent post about Face Recognition Systems, I did some trials with my “About” photo. Here are the results of my Face Recognition Tests :

Animetrics

Face Detection Tests : Animetrics

Face Detection Tests : Animetrics

{"images": [
{"time": 4.328,
"status": "Complete",
"url": "http://www.web3.lu/download/Marco_Barnig_529x529.jpg",
"width": 529,
"height": 529,
"setpose_image": "http://api.animetrics.com/img/setpose/d89864cc3aaab341d4211113a8310f9a.jpg",
"faces": [
{"topLeftX": 206,
"topLeftY": 112,
"width": 82,
"height": 82,
"leftEyeCenterX": 227.525,
"leftEyeCenterY": 126.692,
"rightEyeCenterX": 272.967,
"rightEyeCenterY": 128.742,
"noseTipX": 252.159,
"noseTipY": 158.973,
"noseBtwEyesX": 251.711,
"noseBtwEyesY": 126.492,
"chinTipX": -1,
"chinTipY": -1,
"leftEyeCornerLeftX": 219.005,
"leftEyeCornerLeftY": 126.308,
"leftEyeCornerRightX": 237.433,
"leftEyeCornerRightY": 127.85,
"rightEyeCornerLeftX": 262.995,
"rightEyeCornerLeftY": 129.004,
"rightEyeCornerRightX": 280.777,
"rightEyeCornerRightY": 129.094,
"rightEarTragusX": -1,
"rightEarTragusY": -1,
"leftEarTragusX": -1,
"leftEarTragusY": -1,
"leftEyeBrowLeftX": 211.478,
"leftEyeBrowLeftY": 120.93,
"leftEyeBrowMiddleX": 226.005,
"leftEyeBrowMiddleY": 117.767,
"leftEyeBrowRightX": 241.796,
"leftEyeBrowRightY": 120.416,
"rightEyeBrowLeftX": 264.142,
"rightEyeBrowLeftY": 121.101,
"rightEyeBrowMiddleX": 278.625,
"rightEyeBrowMiddleY": 119.38,
"rightEyeBrowRightX": 290.026,
"rightEyeBrowRightY": 124.059,
"nostrilLeftHoleBottomX": 243.92,
"nostrilLeftHoleBottomY": 168.822,
"nostrilRightHoleBottomX": 257.572,
"nostrilRightHoleBottomY": 170.683,
"nostrilLeftSideX": 236.867,
"nostrilLeftSideY": 163.555,
"nostrilRightSideX": 262.073,
"nostrilRightSideY": 165.049,
"lipCornerLeftX": -1,
"lipCornerLeftY": -1,
"lipLineMiddleX": -1,
"lipLineMiddleY": -1,
"lipCornerRightX": -1,
"lipCornerRightY": -1,
"pitch": -6.52624,
"yaw": -6.43,
"roll": 2.35988
}]}]}

APICloudMe

Face Recognition Tests : APICloudMe FaceRect and FaceMark

Face Recognition Tests : APICloudMe FaceRect and FaceMark

{"faces" : [
{"orientation" : "frontal",
"landmarks" : [
{"x" : 193,"y" : 125},
{"x" : 191,"y" : 145},
{"x" : 192,"y" : 163},
{"x" : 196,"y" : 178},
{"x" : 206,"y" : 194},
{"x" : 218,"y" : 204},
{"x" : 229,"y" : 206},
{"x" : 243,"y" : 209},
{"x" : 259,"y" : 206},
{"x" : 268,"y" : 202},
{"x" : 278,"y" : 195},
{"x" : 287,"y" : 182},
{"x" : 292,"y" : 167},
{"x" : 296,"y" : 150},
{"x" : 297,"y" : 129},
{"x" : 284,"y" : 112},
{"x" : 279,"y" : 108},
{"x" : 268,"y" : 110},
{"x" : 263,"y" : 116},
{"x" : 270,"y" : 113},
{"x" : 277,"y" : 111},
{"x" : 214,"y" : 111},
{"x" : 223,"y" : 107},
{"x" : 234,"y" : 110},
{"x" : 238,"y" : 115},
{"x" : 232,"y" : 113},
{"x" : 223,"y" : 110},
{"x" : 217,"y" : 127},
{"x" : 228,"y" : 121},
{"x" : 236,"y" : 129},
{"x" : 227,"y" : 131},
{"x" : 227,"y" : 126},
{"x" : 280,"y" : 129},
{"x" : 271,"y" : 123},
{"x" : 262,"y" : 130},
{"x" : 271,"y" : 133},
{"x" : 271,"y" : 127},
{"x" : 242,"y" : 128},
{"x" : 238,"y" : 145},
{"x" : 232,"y" : 157},
{"x" : 232,"y" : 163},
{"x" : 247,"y" : 168},
{"x" : 262,"y" : 164},
{"x" : 262,"y" : 158},
{"x" : 258,"y" : 146},
{"x" : 256,"y" : 129},
{"x" : 239,"y" : 163},
{"x" : 256,"y" : 164},
{"x" : 221,"y" : 179},
{"x" : 232,"y" : 178},
{"x" : 240,"y" : 179},
{"x" : 245,"y" : 180},
{"x" : 251,"y" : 180},
{"x" : 259,"y" : 180},
{"x" : 269,"y" : 182},
{"x" : 261,"y" : 186},
{"x" : 253,"y" : 189},
{"x" : 245,"y" : 189},
{"x" : 236,"y" : 187},
{"x" : 229,"y" : 184},
{"x" : 235,"y" : 182},
{"x" : 245,"y" : 184},
{"x" : 255,"y" : 184},
{"x" : 254,"y" : 183},
{"x" : 245,"y" : 183},
{"x" : 235,"y" : 182},
{"x" : 245,"y" : 183},
{"x" : 249,"y" : 160}
]}],
"image" : {
"width" : 529,
"height" : 529
}}

Betaface API

Image ID : 65fe585d-e565-496e-ab43-bcfdc18c7918
Faces : 2

Face detection Test : Betaface API

Face Recognition Tests : Betaface API

hair color type: red (24%), gender: male (52%), age: 49 (14%), ethnicity: white (57%), smile: yes (15%), glasses: yes (48%), mustache: yes (46%), beard: yes (35%)
500: HEAD Height/Width level parameter (POS = long narrow face NEG = short wide face)(min -2 max 2): 1
501: HEAD TopWidth/BottomWidth level parameter (POS = heart shape NEG = rectangular face)(min -2 max 2):0
502: NOSE Height/Width level parameter (NEG = thinner) (min -2 max 2) : 2
503: NOSE TopWidth/BottomWidth level parameter (NEG = wider at the bottom) (min -2 max 2) : 1
504: MOUTH Width level parameter (min -2 max 2) : 1
505: MOUTH Height level parameter (NEG = thin) (min -2 max 2) : 1
521: MOUTH Corners vertical offset level parameter (NEG = higher) (min -2 max 2) : -2
506: EYES Height/Width level parameter (NEG = thinner and wider, POS = more round) (min -2 max 2) : -1
507: EYES Angle level parameter (NEG = inner eye corners moved towards mouth) (min -2 max 2) : 1
517: EYES closeness level parameter (NEG = closer) (min -2 max 2) : 0
518: EYES vertical position level parameter (NEG = higher) (min -2 max 2) : 0
508: HAIRSTYLE Sides thickness level parameter (min 0 max 3) : 0
509: HAIRSTYLE Hair length level parameter (min 0 max 5) : 0
510: HAIRSTYLE Forehead hair presence parameter (min 0 max 1) : 1
511: HAIRSTYLE Hair Top hair amount level parameter (min 0 max 4) : 3
512: FACE HAIR Mustache level parameter (min 0 max 2) : 0
513: FACE HAIR Beard level parameter (min 0 max 2) : 0
514: GLASSES presence level parameter (min 0 max 1) : 0
515: EYEBROWS thickness level parameter (min -2 max 2) : -2
516: EYEBROWS vertical pos level parameter (POS = closer to the eyes) (min -2 max 2) : -2
520: EYEBROWS Angle level parameter(NEG = inner eyebrows corners moved towards mouth)(min -2 max 2) :-2
519: TEETH presence level parameter (min 0 max 1) : 1
522: NOSE-CHIN distance level parameter (min -2 max 2) : 0
620756992: face height/face width ratio / avg height/width ratio : 1.0478431040781575
620822528: face chin width/face width ratio / avg height/width ratio : 1.0038425243863847
620888064: face current eyes distance/ avg eyes distance ratio : 1.0104771666577224
620953600: eyes vertical position - avg position, minus - higher : -0.00089347261759175321
621019136: distance between chin bottom and low lip / avg distance : 0.97106500562603393
621084672: distance between nose bottom and top lip / avg distance : 1.0075242288018134
621150208: distance between nose top and bottom / avg distance : 1.0619860919447868
621215744: distance between nose left and right / avg distance : 1.0426301239394231
621281280: distance between left mouth corner and right mouth corner / avg distance : 1.0806991515139102
621346816: eyebrows thichkness / avg thichkness : 0.83331489266473235
621412352: ratio (low nose part width / top nose part width) / avg ratio : 0.9717897529241869
621477888: eye height/width ratio / avg height/width ratio : 0.9611420163590253
621543424: width of the chin / avg width of the chin : 0.96738062415147075
621608960: angle of the eyes in degrees - avg angle. Negative angle mean inner eye corners moved towards mouth from average position : -0.35247882153940435
621674496: distance between eyebrows and eyes / avg distance : 0.88418599076781756
621740032: face width / avg width ratio : 0.96367766920692888
621805568: skin color (Weight) (min 0 max 1) : 1.340999960899353
621871104: skin color (H) (min 0 max 180) : 7
621936640: skin color (S) (min 0 max 255) : 81
622002176: skin color (V) (min 0 max 255) : 208
622067712: skin color (R) (min 0 max 255) : 208
622133248: skin color (G) (min 0 max 255) : 157
622198784: skin color (B) (min 0 max 255) : 142
622264320: mustache color if detected (Weight) (min 0 max 1) : 0
622329856: mustache color if detected (H) (min 0 max 180) : 0
622395392: mustache color if detected (S) (min 0 max 255) : 0
622460928: mustache color if detected (V) (min 0 max 255) : 0
622526464: mustache color if detected (R) (min 0 max 255) : 0
622592000: mustache color if detected (G) (min 0 max 255) : 0
622657536: mustache color if detected (B) (min 0 max 255) : 0
622723072: beard color if detected (Weight) (min 0 max 1) : 0
622788608: beard color if detected (H) (min 0 max 180) : 0
622854144: beard color if detected (S) (min 0 max 255) : 0
622919680: beard color if detected (V) (min 0 max 255) : 0
622985216: beard color if detected (R) (min 0 max 255) : 0
623050752: beard color if detected (G) (min 0 max 255) : 0
623116288: beard color if detected (B) (min 0 max 255) : 0
623181824: weight of teeth color (Weight) (min 0 max 1) : 0.4440000057220459
623247360: glasses detection (weight floating value, related to thickness of rim/confidence) (min 0.03 max 1) : 0.065934065934065936
623312896: color of the hair area (Weight) (min 0 max 1) : 0.23899999260902405
623378432: color of the hair area (H) (min 0 max 180) : 4
623443968: color of the hair area (S) (min 0 max 255) : 151
623509504: color of the hair area (V) (min 0 max 255) : 130
623575040: color of the hair area (R) (min 0 max 255) : 130
623640576: color of the hair area (G) (min 0 max 255) : 63
623706112: color of the hair area (B) (min 0 max 255) : 53
673513472: eyebrows angle. Negative angle mean inner eyebrow corners moved towards mouth from average position : 0.086002873281683989
673579008: mouth corners Y offset - avg offset : -0.12499242147802289
673644544: mouth height / avg height : 1.1755344432588537
673710080: nose tip to chin distance / avg distance : 1.0093704038280917

BioID

Face Recognition Tests : BioID

Face Recognition Tests : BioID

<?xml version="1.0" encoding="utf-16"?>
<OperationResults xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.bioid.com/2012/02/BWSMessages">
  <JobID>955410d9-eb2c-43db-b3ca-deeedcd665af</JobID>
  <Command>QualityCheck</Command>
  <Succeeded>true</Succeeded>
  <Samples>
    <Sample Trait="Face" Suitable="true">
      <Errors>
        <Error>
          <Code>ImageTooSmall</Code>
          <Message>The part of the image containing the found face is too small.</Message>
          <Details>The found face (with an eye-distance of 43 pixels) does not have the required eye-distance of at least 240 pixels.</Details>
        </Error>
        <Error>
          <Code>ImageTooSmall</Code>
          <Message>The part of the image containing the found face is too small.</Message>
          <Details>The cropped face image (with 146 x 188 pixels) does not have the minimum expected resolution of 827 x 1063 pixels.</Details>
        </Error>
        <Error>
          <Code>FaceAsymmetry</Code>
          <Message>It seems that the face of the found person is somehow asymmetric, maybe due to bad illumination and/or due to a wrong pose.</Message>
          <Details>An asymmetry of 88.20 was calculated, where only a value up to 50.00 is allowed.</Details>
        </Error>
        <Error>
          <Code>MissingTimeStamp</Code>
          <Message>The image does not have any tag attached which could be used to find out when it was taken. It cannot be assured that the image is not older than 183 days.</Message>
          <Details />
        </Error>
        <Error>
          <Code>ImageOverExposure</Code>
          <Message>The image is over-exposed, i.e. it has too many very light pixels.</Message>
          <Details>The amount of very bright pixels is 1.34%, where only 1.00% are allowed.</Details>
        </Error>
      </Errors>
      <Tags>
        <RightEye X="52.174" Y="84.108" />
        <LeftEye X="95.448" Y="86.173" />
      </Tags>
    </Sample>
  </Samples>
  <Statistics>
    <ProcessingTime>00:00:01.3642947</ProcessingTime>
    <TotalServiceTime>00:00:01.6941376</TotalServiceTime>
  </Statistics>
</OperationResults>

BiometryCloud

No demo app available.

HP Labs Multimedia Analytical Platform

Face Recognition Tests : HP Labs Multimedia

Face Recognition Tests : HP Labs Multimedia Analytical Platform

{
"pic":{
"id_pic":"8f2cb88987e9e6b88813c5c17599204a25a8d63b",
"height":"529",
"width":"529"
},
"face":[{
"id_face":"2500002",
"id_pic":"8f2cb88987e9e6b88813c5c17599204a25a8d63b",
"bb_left":"209",
"bb_top":"109",
"bb_right":"290",
"bb_bottom":"190"
}]}

Lambda Labs Face

Face Recognition Tests : Lambda Labs

Face Recognition Tests : Lambda Labs

{
"status": "success",
"images": ["http://www.web3.lu/download/Marco_Barnig_529x529.jpg"],
"photos": [{"url": "http://www.web3.lu/download/Marco_Barnig_529x529.jpg",
"width": 529,
"tags": [
{"eye_left": {"y": 128,"x": 269},
"confidence": 0.978945010372561,
"center": {"y": 143,"x": 250},
"mouth_right": {"y": 180,"x": 267},
"mouth_left": {"y": 180,"x": 220},
"height": 128,"width": 128,
"mouth_center": {"y": 180,"x": 243.5},
"nose": {"y": 166,"x": 250},
"eye_right": {"y": 129,"x": 231},
"tid": "31337",
"attributes": [{"smile_rating": 0.5,"smiling": false,"confidence": 0.5},
{"gender": "male","confidence": 0.6564017215167235}],
"uids": [
{"confidence": 0.71,"prediction": "TigerWoods","uid": "TigerWoods@CELEBS"},
{"confidence": 0.258,"prediction": "ArnoldS","uid": "ArnoldS@CELEBS"}]}],
"height": 529
}]}

Orbeus ReKognition

Face Recognition Tests : Orbeus ReKognition

Face Recognition Tests : Orbeus ReKognition

{
"url" : "base64_ZNlBfC.jpg",
"face_detection" : [{
"boundingbox" : {
"tl" : {"x" : "188.46","y" : "80.77"},
"size" : {"width" : "126.15","height" : "126.15"}},
"confidence" : "0.98",
"name" : "mark_zuckerberg:0.37,obama:0.33,brad_pitt:0.16,",
"matches" : [{"tag" : "mark_zuckerberg","score" : "0.37"},
{"tag" : "obama","score" : "0.33"},
{"tag" : "brad_pitt","score" : "0.16"}],
"eye_left" : {"x" : "229.6","y" : "125.6"},
"eye_right" : {"x" : "272.5","y" : "127.7"},
"nose" : {"x" : "252.4","y" : "161.5"},
"mouth l" : {"x" : "226.9","y" : "173"},
"mouth_l" : {"x" : "226.9","y" : "173"},
"mouth r" : {"x" : "266.1","y" : "175.6"},
"mouth_r" : {"x" : "266.1","y" : "175.6"},
"pose" : {"roll" : "1.68","yaw" : "19.83","pitch" : "-11.7"},
"b_ll" : {"x" : "211.6","y" : "118"},
"b_lm" : {"x" : "226.7","y" : "113.2"},
"b_lr" : {"x" : "242.2","y" : "116.1"},
"b_rl" : {"x" : "263.5","y" : "117.1",
"b_rm" : {"x" : "277.8","y" : "115.5"},
"b_rr" : {"x" : "290.5","y" : "120"},
"e_ll" : {"x" : "221.5","y" : "125.7"},
"e_lr" : {"x" : "237.4","y" : "126.7"},
"e_lu" : {"x" : "229.9","y" : "122.5"},
"e_ld" : {"x" : "229.4","y" : "128.1"},
"e_rl" : {"x" : "265.3","y" : "128.2"},
"e_rr" : {"x" : "279.5","y" : "128.4"},
"e_ru" : {"x" : "272.5","y" : "124.8"},
"e_rd" : {"x" : "272.5","y" : "130.1"},
"n_l" : {"x" : "240.3","y" : "161.2"},
"n_r" : {"x" : "259.7","y" : "163.8"},
"m_u" : {"x" : "248.2","y" : "174.2"},
"m_d" : {"x" : "246.3","y" : "189.3"},
"race" : {"white" : "0.56"},
"age" : "48.28",
"glasses" : "1",
"eye_closed" : "0",
"mouth_open_wide" : "0.77",
"sex" : "0.96"},
{"boundingbox" : {
"tl" : {"x" : "19.23","y" : "221.54"},
"size" : {"width" : "160","height" : "160"}},
"confidence" : "0.07",
"name" : "obama:0.03,brad_pitt:0.02,jim_parsons:0.01,",
"matches" : [
{"tag" : "obama","score" : "0.03"},
{"tag" : "brad_pitt","score" : "0.02"},
{"tag" : "jim_parsons","score" : "0.01"}
],
"eye_left" : {"x" : "93.7","y" : "257.9"},
"eye_right" : {"x" : "128.4","y" : "309.1"},
"nose" : {"x" : "95.8","y" : "299.5"},
"mouth l" : {"x" : "58.9","y" : "306.9"},
"mouth_l" : {"x" : "58.9","y" : "306.9"},
"mouth r" : {"x" : "94.1","y" : "350.9"},
"mouth_r" : {"x" : "94.1","y" : "350.9"},
"pose" : {"roll" : "59.26","yaw" : "-11.22","pitch" : "9.96"},
"b_ll" : {"x" : "102.4","y" : "227.3"},
"b_lm" : {"x" : "114.9","y" : "240.8"},
"b_lr" : {"x" : "119.5","y" : "259.5"},
"b_rl" : {"x" : "133.9","y" : "282.1"},
"b_rm" : {"x" : "147.7","y" : "295.7"},
"b_rr" : {"x" : "153.8","y" : "312.3"},
"e_ll" : {"x" : "88.2","y" : "248.3"},
"e_lr" : {"x" : "100.2","y" : "267.6"},
"e_lu" : {"x" : "94.2","y" : "257.4"},
"e_ld" : {"x" : "92.7","y" : "258.4"},
"e_rl" : {"x" : "122.3","y" : "299.1"},
"e_rr" : {"x" : "134.7","y" : "319.7"},
"e_ru" : {"x" : "129.5","y" : "308.5"},
"e_rd" : {"x" : "127.2","y" : "309.6"},
"n_l" : {"x" : "78.7","y" : "298.6"},
"n_r" : {"x" : "97.8","y" : "318.4"},
"m_u" : {"x" : "80.4","y" : "321.2"},
"m_d" : {"x" : "72.6","y" : "328.5"},
"race" : {"black" : "0.63"},
"age" : "23.07",
"glasses" : "0.98",
"eye_closed" : "0.9",
"mouth_open_wide" : "0.46",
"sex" : "0.66"
}],
"ori_img_size" : {
"width" : "529",
"height" : "529"
},
"usage" : {
"quota" : "-10261829",
"status" : "Succeed.",
"api_id" : "4321"
}
}

Sky Biometry

Face Recognition Tests : SkyBiometry

Face Recognition Tests : SkyBiometry

face: (85%)
gender: male (86%)
smiling: true (100%)
glasses: true (57%)
dark glasses: false (21%)
eyes: open (80%)
mood: angry (69%)
N: 0%
A: 69%
D: 40%
F: 0%
H: 23%
S: 0%
SP: 21%
roll: 3
yaw: -14

Face Recognition Systems

Last update : December 15, 2014

Face Recognition Definitions

A face recognition system is a computer application for automatically identifying or verifying a person from a digital image or from a video frame. One of the ways to do this is by comparing selected facial features (landmarks) from the image with a facial database.

Face recognition is used in biometrics, video surveillance, human computer interfaces and image database management (digital photo albums).

The prior step to face recognition is the accurate detection of human faces in arbitrary scenes. Face detection is the related computer technology that determines the locations and sizes of human faces in digital images. This is an effortless task for humans, but requires a great effort for computers.

Face detection is followed by normalization and extraction which leads to the final recognition. A next step could be the interpretation of the face. This understanding of an individual’s face is called face perception. The proportions and expressions of the human face are important to identify origin, emotions, health qualities, social information and accessories (glasses, beards, …).

Face detection is a general case of face localization and a specific case of object-class detection. In object-class detection, the task is to find the locations and sizes of all objects in an image that belong to a given class. Some digital cameras use face detection for autofocusor to take automatically a second picture if someone closed his eyes during exposure. Today face detection is a standard feature in various image edition programs, for instance in Adobe Photoshop Elements, Synology Photostation, Apple iPhoto, …

Face Recognition Promotion

In the years 2000, 2002, 2006, 2012 and 2013, the US National Institute of Standards and Technology (NIST), an agency of the U.S. Department of Commerce, organized a Face Vendor Recognition Test (FRVT). These tests provided independent government evaluations of commercially available and prototype face recognition technologies. These evaluations are designed to provide U.S. Government and law enforcement agencies with information to assist them in determining where and how facial recognition technology can best be deployed. In addition, FRVT results help identify future research directions for the face recognition community.

The US government conducted two other projects to promote and advance face recognition technologies. The FERET program started in September 1993 and ended in 1997. The Face Recognition Grand Challenge (FRGC) ran from May 2004 to March 2006. The test databases and results of FRVT and FRGC are still available for researchers.

There are other actors who promote face recognition technologies. The IEEE conference on Automatic Face and Gesture Recognition is the premier international forum for research in image and video- based face, gesture, and body movement recognition. Its broad scope includes advances in fundamental computer vision, pattern recognition, computer graphics, and machine learning techniques relevant to face, gesture, and body action, new algorithms, and analysis of specific applications. The Eleventh conference (FG 2015) will be held in Ljubljana, Slovenia in may 2015.

Another notable event in the domain of face recognition was the takeover in June 2012 by Facebook of Face.com Inc, an Israel-based technology company that developed a platform for efficient and accurate facial recognition in photos uploaded via web and mobile applications. One month later, the face.com API was shut down, which left some 45.000 developers stranded, and saw the developer community demanding an open source alternative. Six years earlier, Google acquired Neven Vision, whose technology for face recognition was integrated in Picasa Web Albums in September 2008.

Face Recognition Technologies

Face recognition is based on three approaches :

  • geometric : this approach is based on geometrical relationship between facial landmarks (distances and angles between eyes, nose, mouth , eyebrows, chin, jaw, cheekbones,  …).
  • photometric : this is a statistical approach that distills an image into values and compares the values with templates to eliminate variance.
  • 3D : three-dimensional (3D) face recognition  is based on distinctive features such as curves of eye sockets, chin, nose, tissues and cheekbones. This approach allows to identify a face from a range of viewing angles, including a profile view.

Popular recognition algorithms include :

Web based solutions

Animetrics : FaceR Identity Management System

Animetrics develops next-generation 2D-to-3D face recognition, identity management and biometrically enabled search engine products for authentication and search which links photographic clouds, cameras, video and image stores via Web-service based facial search engines. Animetrics is poised for strong growth in the Government market for mobile and intelligence, and the Commercial & Consumer markets for mobile, social networking and security by revolutionizing human interfaces to computing devices and social media.

APICloud.Me : FaceRect and FaceMark

FaceRect is a powerful and completely free API for face detection. FaceMark is a powerful API for facial feature detection. It finds 68 points for a frontal face and 35 for a profile one. FaceMark detects landmarks for faces on the image specified by URL or uploaded as a file and produces JSON output containing a vector of facial landmarks and orientation for each face found.

Betaface : Face Detection & Recognition

You can communicate with the Betaface webservice from any platform, any OS that will allow you to send and receive HTTP messages. The Website is owned and operated by Software Oleksandr Kazakov, Munich, Germany.

BioID : be recognized

BioID says to be the world’s first webcam-based personal recognition system for web and mobile users : convenient, reliable, secure. BioID provides a playground as test bed for the BioID Web Service, a collection of simple API calls enhancing existing systems with powerful biometrics (face recognition and voice recognition). You can sign up for a free My BioID account. Dr. Robert Frischholz, the author of the Face Detection Homepage, is the Chief Technical Officer (CTO) of BioID.

BiometryCloud : Face recognition for developers

BiometryCloud provides frameworks and plugins that, combined with their pattern recognition API’s, result in the most simple, fast and robust identity platform on the market. The service will be launched soon, you can subscribe to a private beta now.

HP Lab’s Multimedia Analytics Platform : beta

HP offers the Multimedia Analytics Platform Site as a place where you can experiment with some of the latest technologies that are under development at HP Labs, using your own media or sample pictures they provide. The following services are available : Face Detection, Face Verification, Face Demographic, Feature Extraction, Image Matching and Image Collage.

Lambda Labs : Face Recognition API βeta

Lambda Labs, Inc. was founded in the spring of 2012 in San Francisco and is now looking for the best hackers, academics, hustlers, and financiers to join them. A freemium subscription is offered to test the API which provides face recognition, facial detection, eye position, nose position, mouth position, and gender classification.

ReKognition : Integrated visual recognition solution based in Cloud

ReKognition is an open API platform provided by Orbeus, which helps developers easily incorporate the state-of-the-art computer vision capabilities of facial recognition, object recognition and scene understanding into your app or software. Orbeus is a computer vision company that empowers computers to see better than humans. Orbeus says to be the first and only company to provide a proprietary cloud-based image analysis solution that makes sense of faces, scenes and objects all together. You can sign up for a free Play Plan. An iOS beta app was available.

Sky Biometry : Cloud-based Face Detection and Recognition API

SkyBiometry introduces an cloud-based Face Detection and Recognition API. At the core of the product is one of the worlds best algorithms for the detection and recognition of faces that is successfully used in many commercial products around the globe. A free subscription is available.

More web services

Commercial solutions

Cybula FaceEnforce : 3D Face Recognition system

Cybula’s FaceEnforce system represents the leading edge technology for 3D facial biometrics.

FaceFirst : The Leader in Facial Recognition Technology

FaceFirst uses the world’s most highly developed facial recognition software. It is patent-pending technology rated number one by the 2006 Face Recognition Vendor Test conducted by the U.S. Commerce Department’s National Institute of Standards and Technology.

Luxand : FaceSDK 5.0

Luxand Inc. is a private hi-tech company formed in 2005. The company provides a broad range of facial feature recognition solutions. The company’s products and technologies are used by biometric identification and security companies, banks, the entertainment industry, medical and cosmetic industry, at online entertainment portals, chat rooms, and movie Web sites around the globe.

NEUROtechnology VeriLook

VeriLook facial identification technology is designed for biometric systems developers and integrators. The technology assures system performance and reliability with live face detection, simultaneous multiple face recognition and fast face matching in 1-to-1 and 1-to-many modes.

RoboRealm 2.67.45 : vision for machines

RoboRealm is an application for use in computer vision, image analysis, and robotic vision systems. RoboRealm’s face detection module is used to detect the presence of faces within an image.

Sensible Vision FastAccess SDK

FastAccess is facial recognition software for secure access to computing devices which reduces the need to manually log in to the device while maintaining strong security.

Free open source solutions

CCV 0.6 : A Modern Computer Vision Library

One core concept of ccv development is application driven. As a result, ccv end up implementing a handful state-of-art algorithms. It includes a very fast detection algorithm for rigid object (face etc.), an accurate object detection algorithm for somewhat difficult object (pedestrian, cat etc.), a state-of-art text detection algorithm, a long term object tracking algorithm, and the long-standing feature point detection algorithm.

FaceRecLib 2.0.0

The FaceRecLib is an open source platform that is designed to run comparable and reproducible face recognition experiments. This library is developed at the Biometrics group at the Idiap Research Institute. The FaceRecLib is a satellite package of the free signal processing and machine learning library Bob (version 2.0.0), and some of its algorithms rely on the CSU Face Recognition Resources.

OpenCV 3.0 : Open Source Computer Vision

OpenCV is released under a BSD license and hence it’s free for both academic and commercial use. It has C++, C, Python and Java interfaces and supports Windows, Linux, Mac OS, iOS and Android. OpenCV was designed for computational efficiency and with a strong focus on real-time applications. Written in optimized C/C++, the library can take advantage of multi-core processing.

An OpenCV version is also available for processing and Android.

OpenBR 0.5.0 : Open Source Biometric Recognition

OpenBR is a framework for investigating new modalities, improving existing algorithms, interfacing with commercial systems, measuring recognition performance, and deploying automated biometric systems. The project is designed to facilitate rapid algorithm prototyping, and features a mature core framework, flexible plugin system, and support for open and closed source development. Off-the-shelf algorithms are also available for specific modalities including Face Recognition, Age Estimation, and Gender Estimation. OpenBR requires OpenCV and Qt.

Bibliography

The following liist provides links to websites with additional informations about face recognition :

Optical and intelligent character recognition (OCR and ICR)

Optical character recognition (OCR) is the mechanical or electronic translation of scanned images of handwritten, typewritten or printed text into machine-encoded text.

Intelligent character recognition (ICR) is an advanced optical character recognition or handwriting recognition system that allows fonts and different styles of handwriting to be learned by a computer.

Today the platform for people to use OCR has been changed from single PC’s to web-based applications (Cloud Computing) and mobile devices.

A comparison of optical character recognition software is available at Wikipedia.

One of the best open source OCR engines available today is Tesseract. Tesseract was originally developed as proprietary software at Hewlett-Packard between 1985 and 1995. In 2005 it was released as open source by Hewlett Packard and University of Nevada-Las VegasUNLV (UNLV). Tesseract development has been sponsored by Google since 2006. It is now released under the Apache License, Version 2.0.

There are some free OCR tools available that are based on Tesseract, for desktop PC’s and as online services :