Dies ist eine alte Version des Dokuments!
Work in Progress: Texte sind noch falsch/unvollständig
Man kann Haar Kaskaden benutzen um spezielle Objekte zu erkennen. Dafür muss man diese aber erst einmal mit positiven (Bilder die das gesuchte Objekt beinhalten) und negativen trainieren.
Wir haben uns dabei nach erst für einen Algemeinen Überlick nach diesem diesem Tutorial gerichtet.
Allgemein sei gesagt das man mit wenig Erfahrung von Kaskaden viel mehr Zeit zum Trainieren der Kaskaden verbraucht. Im Laufe unseres Projektes hat sich der Zeitaufwand des Trainieren von Kaskaden enorm verbessert, so weit das man eventuell nur noch einen Server brauch um allen eine Linux Umgebung zu ermöglichen.
Dieses Projekt muss nicht in Linux gemacht aber unsere folgenden Anleitungen und Scripte sind für Linux geschrieben
Es gibt mindestens zwei Möglichkeiten um openCV mit dem dev Package (wir brauchen das Dev Package z.B. zum trainieren der Kaskaden) der eine weg ist es einfach über den Package Manager einer Linux Distribution zu installieren oder das Projekt selbst mit cmake zu bauen was auch gut und schnell möglich ist. Für die zweite Lösung gibt es eine gute Anleitung im offiziellen openCV Doc.
Das oben genannte Tutorial ist auch als geschriebene Version von uns Verfügbar
TODO: Script fertig schreiben, Text verbessern und fixen das bei der Ordner Struktur keien Box mehr drum ist
Um das eigentliche Trainieren und Testen einer Kaskade zu vereinfachehn haben wir ein Bash Script geschrieben.
Das Script liest die Paramter aus einer einfach zu editierenden Config Datei und macht den Rest alleine. Dabei zeigt an wie weit es ist und leitet den output einzelner Programme in getrennte Output Dateien.
Es ist so geschrieben das man es für das einfache Trainieren mehrerer Kaskaden benutzen kann und immer nur eine neue config Datei erstellen muss.
Ordner Struktur
Ordner in dem man arbeitet AKETS.sh cascade_0 AKETS.conf cascade_1 AKETS.conf
Ausführen tut man das Skript wenn man im gleichen Ordner ist mit
./AKETS.sh
oder wenn man in einem Unterordner ist mit
../AKETS.sh
.
Dieser Teil soll beschreiben welche Parameter welchen Einfluss auf die Kaskade haben. openCV Doc Beispiel
Man kann nur so viele Samples mit opencv_createsamples erstellen wie negative Bilder vorhanden sind. Also wenn z.B. 200 negative vorhanden sind kann man man mit einem positiven auch nur 200 Bilder erstellen.
Der weg ist es dann die anzahl der positiven Bilder zu erhöhen, auch wenn es die selben sind. Da durch die zufällige Plazierung von opencv_createsamples andere Bilder erstellt werden.
Dieser Parameter gibt an welche Art von Feature man benutzen soll.
HAAR richtet sich nach der 2001 wissentschaftlichen Arbeit von Paul/Viola: Rapid Object Detection using a Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition„
LBP richtet sich nach der 2007er wissentschafltichen Arbeit von Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li: „Learning Multi-scale Block Local Binary Patterns for Face Recognition“
Am Anfang haben wir immer den Feature Type HAAR benutzt doch jüngste Ergebnisse zeigen das LBP, anders als erst gedacht, doch sehr effiktiv sein kann.
Diese drei Parameter geben an wie ein positives Bild was auf negative drauf projeziert wird, gedreht wird.
Beispiel:
Steht für die maximale Änderung der Intensität
Beispiel
Zum Testen der Kaskaden an Bildern und Videos haben ein kleines Python3 Programm geschrieben was nichts mehr macht ausser die Kaskaden auf das Bild/Video anzuwenden.
Die Syntax ist:
python3 cascade_test_img.py pfad_zu_bild pfad_zu_kaskade
für das testen an Bildern. Für das Video Programm ist es genauso.
Beispiel:
python3 cascade_test_img.py first_frame.png cascade.xml
TODO: Test Script beinhaltet nur img test Code
TODO
Man kann einen externen Server mieten um wenn viel Rechenarbeit von nöten ist nicht seinen eigenen Computer benutzen zu müssen. Außerdem kann dies genutzt werden um eine Linux Umgebung für Windows Nutzer bereit zu stellen.
Wir haben uns dabei für den Dienst Azure von Microsoft entschieden da sie jedem Studenten 100 USD Guthaben geben um damit zu machen was man will. Link um Fortschritt der laufenden Kaskade zu sehen: