Hi,
und was für ein Programm/software hast du ?
Druckbare Version
Hi,
und was für ein Programm/software hast du ?
Hallo minium,
die Software habe ich komplett selbst geschrieben. Um eine Figur zu finden, wird das aufgenommene Bild erstmal in ein binäres umgewandelt, alle Pixel, die unter einem Schwellwert liegen werden schwarz, die restlichen weiss. Dann wird nach einem schwarzen Pixel gesucht und ein Fenster um ihn so gebildet, dass dessen Rahmen kein einziges schwarzes Pixel berührt. Danach wird das Bild im Fenster zu einer 16*16-Matrix komprimiert und mit einem Bild der zu erkennenden Figur verglichen. Sollten mehr als 200 Pixel miteinander übereinstimmen, gilt die Figur als erkannt und wird in eine Liste eigetragen. Dann wird die Figur im Fenster mit weiss ausgefüllt und wieder nach einem schwarzen Punkt gesucht, Fenster gebildet, verglichen usw..., solange bis im Bild kein einziges schwarzes Pixel mehr ist. Dann wird die "größte" erkannte Figur in der Liste ermittelt und ja nach ihrer Position dreht sich der Roboter nach links oder nach rechts oder fährt von oder zu ihr. Sollte die Liste leer sein, stoppt der Bot.
Leider kann ich euch kein Video davon zeigen, da das Subsystem und die Harware des Roboters wegen grober Fehler bei der Planung im Moment komplett umdesignt wird. Ist aber in ca 2 Wochen fertig.
MfG Mark
Interessanter Algo. Auf nem Atmega kommen wir da wohl locker auch auf 2-3 Frames pro Minute ;-)
Was mich interessieren würde, ist deine Entwicklungsumgebung, die Eingesetzte Hard- und Software dafür.
MfG MeckPommER
Hallo MeckPommER,
als Entwicklungsumgebung benutzte ich WinARM mit dem arm-elf-gcc/g++.
Die Hardware besteht aus dem LPC2138-Modul http://cgi.ebay.de/ARM7-Philips-LPC2...QQcmdZViewItem,
einem Subsystem aus einem AtMega32 für die Motorsteuerung(L298 und RB35-Motoren) und Servos und einem zweiten Mega32 für eine kleine Tastatur und für die Überwachung von Strom und Spannung.
Die Kamera wird direkt an den LPC2138 angeschlossen. Bei jedem HSync wird ein IRQ ausgelöst, in der ISR werden dann die Pixel eingelesen und gespeichert. Sobald ein Frame komplett übertragen wurde, wird der Frame-Zeiger verändert, sodass das Frame bearbeitet werden kann, wärend ein das nächste parallel dazu eingelesen wird.
Gerade das war eines der grösten Fehler bei der Planung. Der Controller verbrauchte einfach zu viel Zeit, um ein Frame zu empfangen, weil er ja während der ganzen HSync beschäftigt war. Irgendwann kam mir die Idee, zwei externe RAMs zu benutzen. Ein Frame wird in das eine RAM eingelesen, der µC verarbeitet inzwischen den Inhalt des zweiten. Dann werden die Daten- und Adreassbusse der beiden RAMs getauscht. Da ich dann aber über 20 Logig-ICs brauchen würde, hab ich mir überlegt, ein enzelnes externes RAM zu benutzen. Ein Frame wird von der Cam reingeschrieben und in der inaktiven Zeit(VSync) wird es vom LPC2138 in sein internes RAM übertragen. So könnte man die mögliche Zeit für die Verarbeitung eines Frames bis zu 10 mal erhöhen.
Was meinst Du mit Software? Für die Entwicklung benutze ich nur den Compiler, weitere Tools habe ich nicht.Zitat:
...die Eingesetzte ... Software dafür.
MfG Mark
Das ich daran nicht gedacht habe... die Bilder Binär umzuwandeln!
Wie sieht bei dir der Schwellwert aus? Bzw könntest du das genauer erklären?
man kann z.B. alle Grauwerte des Bildes addieren und durch 2 Teilen
aber das braucht halt lange. Ich hab bei einem Projekt einfach
die 2 Bilddiagonalen genommen und da die Grauwerte addiert, das ergebnis durch 2 dividiert. man kann auch gewichten, also beispielsweise nur den zentralen Bildbereich mitteln und daraus nen Schwellenwert errechnen oder oder oder
Ich hab einen festen Schwellwert von 40, den ich experimentell ermittelt habe. Damit gab es bei fast jeden Lichtverhältnissen keine Probleme.
MfG Mark
Häufig arbeitet man bei der Bilderkennung ja mit Neuronalen Netzen, evtl. findest Du noch ein paar Ideen, wenn Du dich damit mal beschäftigst.
Hallo Herkulase,
das habe ich auch vor, aber erst wenn ich das Board mit dem AP7000 besitze. Das Problem bei KNNs+Bilderkennung ist, dass man für die sehr vielen Gewichte extrem viel Speicher benötigt, den der LPC2138 nicht hat.
MfG Mark
Das hängt aber v.A. von der Architektur des Netzes ab! SOMs z.B. benötigen EIngabemuster (in Pixeln) x Ausgabemuster Gewichte, also im bereich von einigen 100 bis 1000. Natürlich reicht das nicht für eine komplexe optische Steuerung, aber um eine Linie abzufahren sollte das doch schon reichen.
Wieviel Speicher hat denn der AP7000? Hab es auf die SChnelle nicht rausgefunden.
Gruß
Gerald