Blog

Sélection visuelle avec intelligence artificielle à l'aide de TensorFlow

Apprendre la robotique
Partager
Illustration de la reconnaissance d'images avec Tensor Flow

 

Est-il possible pour Ned2 de reconnaître plusieurs objets sur son espace de travail ?

Oui définitivement! Grâce à Tensorflow (outil d'apprentissage automatique open source développé par Google), la reconnaissance de plusieurs objets est devenue possible.

Vous possédez un Ned2 et êtes curieux de tester cette fonctionnalité ?
C'est très simple, vous avez simplement besoin de votre Ned2, du kit de vision et de son espace de travail, de la grande pince et de plusieurs objets. Nous utiliserons du chocolat parce que nous en avons envie, je veux dire, qui n'en a pas envie ?

Résumé :

1. Comment aménager/préparer mon espace de travail ?
2. Comment lancer l'application sous Windows ?
3. Comment lancer l'application sous Linux ?

4.Le lancement est terminé, mais il y a quelque chose qui ne va pas

5.Le processus :

  • Comment créer ma base de données ? (Reconnaissance d'objets)
  • Comment suivre les objets ?
  • Afficher l'heure!

Comment paramétrer/préparer mon matériel et mes logiciels ?

Matériel

La première chose est que l'espace de travail doit être calibré avec Studio Niryo. De plus, le nom de l'espace de travail doit correspondre à celui que vous avez renseigné dans le programme du robot (par défaut, le nom est « default_workspace »).

Si votre espace de travail n'est pas devant le robot, vous devrez changer la variable « observation_pose » pour que le robot puisse voir les quatre repères de l'espace de travail.

Logiciels

Tout d’abord, installez PyNiryo. Ensuite, téléchargez l'application code source sur notre Github. Supposons que vous clonez le référentiel dans un dossier nommé « tensorflow_ned ». Vous pouvez le cloner avec la commande :

git clone https://github.com/NiryoRobotics/ned_applications.git

Ensuite, ouvrez le robot_gui.py fichier et modifiez le adresse_ip_robot et par espace de travail variables par l'adresse IP privée actuelle et le nom de l'espace de travail de votre robot :

robot_ip_address = « Adresse IP de votre robot »

workspace = « espace de travail de votre robot »

Si vous utilisez le Pompe à vide, changez également le z_offset variable, qui est le décalage entre l'espace de travail et la hauteur cible. Cela permettra à la Pompe à Vide d'atteindre les pions afin de les attraper. Étant donné que la pompe à vide est plus courte que la grande pince, vous pouvez modifier le z_offset en une petite valeur négative, comme :

z_offset = -0.01

Comment lancer l'application sous Windows ?

Commencez par installer Anaconda pour utiliser le script d'installation de l'application. Anaconda doit être installé sur son emplacement par défaut (C:Usersanaconda3).

Vous pouvez opter pour l’installation simplifiée ou l’installation manuelle.

Dans le premier cas, il suffit d'aller dans le dossier de l'application, de lancer setup.bat pour installer toutes les librairies utilisées, d'accepter l'installation de ces librairies et de lancer run.bat.
Le programme devrait se lancer. Si ce n'est pas le cas, lancez une installation manuelle.

  1. Ouvrez un terminal à partir d'Anaconda Navigator (invite CMD.exe, « Lancer »). Vous devriez voir « (base) » affiché à gauche de votre terminal. 
  2. Mettre à jour Anaconda :
    conda update -n base -c valeurs par défaut conda
  3. Créez un environnement TensorFlow 2 avec Python 3.6 :
    conda create -n tf_ned tensorflow=2 python=3.6
  4. Activez l'environnement TensorFlow :
    conda activer tf_ned 
  5. Vous devriez maintenant voir « (tf_ned) » au lieu de « (base) » à gauche de votre terminal, mettez à jour TensorFlow :
    installation de pip -mise à niveau de tensorflow
  6. Installez les bibliothèques opencv, pygame et pygame-menu :
    installer opencv-python pygame pygame-menu
  7. Accédez au dossier de candidature :
    cd Bureau/tensorflow_ned
  8. Lancer le programme:
    python robot_gui.py
  9. Lancement:
    run.bat
  10. Ou dans le répertoire de l'application :
    conda activer tf_ned python robot_gui.py

Comment lancer l'application sous Linux ?

Commencez par installer Anaconda pour utiliser le script d'installation de l'application.

  1. Ouvrez un terminal. Vous devriez trouver « (base) » affiché à gauche de votre nom d’utilisateur.
  2. Mettre à jour Anaconda :
    conda update -n base -c valeurs par défaut conda
  3. Créez un environnement TensorFlow 2 avec Python 3.6 :
    conda create -n tf_ned tensorflow=2 python=3.6
  4. Activez l'environnement TensorFlow :
    conda activer tf_ned
  5. Vous devriez maintenant voir « (tf_ned) » au lieu de « (base) » à gauche de votre terminal, mettez à jour TensorFlow :
    installation de pip -mise à niveau de tensorflow
  6. Installez les bibliothèques opencv, pygame et pygame-menu :
    installer opencv-python pygame pygame-menu
  7. Accédez au dossier de l'application :
    cd tensorflow_ned
  8. Lancer le programme:
    python robot_gui.py
  9. Entrez la commande:
    conda activer tf_ned python3 robot_gui.py

Le lancement est terminé, mais il y a quelque chose qui ne va pas dans le processus.

Assurez-vous que Ned2 est capable de voir les quatre points de repère des espaces de travail depuis sa position d'observation, sinon il passera automatiquement en mode apprentissage et l'interface graphique sera rouge.

Afin de rendre l'interface graphique verte, déplacez la caméra pour que le robot puisse voir les quatre points de repère.

Ensuite, confirmez simplement la position souhaitée soit en cliquant sur l'écran ou en appuyant sur entrée et il sera également enregistré pour la prochaine utilisation.

Voici à quoi devrait ressembler la page d'accueil de l'interface : 


 

Le processus:

Comment créer ma base de données ? (Reconnaissance d'objets)

Prêt à prendre des photos ? Tu dois prendre au moins 20 photos de chaque objet pour obtenir de bons résultats. Essayez à chaque fois de changer l'angle et les conditions d'éclairage

Vous pourrez retrouver les photos que vous avez prises dans le dossier « data », dans un dossier nommé avec le nom de l'objet concerné.

Comment suivre les objets ?

Prénom, la prise de vue « take_workspace_img() » permet au robot d'envoyer une image, de la recadrer et d'ajuster la distorsion de l'objectif.

Deuxièmement, le calcul du masque « objs_mask() » utilise d’une part le cv2.cvtColor() pour modifier la colorimétrie de l'image de RVB à HLS, et d'autre part il utilise cv2.inRange() pour obtenir un masque qui délimite approximativement les objets à détecter. Afin de ne conserver que des objets ayant une surface suffisante, combinez les cv2.dilate() ainsi que   cv2.érode() fonctions pour éliminer les impuretés des images.

Voici à quoi devrait ressembler l'image :

Troisièmement, l'extraction des Objets « extract_objs() » utilise le cv2.findContours() pour obtenir la liste du contour des objets se trouvant sur le masque préalablement calculé. Ensuite, il calcule le centre ainsi que l'angle des objets à l'aide des fonctions de vision.

 

finalement, nous obtenons un carré contenant le plus petit objet et utilisons ces informations pour extraire l'objet de l'image et le mettre verticalement (la même orientation facilite la reconnaissance pour TensorFlow).

 

Afficher l'heure!

Lancez la formation soit en lançant training.py (python training.py) soit en cliquant sur le menu « Former » et le bouton « Formation complète » dans l'interface graphique.

Votre modèle TensorFlow est créé !

Créez ensuite une liste qui contient toutes les images du dossier « data » et une liste qui contient le label correspondant à chaque image. Une fois la formation terminée, testez les performances du modèle et enregistrez-le dans le dossier « modèle ».

Si vous souhaitez lancer une formation plus rapide utilisez le bouton « Formation Lite ».

A la fin, lancez robot.py (python robot.py) et entrez le nom de l'objet que vous souhaitez que Ned2 récupère, ou utilisez le menu « Play » de l'interface graphique. Le programme utilise le modèle précédemment formé pour reconnaître les différents objets sur l'espace de travail.