GithubHelp home page GithubHelp logo

mynn's Introduction

Einfaches neuronales Netz zur Erkennung von Ziffern

Implementierung eines einfachen neuronalen Netzes zur Erkennung von Ziffern. Der Algorithmus basiert auf dem, im Buch von Tariq Rashid 1 vorgestellten Algorithmus. Der Autor hat auch den Python-Code zu seinem Buch in Github abgelegt 2.

Unter mynnKlasse ist eine Cpp Implementierung von diesem Algorithmus zu finden.

Um dieses neuronale Netz praktisch zu testen und zu nutzen zu können, wird unter [mynncam] das in mynnKlasse erstellte und trainierte neuronale Netz genutzt, um per Webcam einzelne Ziffern zu erkennen. Dieses Programm läuft unter Windows und Linux, sowie als App auf einem Android Device.

Linux / Windows

Android

Als Framework für beide Programme wird QT in der Version 5.15.2 genutzt. 3. Da sich die Schnittstelle zwischen QML und den Multimedia Klassen in QT6 stark geändert hat, kann QT in der Version 6.x nicht für mynnwebcam genutzt werden.

MYNN Klasse

Hinweise für die Compilierung der Software

Neben dem QT Framework, wird für Vector-Operationen, wie Transpose, die EigenLib 4 5 genutzt. Hier muss der Include-Pfad in der Datei mynn_eigenKlasse.pro angepasst werden:

z.B. INCLUDEPATH += C:\work\EigenLib\eigen-3.4.0

Die Software sollte als Release gebaut werden, da ansonsten die Berechnung des neuronalen Netzes deutlich länger dauert.

Nutzung der Software

Die MNIST Trainings- und Testfiles können im cvs Format von 6 heruntergeladen werden.

mynn.exe bzw. mynn hat folgende Eingangsparameter:

 -t Trainingsdatensatz
 --cs berechnet die Scorecard mit dem übergebenen Testdatensatz
 --wih gelernte Input – Hiddenlayer Werte
 --who gelernte Hidden – Output Werte
 --swih speichert die gelernten „Input – Hiddenlayer „Werte ab
 --swho speichert die gelernten „Hidden – Outputlayer“ Werte ab
Beispiel:

Trainieren und testen vom neuronalen Netz:

mynn -t mnist_train.csv –cs mnist_test.csv

Trainieren und testen vom neuronalen Netz inkl. abspeichnern der gelernten Werte:

mynn -t mnist_train.csv –cs mnist_test.csv --swih wih.cvs --swho who.cvs

MYNN-Webcam

In diesem Beispiel wird die in mynnKlasse erstellte Klasse, etwas angepasst, genutzt um Ziffern per Webcam bzw. der Smartphone-Kamera zu erkennen.

MYNN-APP

Als Basis für die Software, dient das Beispiel von Stephen Quan 7 zur Nutzung der QAbstractVideoFilter Klasse von QT. Auch hier wird die EigenLib 4 genutzt. Zur Bildaufbereitung wird die OpenCV Libary 8 verwendet. Getestet wurde die Software unter Windows mit der OpenCV Version 4.5.2 und Android mit der Version 4.5.4, siehe 9 bzw. 10. Unter Linux wurde, die mit der Linux-Distribution ausgelieferte, OpenCV Version genutzt.

Architektur


Main: Hier werden die Klassen instanziert und die Verbindung zur QML GUI hergestellt.
MynnWrapper: Initialisiert das neuronale Netz und berechnet aus dem Bild die erkannte Ziffer.
Mynn: Neuronale Netz zur Berechnung der erkannten Ziffer.
MyImageProvider: Sendet das in MyFilter berarbeitete Bild an die QML GUI.
MyFilter: Wandelt das Kamerabild in ein Schwarzweiss-Bild um. Reduziert die Bildgroeße auf die fuer das neuronale Netz benoetigte Groesse von 28x28 Pixeln.
MyFilterRunnable: Stellt die Schnittstelle zwischen Kamera und QML GUI dar.

Hinweise für die Compilierung der Software

Anpassung der *.pro Datei

Je nach dem für welches Betriebssytem, die Software erstellt werden soll, müssen die Variablen, angepasst werden.

Anpassung Include-Pfad für die EigenLib:

z.B. INCLUDEPATH += C:\work\EigenLib\eigen-3.4.0

Anpassung der OPENCV_ANDROID_SDK_PATH Variable

z.B. OPENCV_ANDROID_SDK_PATH = /home/thomas/Spielwiese/OpenCV-android-sdk_4_5_4/

Hinweis für Windows:
Damit die OpenCV Libaries beim Ausführen der Software gefunden werden, muss die Windows Umgebungsvariable PATH muss auf die OpenCV Binaries gesetzt werden.
Beispiel:

Path=C:\OpenCV-MinGW-Build-OpenCV-4.5.2-x64\x64\mingw\bin

Hinweis für Linux:
Hier wurden die mit der Linux-Distribution ausgelieferte OpenCV Version genutzt. Ggf. müssen die Variablen INCLUDEPATH und LIBS für OpenCV in mynn_eigenKlasse.pro angepasst werden.

Anpassung QT Creator Einstellungen:

Für das Deployment der wih.cvs & who.cvs Dateien, muss im QT Creator unter Einstellung zur Ausführung „install“ bei Make arguments angeben werden. Damit werden diese Dateinen in Build-Verzeichnis kopiert.

Hinweis für Android:
Als Target-Architektur wird arm64-v8a verwendet.
Deshalb darf im QT Creator unter Projekt Build Einstellungen, nur die arm64-v8a ABI ausgewählt sein.

Referenzen

Footnotes

  1. Buch: Neuronale Netze selbst programmieren von Tariq Rashid
    https://dpunkt.de/produkt/neuronale-netze-selbst-programmieren

  2. https://github.com/makeyourownneuralnetwork/makeyourownneuralnetwork

  3. https://www.qt.io/

  4. https://eigen.tuxfamily.org 2

  5. https://gitlab.com/libeigen/eigen/-/releases/3.4.0

  6. https://pjreddie.com/projects/mnist-in-csv/

  7. https://github.com/stephenquan/MyVideoFilterApp

  8. https://opencv.org/

  9. https://opencv.org/releases/

  10. https://github.com/huihut/OpenCV-MinGW-Build

mynn's People

Contributors

thw73 avatar thomas-strafrac avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.