Nous poursuivons la découverte du SDK Cozmo avec la détection de visages et d’émotions, ainsi que la reconnaissance embarquée sur le robot Cozmo.
Cozmo dispose du hardware et software nécessaire à la reconnaissance des visages. Il est capable d’associer un nom à chaque visage ( enrollment ), mais aussi de percevoir les émotions sur les visages détectés. Cozmo peut également suivre la position d’un visage.
Dans ce TP, vous allez apprendre à utiliser les 4 fonctionnalités suivantes :
- Détection des visages
- Enregistrement de visages
- Reconnaissance de visages
- Reconnaissance d’émotion
Objectif : détecter et reconnaître les visages et les émotions
- Durée : 45 minutes
- Niveau de difficulté : intermédiaire
- Compétence acquises : vision et reconnaissance de visages
Les prérequis
Vous devez avoir acquis les notions abordées dans les tutoriels ci-dessous
- Cozmo SDK : cozmo.world et événements
- Cozmo SDK : comment activer le mode SDK de Cozmo
Les nouvelles notions que vous allez aborder dans ce TP
- La fonction cozmo.faces
- La fonction cozmo.robot.Robot.enable_facial_expression_estimation
Fonction 1 : détection des visages avec Cozmo
Le robot Cozmo embarque dans son SDK le nécessaire pour détecter des visages grâce à sa caméra.
Lorsqu’une personne passe devant la caméra de Cozmo, le SDK déclenche des événements qui retournent des informations sur le visage détecté ou sur un visage qui n’est plus visible.
Les événements en question sont :
- EvtFaceAppeared : déclenché lorsqu’un visage est détecté pour la première fois
- EvtFaceObserved : déclenché continuellement lorsqu’un visage est détecté
- EvtFaceDisappeared : déclenché lorsqu’un visage précédemment observé n’est plus visible
Comme nous l’avons expliqué dans le tutoriel Cozmo SDK : cozmo.world et événements, presque tous les événements émis par le robot peuvent être récupérés par l’objet
World
. Cet objet
World
est accessible via l’instance disponible sur le robot auquel vous êtes connecté
cozmo.robot.Robot.world
.
Pour détecter un de ces événements vous pouvez utilise la fonction
wait_for()
sur l’objet
World
.
Chaque visage détecté se voit attribuer un objet de type
cozmo.robot.Face
qui contient plusieurs informations et fonctions. Cet objet déclenche des événements tels que le renouvellement de l’ID, le changement de nom, etc.
Ici, la fonction
wait_for
retourne une instance de la classe
EvtFaceObserved
, qui contient un attribut
face
.
Vous trouverez ci-dessous un exemple simple qui récupère l’événement
EvtFaceObserved
(événement déclenché continuellement lorsqu’un visage est détecté), qui est capté par
cozmo.world.World
et qui retourne une instance disposant de l’attribut de type
Face
et affiche l’
id face_id
assigné par Cozmo pour le visage reconnu :
Fonction 2 : enregistrement de visages
Le robot Cozmo embarque également dans son SDK le nécessaire pour enregistrer des visages en associant un nom à chaque visage. Il s’agit de l’ enrollment .
L’objet
cozmo.robot.Face
dispose de fonctions pour enregistrer, modifier et supprimer un nom associé à un visage.
- name_face(name)
- rename_face(new_name)
- erase_enrolled_face()
Les deux premières fonctions prennent une chaîne de caractère (string) comme paramètre. La chaîne doit être une string non vide de caractères ASCII string et composée de caractères alphabétiques uniquement (pas d’espace ni d’accents…).
Nous allons ajouter la deuxième fonction ( rename_face) au code de l’exemple précédent. Ci-dessous, un nom a été associé au visage reconnu de manière arbitraire : « Marc ».
Dans l’exemple suivant, Cozmo voit un visage qu’il connaît (s’il y en a un) et dit à voix haute le nom qui y est associé. Consultez notre TP Cozmo SDK : faire parler Cozmo si vous avez besoin de conseils pour la gestion de la parole avec Cozmo SDK.
Attention, si le nom associé à un visage est modifié ou supprimé, cela va déclencher des événements. Ces événements sont :
- EvtErasedEnrolledFace : déclenché lorsque un enregistrement est supprimé de la base de visages
- EvtFaceRenamed : déclenché lorsque un enregistrement est modifié dans la base
Nous aurons l’occasion d’y revenir plus en détails dans un prochain TP.
Fonction 3 : reconnaissance de visages
Une fois que vous avez compris comment fonctionne la détection et l’enregistrement de visages, la reconnaissance des visages est très simple, car la reconnaissance de visage s’opère constamment grâce au logiciel de Cozmo.
Les instances de l’objet Face disposent d’un attribut name . Cet attribut est une string qui contient le nom de la personne reconnue. Si le champ est vide, c’est qu’il n’y a pas eu de reconnaissance.
Tuto 4 : reconnaissance d’émotion
Le robot Cozmo embarque dans son SDK le nécessaire pour détecter les émotions sur les visages. Il peut reconnaître les expressions faciales suivantes : neutre, joie, surprise, tristesse et colère.
Pour activer cette reconnaissance d’émotion il faut activer enable_facial_expression_estimation .
L’objet Face dispose des attributs known_expression , expression_score . Ces valeurs sont calculées constamment sur le visage détecté par la caméra. Vous pouvez y accéder de la façon suivante :
Vous pouvez télécharger et tester le code vision_simple_face_emotion.py disponible sur notre repository. Il affichera l’expression reconnue et le score dans votre terminal de commande.
Les 5 expressions faciales suivantes sont reconnue par cozmo :
- neutre ( neutral )
- joie ( happy )
- surprise ( surprised )
- tristesse ( sad )
- colère (angry )
Vous pouvez consulter la documentation de Anki sur les expressions reconnues par Cozmo et le score de reconnaissance