1. Accueil
  2. Docs
  3. Niryo One
  4. Démonstrateurs Niryo One
  5. Picking visuel avec l’Intelligence Artificielle

Picking visuel avec l’Intelligence Artificielle

PHN0eWxlPgouZGlzY2xhaW1lciB7CmJhY2tncm91bmQ6I2U3ZjJmYTsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2IoMCAwIDAgLyAzMCUpOwogIGZvbnQtZmFtaWx5OiBvcGVuLXNhbnMsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKfQouZGlzLXRpdGxlIHsKYmFja2dyb3VuZDojNmFiMGRlOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGNvbG9yOiAjZmZmOwogICAgYmFja2dyb3VuZDogIzZhYjBkZTsKICAgIHBhZGRpbmc6IDZweCAxMnB4Owp9Ci5kaXMtdGV4dCB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKfQouZGlzLXRleHQgYSB7CnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lICFpbXBvcnRhbnQ7Cn0KPC9zdHlsZT4KPGRpdiBjbGFzcz0iZGlzY2xhaW1lciI+CjxkaXYgY2xhc3M9ImRpcy10aXRsZSI+Tm90ZTwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXMtdGV4dCI+VGhpcyBhcHBsaWNhdGlvbiBpcyBkZXNpZ25lZCBmb3IgTmlyeW8gT25lIHVzZXJzLiBJZiB5b3UgYXJlIHVzaW5nIE5lZCwgcGxlYXNlIGZpbmQgdGhlIG5ldyBkb2N1bWVudGF0aW9uIDxhIGhyZWY9Imh0dHBzOi8vZG9jcy5uaXJ5by5jb20vYXBwbGljYXRpb25zL25lZC9zb3VyY2UvZXhhbXBsZXMvdmlzaW9uX3BpY2tfYXJ0aWZpY2lhbF9pbnRlbGxpZ2VuY2VfdGVuc29yZmxvdy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+aGVyZTwvYT4uPC9kaXY+CjwvZGl2Pg==

Introduction

Ce démonstrateur utilise Tensorflow, un outil d'apprentissage automatique open source développé par Google, afin de permettre au Niryo One de reconnaître plusieurs objets sur son espace de travail, grâce à son Vision Set, son intelligence artificielle, son traitement d'image et son apprentissage automatique.

Exigences

  • Un Niryo One,
  • Une grande pince,
  • Le Vision Set et son espace de travail,
  • Quelques objets divers à poser sur l'espace de travail (dans notre cas, des chocolats Celebration).

Installation

Matériel

Commencez par calibrer l’espace de travail avec Niryo One Studio. Le nom de l'espace de travail doit être le même que celui que vous avez renseigné dans le programme du robot (par défaut, le nom est « workspace_1 »).

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.

Il est important de fixer solidement le robot et l'espace de travail pour conserver la précision au fur et à mesure des manipulations. 

Au lancement du programme, si le robot n'est pas capable de voir les quatre repères de l'espace de travail depuis sa position d'observation, il passera automatiquement en mode apprentissage et l'interface graphique sera rouge.

