[PYTHON] Richten Sie mit Tensorflow einen Knoten für MNIST auf ROS ein

Ich werde am Tag des Dankes für die Arbeit zum ersten Mal bei Qiita posten. Danke.

einpacken

Hintergrund

Es gibt eine Roboterentwicklungsumgebung namens ROS. (Offizielle ROS-Website) Mit ROS können Daten von Sensoren wie Kameras auf integrierte Weise verarbeitet werden, um Roboter zu bewegen und zu simulieren.

** Ich möchte Deep Learning hier integrieren! !! ** ** **

Was ich getan habe

Wenn Sie es zuerst tun, ist es ein Tutorial! Also Tensorflow [Deep MNIST für Experten](https://www.tensorflow.org/versions/r0.10/tutorials/mnist/pros/index. html) trainiertes Modell läuft jetzt auf ROS.

Zuvor gab es eine Person, die ein geschultes Tensorflow-Modell ausführt, das Objekte auf ROS erkennt Das Modell wurde unter Bezugnahme auf visualisiert.

Durch das explizite Schreiben des Modells wurde es meines Erachtens zu einem Skript, das leicht auf andere Aufgaben angewendet werden kann. (Sie können die Netzwerkkonfiguration ändern. Wenn Sie sie zuerst lernen, können Sie sie verschieben.)

Verarbeitungsverfahren

Dann habe ich das Skript tatsächlich wie folgt geschrieben.

  1. Konfigurieren Sie CNN zum Lesen trainierter Dateien
  2. Abonnieren Sie Bildinformationen vom Kameraknoten
  3. Komprimieren Sie die Bildinformationen auf 28 * 28 und binärisieren Sie Schwarzweiß, sodass CNN von MNIST eingegeben wird
  4. Zeigen Sie CNN das Bild und schätzen Sie die Anzahl
  5. Veröffentlichen Sie das Ergebnis

Beschreibung der ROS-Knoten Beschreibung des Herausgebers und Abonnenten

Codekommentar

Ich schrieb in Ein anderer Artikel

Wie man sich bewegt

Wie in 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, Kameratreiber, OpenCV, numpy müssen im Voraus vorbereitet werden. Wenn Sie einen Fehler in der Ausführungsreihenfolge machen, tritt ein Fehler auf, der jedoch funktioniert. Machen Sie sich also keine Sorgen.

Ergebnis

Als ich das Bild mit Farbe auf dem Computer anzeigte und die Kamera darauf richtete, wurde es wie in der folgenden Abbildung gezeigt. Das Bild rechts ist das Bild, das von der Kamera eingegangen ist, und die Daten: links ist die Nummer, die CNN erwartet und veröffentlicht hat. Es ist korrekt. Screenshot from 2016-11-23 15_41_51.png

Die handschriftliche 9 wurde ebenfalls richtig erkannt.

Screenshot from 2016-11-23 15_44_07.png

Die Erkennungsgenauigkeit schwankt jedoch je nach Art der Kamera erheblich. Sie können den Abstand zwischen der Kamera und dem Bild festlegen, ihn mit Numpy zuschneiden, bevor Sie ihn in das CNN einfügen, und mit dem Binärisierungswert spielen.

Nachwort

** Ich bin froh, dass es vorerst richtig funktioniert hat! !! ** ** ** Ich war nervös wegen des ersten Beitrags auf GitHub und Qiita. Insbesondere war ich ziemlich verwirrt, die Lizenz von GitHub herauszufinden und zu verstehen. Infolgedessen habe ich die Aphache 2.0-Lizenz unter Bezugnahme auf diese Site erstellt. Ist dies korrekt? Der Code war ziemlich chaotisch, ich habe keine Kommentare hinzugefügt und dachte, ich sollte mein Bestes geben.

** Überwältigender Dank am Arbeitstag danke! !! ** ** **

Verweise nicht im Text enthalten:

Recommended Posts

Richten Sie mit Tensorflow einen Knoten für MNIST auf ROS ein
So richten Sie eine Python-Umgebung mit pyenv ein
Richten Sie mit Samba einen Dateiserver unter Ubuntu 20.04 ein
So richten Sie SVM mit Optuna ein
Richten Sie mit Twisted einen Mailserver ein
So richten Sie ein Jupyter-Notebook am SSH-Ziel ein (AWS EC2)
Eine süchtig machende Geschichte bei der Verwendung von Tensorflow unter Android
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein
So richten Sie eine zufällige Gesamtstruktur mit Optuna ein
So richten Sie einen lokalen Entwicklungsserver ein
Richten Sie eine Python-Entwicklungsumgebung auf Marvericks ein
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Richten Sie einen Dateiserver mit Samba mit ZeroPi von Friendly Arm ein [Betriebssysteminstallation]
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
Richten Sie in 30 Minuten einen kostenlosen Server unter AWS ein
[Teil 1] Lassen Sie uns einen Micra-Server unter Linux einrichten
Richten Sie mit samba einen Dateiserver mit ZeroPi von Friendly Arm ein [Gekaufte Artikel]
Richten Sie mit samba einen Dateiserver mit ZeroPi von Friendly Arm ein [Persönlicher Import]
So richten Sie WSL2 unter Windows 10 ein und erstellen eine Lernumgebung für Linux-Befehle
Ich möchte eine GUI-Entwicklungsumgebung mit Python oder Golang auf dem Mac einrichten
SSH-Verbindung zu einem privaten Server über einen Plattformserver in EC2
Legen Sie den Google Cloud-Dienstkontoschlüssel in Heroku fest
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
[ROS] So schreiben Sie Publisher und Subscriber auf einen Knoten
Richten Sie Python 3.4 unter Ubuntu ein
Richten Sie Polyglot unter Windows ein
Erstellen eines sequentiellen Tensorflow-Modells mit einem zu MNIST hinzugefügten Originalbild
Python: Einführung in Flask: Erstellen einer Nummernidentifizierungs-App mit MNIST
So erstellen Sie eine Python-Umgebung mit Virtualenv unter Ubuntu 18.04 LTS
Richten Sie einen yum-Repository-Server unter CentOS 7 ein und verweisen Sie lokal und von anderen Servern usw. darauf.
Erstellen Sie mit TensorFlow eine Gesichtserkennung
Richten Sie die Python-Umgebung unter CentOS ein
So installieren Sie TensorFlow unter CentOS 7
Verwenden einer seriellen Konsole unter Ubuntu 20.04
Führen Sie TensorFlow2 auf dem VPS-Server aus
Erstellen eines Lernmodells mit MNIST
Eine Geschichte, die es aufgegeben hat, JavaScripthon unter Windows auszuführen.
Versuchen Sie mit einem linearen Regressionsmodell auf Android [PyTorch Mobile] zu schließen
Senden Sie E-Mails mit mailx an einen mit Python eingerichteten Dummy-SMTP-Server.
Die Geschichte, den Versuch aufzugeben, mit Heroku eine Verbindung zu MySQL herzustellen
Versuchen Sie ernsthaft, eine Vim-Testumgebung einzurichten (für Python).
Richten Sie mit http.server in Python 3 in 30 Sekunden einen lokalen Webserver ein
Eine Geschichte über einen Anfänger, der sich bemüht, CentOS 8 einzurichten (Verfahrensnotiz)