Tableaux Maths
Slogan du site

Des cours, des exercices et des vidéos réalisées par des élèves.
Outils numériques en classe et découverte de la programmation.

Poppy ErgoJr réel : Mouvements et camera

Faire bouger le robot réel et détecter des visages avec la camera en Python.
Poppy ErgoJr réagit à la détection d’un visage.

Article mis en ligne le 10 septembre 2016
dernière modification le 26 janvier 2020

Découvrez pas à pas la programmation du robot ErgoJr, ses mouvements, sa camera et l’utilisation d’OpenCV pour détecter des visages dans une image.

Le principe en vidéo

Voici une vidéo qui parcourt rapidement l’ensemble du sujet (mouvements, camera et détection du visage...) :

Démarrage :

Ouvrez Jupyter-NoteBook dans l’interface du robot (poppy.local).

Pour exécuter une cellule, vous pouvez cliquer sur l’icône "Play" ou appuyer sur Ctrl+Entrée.

Il faut commencer par importer les librairies du robot et définir un robot.

Ici, nous l’appellerons "poppy".

Cette opération doit être effectuée à chaque nouvelle prise en main du robot (chaque démarrage).

L’activation des moteurs nécessite de fixer au préalable leurs mouvements afin de ne pas se coincer les doigts par exemple.

Après cette opération, les moteurs ne peuvent plus bouger à la main.

Une fois ces opérations effectuées, vous pouvez commencer à actionner les moteurs...

Mouvements du Robot :

Un simple mouvement du premier moteur :

  • 30 ou -30 correspond à l’angle final demandé
  • 0.5 ou 1 correspond à la durée totale du mouvement (plus ou moins rapide)
  • wait=True permet d’attendre la fin du mouvement avant de commencer le suivant.

En passant le paramètre wait à False, on peut faire bouger plusieurs moteurs en même temps :

Enfin, on peut créer mémoriser une position (initiale par exemple) par une liste de positions sur chaque moteur.

Les moteurs sont actionnés en même temps.

Le paramètre wait=True permet d’attendre la fin de la totalité du mouvement avant de passer à un autre.

Les LEDs :

Chaque moteur est équipé de LEDs. Il est donc possible de les allumer avec des couleurs différentes :

Il faut aussi pouvoir les éteindre :

Camera et photos :

Poppy est équipé d’une camera. Cela permet d’enregistrer des vidéos, de prendre des photos... C’est bien mais que peut-on en faire ???

Dans les librairies Python présentes sur poppy, il en existe une particulièrement intéressante : OpenCV

C’est une librairie de traitements et d’analyses d’images.

Grâce à des modules déjà construits, il est possible de détecter des formes, des visages, des couleurs... et plein d’autres choses...

Prenons juste une photo (pour l’instant) :

Résultat :

photo1 poppy
Une photo prise par poppy ErgoJr

Détection d’un visage :

Pour cela, il faut charger un fichier de configurations puis observer les contours des objets dans l’image en noir et blanc (échelle de gris).

Un exemple tout de suite. J’ai accepté de mettre ma tête sur le web pour ce tuto.

Quelques remarques utiles viennent après le code :

Résultat : 1 visage(s) trouve(s) !

poppy visage1
Une détection d’un visage grâce à openCV

Remarques et erreurs éventuelles :

  • Le fichier xml de configurations est situé ici sur poppy :

/home/poppy/miniconda/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml

Si le chemin n’est pas bon, votre programme va charger un fichier vide ce qui aboutira à l’erreur suivante :

error : (-215) !empty() in function detectMultiScale

  • Certains facteurs engendrent des détections érronées (lumière, vétements, autres objets...).

Il faut alors jouer sur certains paramètres de la fonction detectMultiScale() :

Modifier le scaleFactor ou augmenter/diminuer la taille minimale de la détection : minSize=(50,50)...

Réaction à la détection de visages

Dans l’exemple suivant, poppy prend une photo toutes les deux secondes.

S’il détecte un visage, les LEDs passent au vert, il se lève un peu puis dit "Bonjour !" en hochant la tête. Les LEDs s’éteignent, on sort de la boucle, on affiche la dernière image puis le programme s’arrête.

Sinon, s’il ne détecte pas de visage, il remue la te de gauche à droite (pour chercher) puis reprend une autre photo.

(Voir la vidéo d’introduction)

Résultat :

0 visage(s) trouve(s) !
0 visage(s) trouve(s) !
0 visage(s) trouve(s) !
0 visage(s) trouve(s) !
1 visage(s) trouve(s) !

poppy visage1
Une détection d’un visage grâce à openCV

Téléchargements :

Voici le notebook complet (dans un zip) :

iPython NoteBook : Detection d’un visage
L’article au complet

Un lien vers le contenu du NoteBook en format html :

NoteBook en format html
Le contenu de l’article.