Il faudra alors déplacer la caméra pour que le robot puisse voir les quatre repères, ce qui fera passer l'interface graphique au vert. Un clic sur l'écran confirmera la position réelle, qui sera enregistrée pour la prochaine utilisation (vous pouvez toujours la modifier depuis le menu des paramètres « Pose d'observation »).

Logiciels

Tout d'abord, installez l'API Python TCP du Niryo One en suivant le lien ci-dessous :

https://drive.google.com/uc?export=download&id=1kLvj120O1UYl_6VXX617K7ZnF6LGDTEf

Accédez au robinet « Documentation », puis cliquez sur la documentation de l'API Python TCP.

Dans un deuxième temps, téléchargez le code source du démonstrateur sur notre GitHub sur le lien suivant :

https://github.com/NiryoRobotics/niryo_one_industrial_demonstrators/tree/master/Visual_Picking_Artificial_Intelligence

Ensuite, dans le fichier robot_gui.py, modifiez les variables « robot_ip_address et « workspace ».

adresse_ip_robot = « Adresse IP de votre robot »
espace de travail = "espace de travail de votre robot"

Sur Windows

Vous devez commencer par installer Anaconda pour utiliser le script d'installation du démonstrateur.

Anaconda doit être installé à son emplacement par défaut (C:Users\anaconda3).

Vous trouverez le lien d'installation d'Anaconda ci-dessous : 

https://docs.anaconda.com/anaconda/install/

Deux solutions s'offrent à vous : 

  • Installation simplifiée

Dans le dossier du démonstrateur : 

  1. Lancez setup.bat pour installer toutes les bibliothèques utilisées
  2. Acceptez l'installation de ces bibliothèques
  3. Lancez run.bat pour lancer le programme

Le programme devrait se lancer. Si ce n'est pas le cas, lancez une installation manuelle.

  • Installation manuelle

1. Ouvrez un terminal depuis Anaconda Navigator (invite CMD.exe, « Lancer »)

Vous êtesdevrait 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_niryo_one tensorflow=2 python=3.6

4. Activer l'environnement de TensorFlow

conda activer tf_niryo_one

Vous devriez maintenant voir « (tf_niryo_one) » au lieu de « (base) » à gauche de votre terminal.

5. Mettre à jour le flux tensoriel

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 du démonstrateur

cd Desktoptensorflow_niryo_one-master

8. Lancez le programme

python robot_gui.py

Sous Linux

1. Installez Anaconda

https://docs.anaconda.com/anaconda/install/

2. Ouvrez un terminal

Vous devriez trouver « (base) » affiché à gauche de votre nom d’utilisateur.

3. Mettre à jour Anaconda

conda update -n base -c valeurs par défaut conda

4. Créez un environnement TensorFlow 2 avec python 3.6

conda create -n tf_niryo_one tensorflow=2 python=3.6

5. Activer l'environnement de TensorFlow

conda activer tf_niryo_one

Vous devriez maintenant voir « (tf_niryo_one) » au lieu de « (base) » à gauche de votre terminal.

6. Mettre à jour TensorFlow

installation de pip -mise à niveau de tensorflow

7. Installez les bibliothèques opencv, pygame et pygame-menu

pip installer opencv-python pygame pygame-menu

8. Accédez au dossier du démonstrateur

cd tensorflow_niryo_one/

9. Lancez le programme

python robot_gui.py

 Fonctionnement 

  • Création de la base de données (étiquetage.py)

Pour créer votre base de données, vous devez prendre des photos des objets que vous souhaitez utiliser. Prenez au moins 20 photos de chaque objet pour obtenir de bons résultats. 

Le but est de prendre des photos de chaque objet sous une multitude d’angles et de conditions d’éclairage différentes. Les images seront stockées dans un dossier portant le nom de l'objet concerné, à l'intérieur du dossier « data ». 

  • Suivi des objets (utils.py)

    • Prise de vue d'image (fonction "take_workspace_img()")

Utilisez l'API TCP pour demander au robot d'envoyer une image, de la recadrer et de compenser la distorsion de l'objectif.

    • Calcul du masque (fonction « objs_mask() »)

Utilisez l'option cv2.cvtColor() pour modifier la colorimétrie de l'image de RVB à HLS, puis utilisez 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() et cv2.érode() fonctions pour éliminer les impuretés des images. 

On obtient finalement une image en noir et blanc correspondant à la forme des objets posés sur l'espace de travail.

Utilisez cv2.findContours() pour obtenir la liste du contour des objets se trouvant sur le masque préalablement calculé.

Calculez ensuite le centre ainsi que l'angle des objets à l'aide des fonctions de vision de l'API TCP/IP get_contour_barycenter() et get_contour_angle().

Avec cv2.minAreaRect() nous obtenons un carré contenant le plus petit objet et utilisons cette information pour extraire l'objet de l'image et le mettre verticalement (donner la même orientation à ces images facilite la reconnaissance pour TensorFlow).

  • Formation (formation.py)

Lancez training.py ou cliquez sur le bouton « Train » de l'interface graphique. Cela crée un modèle TensorFlow (réseau de neurones). Créez ensuite une liste qui contient toutes les images du dossier « data » et une liste qui contient le label correspondant à chaque image.

Utilisez .fit(, ) pour entraîner le modèle avec la base de données.

Une fois la formation terminée, testez les performances du modèle et enregistrez-le dans le dossier « modèle ».

  • Prédiction (robot.py / robot_gui.py)

Lancez robot.py ou le menu « Play » de l'interface graphique :

Utilisez le modèle précédemment formé pour reconnaître les différents objets sur l'espace de travail.

Fonctionnalités

Interface graphique pour clavier/souris ou écran tactile.

Structure des menus :

  • Menu
    • Jouez
      •  
    • Paramètres
      • Posture d'observation
      • Pose de chute
      • Étiquetage
        • Nom :
        • Nom :
        • Ajouter une img
      • Train
      • Mises à jour
    • quitter

Détails:

  • Menu principal
    • Jouez
      •  

Une ou plusieurs pages contenant des objets et leur miniature. Cliquez sur le nom de l'objet de votre choix pour demander au robot de le récupérer.

    • Paramètres
      • Posture d'observation

Le bouton « Pose d'observation » permet de changer la position à partir de laquelle le robot enregistrera l'espace de travail.

      • Pose de chute

Le bouton « Drop pose » permet de changer la position à partir de laquelle le robot laisse tomber les objets demandés.

      • Étiquetage
        • Nom :

Le sélecteur « nom » vous permet de choisir le nom d'un objet déjà existant dans la base de données ou un nouvel objet nommé « obj_x ».

        • Nom :

La saisie de texte « nom » vous permet de choisir le nom de l'objet que vous souhaitez ajouter à la base de données. Pour ajouter des images à un objet existant, utilisez le sélecteur ou écrivez le même nom que l'objet dans « nom ».

        • Ajouter une img

Le « add img » vous permet d'ajouter une image de l'espace de travail réel dans la base de données sous le répertoire « data// ».

Lorsque vous ajoutez un nouvel objet à la base de données, nous vous recommandons d'en prendre au moins vingt photos. Les objets ajoutés doivent avoir un certain contraste avec l'espace de travail (nous recommandons d'éviter les objets blancs et très réfléchissants).

      • Train

Le bouton « Train » lance l’entraînement du réseau de neurones avec le contenu réel du dossier « data ». Pendant toute la durée de la formation, l'interface ne sera pas utilisable (~1 à 10 minutes). 

Une fois la formation terminée, le réseau sera enregistré dans le dossier Modèle et l'interface sera automatiquement actualisée. 

      • Mises à jour

Le bouton « Mettre à jour » lance un scan des dossiers « data », « logo » et « data_mask ». Ensuite, il actualise le réseau de neurones enregistré dans son modèle et met à jour chaque menu (semblable à un redémarrage de programme).

    • quitter

AUTRES CARACTÉRISTIQUES 

  • Remplacez les images du dossier « logo » par des logos personnalisés (le noir est utilisé comme couleur de transparence).
  • Ajoute ou supprime des images et des dossiers dans la base de données à partir d'un outil de gestion de fichiers (utilisez le bouton « Mettre à jour » pour demander à l'application de réanalyser les dossiers)
  • Ensembles de données fournis : 
    • Deux ensembles de données basés sur les chocolats Celebration.
    • Un ensemble de données de 212 images qui permet d'entraîner un modèle avec une précision de 85/90% (1 à 3 minutes d'entraînement)
    • Un ensemble de données de 963 images qui permet d'entraîner un modèle avec une précision de 95/99.5% (1 à 15 minutes d'entraînement)

