[PYTHON] Configurer un nœud pour faire MNIST sur ROS à l'aide de Tensorflow

Je posterai sur Qiita pour la première fois le jour des remerciements pour le travail. Merci.

emballer

Contexte

Il existe un environnement de développement de robot appelé ROS. (Site officiel de ROS) Avec ROS, les données de capteurs tels que les caméras peuvent être traitées de manière intégrée pour déplacer et simuler des robots.

** Je souhaite intégrer le Deep Learning ici! !! ** **

Ce que j'ai fait

Si vous le faites en premier, c'est un tutoriel! Donc Tensorflow [Deep MNIST pour les experts](https://www.tensorflow.org/versions/r0.10/tutorials/mnist/pros/index. html) s'exécute désormais sur ROS.

Auparavant, il y avait une personne qui exécute un modèle Tensorflow formé qui reconnaît les objets sur ROS, de sorte que Le modèle a été visualisé en référence à.

En écrivant explicitement le modèle, je pense que c'est devenu un script qui peut être facilement appliqué à d'autres tâches. (Vous pouvez modifier la configuration du réseau, et si vous l'apprenez d'abord, vous pouvez la déplacer.)

Procédure de traitement

Ensuite, ce que j'ai réellement écrit le script est le suivant.

  1. Configurez CNN pour lire les fichiers entraînés
  2. Abonnez-vous aux informations d'image à partir du nœud de caméra
  3. Compressez les informations de l'image en 28 * 28 et binarisez le noir et blanc pour qu'elles entrent CNN de MNIST
  4. Montrez l'image à CNN et estimez le nombre
  5. Publiez le résultat

Description des nœuds ROS Description de l'éditeur et de l'abonné

Commentaire de code

J'ai écrit dans Another article

Comment bouger

Comme dans GitHub README.md $ roscore
$ python tensorflow_in_ros_mnist.py image:=/cv_camera/image_raw
$ rosrun cv_camera cv_camera_node
$ rostopic echo /result

Tensorflow, ROS, cv_bridge, pilote de caméra, OpenCV, numpy doivent être préparés à l'avance.Si vous faites une erreur dans l'ordre d'exécution, une erreur se produira mais cela fonctionnera, alors ne vous inquiétez pas.

résultat

Lorsque j'ai affiché l'image sur l'ordinateur avec de la peinture et que j'ai pointé l'appareil photo vers elle, elle est devenue comme indiqué dans la figure ci-dessous. L'image de droite est l'image fournie par la caméra et les données: à gauche, le numéro attendu et publié par CNN. Il est correct. Screenshot from 2016-11-23 15_41_51.png

Le manuscrit 9 a également été reconnu correctement.

Screenshot from 2016-11-23 15_44_07.png

Cependant, la précision de reconnaissance varie considérablement en fonction de la nature de la caméra. Vous pouvez déterminer la distance entre la caméra et l'image, la découper avec numpy avant de la mettre dans le CNN et jouer avec la valeur de binarisation.

Épilogue

** Je suis content que cela ait fonctionné correctement pour le moment! !! ** ** J'étais nerveux à propos du premier message sur GitHub et Qiita. Surtout, j'étais assez confus pour découvrir et comprendre la licence de GitHub. En conséquence, j'ai mis la licence Aphache 2.0 en me référant à ce site .Est-ce correct? Le code était assez compliqué, je n'ai ajouté aucun commentaire et j'ai pensé que je devais faire de mon mieux.

** Un immense merci le jour du travail merci! !! ** **

Références non incluses dans le texte:

Recommended Posts

Configurer un nœud pour faire MNIST sur ROS à l'aide de Tensorflow
Comment configurer un environnement Python à l'aide de pyenv
Configurer un serveur de fichiers sur Ubuntu 20.04 à l'aide de Samba
Comment configurer SVM à l'aide d'Optuna
Configurer un serveur de messagerie avec Twisted
Comment configurer un notebook Jupyter à la destination SSH (AWS EC2)
Une histoire addictive lors de l'utilisation de tensorflow sur Android
Comment configurer une forêt aléatoire à l'aide d'Optuna
Comment configurer une forêt aléatoire à l'aide d'Optuna
Comment configurer un serveur de développement local
Configurer un environnement de développement Python sur Marvericks
J'ai créé un jeu ○ ✕ avec TensorFlow
Configurer un serveur de fichiers en utilisant samba avec ZeroPi de Friendly Arm [installation du système d'exploitation]
Configurer un serveur local simple sur votre Mac
Configurez un serveur gratuit sur AWS en 30 minutes
[Partie 1] Configurons un serveur Micra sur Linux
Configurer un serveur de fichiers utilisant la samba avec ZeroPi de Friendly Arm [Articles achetés]
Configurer un serveur de fichiers utilisant la samba avec ZeroPi de Friendly Arm [Importation personnelle]
Comment configurer WSL2 sur Windows 10 et créer un environnement d'étude pour les commandes Linux
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
Connexion SSH à un serveur privé à l'aide d'un serveur de plateforme dans EC2
Définir la clé de compte de service Google Cloud dans heroku
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
[ROS] Comment écrire un éditeur et un abonné sur un nœud
Configurer Python 3.4 sur Ubuntu
Configurer Polyglot sous Windows
Création d'un modèle séquentiel Tensorflow avec une image originale ajoutée à MNIST
Python: Introduction à Flask: création d'une application d'identification de numéro à l'aide de MNIST
Comment créer un environnement Python à l'aide de Virtualenv sur Ubuntu 18.04 LTS
Configurez un serveur de référentiel yum sur la série CentOS 7 et faites-y référence localement et à partir d'autres serveurs, etc.
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Configurer l'environnement Python sur CentOS
Comment installer TensorFlow sur CentOS 7
Utilisation d'une console série sur Ubuntu 20.04
Exécutez TensorFlow2 sur le serveur VPS
Créer un modèle d'apprentissage à l'aide de MNIST
Une histoire d'essayer d'exécuter JavaScripthon sur Windows et d'abandonner.
Essayez de déduire à l'aide d'un modèle de régression linéaire sur Android [PyTorch Mobile]
Envoyez du courrier avec mailx à un serveur SMTP factice configuré avec python.
L'histoire de l'abandon d'essayer de se connecter à MySQL en utilisant Heroku
Essayez de mettre en place un environnement de test Vim assez sérieusement (pour Python)
Configurez un serveur Web local en 30 secondes en utilisant http.server en python 3
Une histoire sur un débutant essayant de configurer CentOS 8 (mémo de procédure)