Est-il possible de faire de la reconnaissance d’objets sur un espace de travail ?
Grâce à Tensor Flow (outil de machine learning open source développé par Google), reconnaître plusieurs objets est possible.
Vous avez un Ned2 et êtes curieux de tester cette fonctionnalité ?
C’est très simple, vous n’avez besoin que de votre Ned2, du Vision Set et de son espace de travail (aka workspace), du Gripper Large et de plusieurs objets.
Nous utiliserons du chocolat parce que, il faut le reconnaître, tout le monde adore ça !
Exemple avec Niryo One
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 encore un petit effort
5. Le processus :
- Comment créer ma base de données ?
- Comment suivre les objets ?
- C’est l’heure !
Matériel
En premier, l’espace de travail doit être calibré avec Niryo Studio. De plus, le nom de l’espace de travail doit correspondre à celui que vous avez rempli 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 modifier la variable « observation_pose » pour que le robot puisse voir les quatre repères de l’espace de travail.
Logiciel
Tout d’abord, installez PyNiryo. Ensuite, téléchargez le code source sur notre Github. Supposons que vous allez cloner le référentiel dans un dossier nommé « tensorflow_ned ». Vous pouvez le cloner avec la commande :
clone git https://github.com/NiryoRobotics/ned_applications.git
Alors, ouvrez robot_gui.py et modifiez adresse_ip_robot ainsi que workspace variables par l’adresse IP privée actuelle et le nom de l’espace de travail de votre robot :
robot_ip_address = « L’adresse IP de votre robot »
workspace = « L’espace de travail de votre robot »
Si vous utilisez la pompe à vide, changez aussi la variable décalage_z, 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 aspirer. É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é à son emplacement par défaut (C:Usersanaconda3).
Vous pouvez alors 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, accepter l’installation de ces librairies et lancer run.bat.
Le programme devrait se lancer. Si ce n’est pas le cas, lancez une installation manuelle.
- Ouvrez un terminal à partir d’Anaconda Navigator (invite CMD.exe, « Launch »). Vous devriez voir « (base) » affiché à gauche de votre terminal.
- Mettre à jour Anaconda :
conda update -n base -c defaults conda - Créez un environnement TensorFlow 2 avec Python 3.6 :
conda create -n tf_ned tensorflow=2 python=3.6 - Activez l’environnement de TensorFlow :
conda activate tf_ned - Vous devriez maintenant voir « (tf_ned) » au lieu de « (base) » à gauche de votre terminal, mettez à jour TensorFlow :
pip install –upgrade tensorflow - Installez les bibliothèques opencv, pygame et pygame-menu :
install opencv-python pygame pygame-menu - Entrez dans le dossier de l’application :
cd Desktop/tensorflow_ned - Lancer le programme:
python robot_from.py - Lancement:
run.bat - Soit dans le répertoire de l’application :
conda activate 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.
- Ouvrir un Terminal. Vous devriez trouver « (base) » affiché à gauche de votre nom d’utilisateur.
- Mettre à jour Anaconda :
conda update -n base -c defaults conda - Créez un environnement TensorFlow 2 avec Python 3.6 :
conda create -n tf_ned tensorflow=2 python=3.6 - Activez l’environnement de TensorFlow :
conda activer tf_ned - Vous devriez maintenant voir « (tf_ned) » au lieu de « (base) » à gauche de votre terminal, mettez à jour TensorFlow :
pip install –upgrade tensorflow - Installez les bibliothèques opencv, pygame et pygame-menu :
install opencv-python pygame pygame-menu - Allez dans le dossier de l’application :
cd tensorflow_ned - Lancer le programme:
python robot_gui.py - Entrez la commande :
conda activate tf_ned python3 robot_gui.py
Le lancement est terminé, mais encore un petit effort.
Assurez-vous que Ned2 est capable de voir les quatre repères de l’espace de travail depuis sa pose d’observation, sinon il passera automatiquement en mode d’apprentissage et l’interface graphique sera rouge.
Pour que l’interface graphique devienne verte, déplacez la caméra afin que le robot puisse voir les quatre points de repère.
Ensuite, confirmez simplement la position souhaitée 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 ?
Prêt à prendre des photos ? Vous devez 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 ?
D’abord, 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.
Ensuite, le calcul du masque « objs_mask() » utilise d’une part 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, associez lescv2.dilate() et cv2.erode() fonctions pour éliminer les impuretés des images.
Voici à quoi l’image devrait ressembler :
Troisième, l’extraction d’Objets « extract_objs() » utilise lecv2.findContours() pour obtenir la liste du contour des objets se trouvant sur le masque précédemment calculé. Ensuite, il calcule le centre ainsi que l’angle des objets à l’aide de la vision.
Enfin, on obtient un carré contenant le plus petit objet et utiliser ces informations pour extraire l’objet de l’image et mettre il verticalement (la même orientation facilite la reconnaissance pour TensorFlow).
C’est l’heure !
Lancez la formation soit en lançant training.py (formation python.py)ou cliquez sur le menu « Entraînement » et le bouton « Entraînement complet » 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 l’entraînement terminé, testez les performances du modèle et enregistrez-le dans le dossier « modèle ».
Si vous souhaitez lancer un apprentissage plus rapide, utilisez le bouton « Lite training ».
A la fin, lancez robot.py (robot python.py) puis entrez le nom de l’objet que vous voulez que Ned2 saisisse, ou utilisez le bouton « 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.