Lancement du programme

Lancez « run.bat » (Windows uniquement) ou entrez la commande « python3 robot_gui.py ».

Assurez-vous d'être dans un environnement disposant de TensorFlow ainsi que des bibliothèques Python nécessaires (« conda activate tf_niryo_one »).

(base) Usersuser> conda activer tf_niryo_one

(tf_niryo_one) Utilisateursutilisateur> 

FAQ

Les prédictions de l'IA n'apparaissent pas :

Si les prédictions de l’intelligence artificielle n’apparaissent pas à l’écran, c’est probablement parce que :

  • Votre modèle n'est pas encore entraîné pour cette base de données. Dans ce cas, cliquez sur « Train » dans les paramètres.
  • Le modèle enregistré ne correspond pas aux objets actuellement dans votre fichier de données. Dans ce cas, vous pouvez mettre le dossier data dans la même configuration que lors de la dernière formation et cliquer sur mettre à jour.

Mauvaise prédiction :

Si l'angle d'observation de l'espace de travail est trop différent de celui de la base de données, les résultats risquent de ne plus être corrects.

Si un objet est souvent confondu avec un autre, essayez d'ajouter plus d'images de ces deux objets dans la base de données. 

Obtenez le programme sur Github pour utiliser TensorFlow avec le Niryo One

Comment pouvons-nous vous aider ?