PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Objektverfolgung/Farbtracker in Java



Goblin
07.05.2006, 10:01
Tagchen.

Ich hab mir mal wieder ein kleines Projekt für zwischendurch gegönnt welches ich immer schon gemacht haben wollte. Es geht darum, dass eine Webcam auf 2 Servos montiert ist und über eine Java-Software gesteuert wird. Sie soll eigenständig Objekten folgen. Diese Objekte hab ich ganz simpel über ihre Farbe getrennt. In der Software gibt es eine Funktion dass man auf eine Stelle im Kamerabild klickt und die Farbe dieser Stelle und der benachbarten Pixel wird zur Referenzfarbe verrechnet. Dann gibt es einen einstellbaren Grenzwert innerhalb dessen die Farbe erkannt wird. Die erkannten Pixel werden im Bild markiert (funktioniert noch nicht ganz super). Das Kamerabild ist virtuell in 5 Bereiche unterteilt. Eine Mitte und 4 Ränder. Der Algorithmus funzt jetzt so, dass erst berechnet wird wieviele der erkannten Pixel (prozentuell) in den jeweiligen Bereichen liegen. Liegt der Großteil im mittleren Feld, so wird nichts getan. Steigt der Wert über einen Grenzwert in einer der Randbereiche, so wird die Kamera nachgesteuert. Simpel, aber es funktioniert. Noch ein paar Bilder und ein Video (4.5 Mb). Ach und zu den Fotos muss man noch sagen: Das Steckbrett enthält eigentlich nur die Verbindung zwischen Experimentierplatine und Servos. Der andere Kram gehört nicht dazu! :) War mal wieder zu faul zum Aufräumen des Steckbretts.

http://img153.imageshack.us/img153/2623/followme16ha.jpg

http://img153.imageshack.us/img153/1224/followme22jl.jpg

http://img226.imageshack.us/img226/7931/followme38mw.jpg

und das Video:

http://video.google.com/videoplay?docid=-2113203783154249967

CowZ
07.05.2006, 11:32
Cool :) Sieht gut aus :)

Aber das Verfolgen funktioniert ja doch recht ruck-artig.. Vielleicht solltest du das Bild in noch mehr Bereiche aufteilen..

Gruß, CowZ

Goblin
07.05.2006, 11:39
Das liegt vor allem an der Hardware. Die Servos machen zzt. nur 15 Steps pro 90°, was eindeutig zu wenig ist.

michaelb
07.05.2006, 12:46
Hi,
sieht echt gut aus!!
Kannste mal was näheres über das Java Programm posten?
Einen Screenshot oder so?
Kannste mal ein größeres Foto von dem Experimentierboard machen?
Mit welcher Sprache hast du das µC Programm geschrieben?
Gruß Michi

Goblin
07.05.2006, 12:59
Die Firmware ist in Bascom geschrieben. Foto vom Experimentierboard gibts hier (http://wwwhomes.uni-bielefeld.de/jhartmann2/avr-testplatine/bilder.html) in alter Version. Neue kann ich auch mal irgendwann machen.

Screenshot vom Java-Prog:

http://img138.imageshack.us/img138/6972/followmescreenie7fx.jpg

ragnar
07.05.2006, 13:24
Hi, ich hätte auch mal ein paar Fragen:
- Was genau macht der uC, was das Applet ?
- Welche Webcam ist das und wie liest du die Bilder in Java ein ?
- Wieviele Pixel wertest du aus (Auflösung) ?
- Wie schnell läuft das ganze (FPS) ?

Ragnar

Goblin
07.05.2006, 14:01
das ganze laeuft bei maximal 20 fps (ginge wohl auch schneller) und 320x240 pixeln auflösung. der µc nimmt über rs232 fundamentale steuerbefehle entgegen und steuert den servo.

Manu99999999
07.05.2006, 16:52
Echt geil das Ding!

Kann man das immer nur mit der Software steuern oder kann man das
Programm theoretisch auf nen microcontroller überspielen...?
=D>

Manu99999999
07.05.2006, 16:53
Echt geil das Ding!

Kann man das immer nur mit der Software steuern oder kann man das
Programm theoretisch auf nen microcontroller überspielen...?
=D>

CowZ
07.05.2006, 16:55
Stimmt. Das Programm nur für den µC wäre schon geil :) Naja.. auf meinem Bot soll sowas ja auch mal kommen, wird aber noch Jahre dauern.

Denke mal, dass das zuviele Ressourcen beansprucht..

Gruß, CowZ

raoul4
07.05.2006, 17:12
ach das gibts doch schon längst fürn µC :) die cmucam2. is halt nur ein bisschen teuer...

mfg

CowZ
07.05.2006, 17:23
Ja... Kaufen kann jeder... Dann kann ich mir auch gleich n fertigen Roboter kaufen ;)

Goblin
07.05.2006, 17:24
man könnte einfach statt ner webcam ne funk-cam benutzen. die schliesst du über ne interne oder externe tv-karte an. dann kannst du die bilder am rechner verrechnen und dem bot über funk die steuersignale geben.

CowZ
07.05.2006, 17:25
ja klar...

Aber Code, der allein auf einem µC läuft wär schon geiler :)

(Trotzdem cooles Projekt ;))

stochri
07.05.2006, 18:21
Hallo Goblin,
sieht nicht schlecht aus. Sowas habe ich auch schon mal gemacht, allerdings war dort mein Ziel, eine Gesichtsverfolgung zu realiseiren.
Die Kamera ohne ruckeln nachzusteuern war dabei etwas schwierig, weil die Bildaufnahme zu langsam war. Mein System bestand aus einem Matlab-Treiber zur Bildaufnahme ( der war sehr langsam ), LabView als Auswertesoftware und ein MC16 Mikrocontroller Board zur Servosteuerung.

Die Idee, das Bild in verschiedene Bereiche zu teilen und erst dann zu reagieren, wenn das Objekt in einen neuen Bereich eintritt, finde ich ganz gut.

Gruss,
stochri

Goblin
07.05.2006, 21:48
wie hattest du denn die position des gesichts erfasst? auch anhand der farbe oder mit pattern matching?

stochri
07.05.2006, 22:14
Nur anhand der Farbe. Man sollte dazu eine Webkamera haben, die einigermßen farbtreu ist. Mit meiner alten Logitech Messenger war es relativ störbehaftet, mit der neuen Pro 4000 geht's viel besser. Es gibt relativ viele wissentschaftliche Artikel, die Farbe als Hauptmerkmal für die Gesichtslokalisation beschreiben.
Ich habe als Referenzvektor einfach die mittlere Gesichtsfarbe verwendet. Das funktionierte einigermaßen gut, wenn sich die Beleuchtung nicht alzu stark ändert.
Um die Farbe zu extrahieren, habe ich einfach die Beleuchtung im HSV Raum normiert, so wie in der ASURO-Lokalisation https://www.roboternetz.de/phpBB2/viewtopic.php?t=15762&postdays=0&postorder=asc&start=0

Mit Deinem Aufbau müsstet Du eigentlich ganz gut ein Gesicht verfolgen können ...