PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Videoframes online in VisualBasic-Array einlesen



malthy
05.07.2007, 12:03
Hallo zusammen!

Ich habe eine erst mal noch etwas allgemeinere Frage weil ich noch in der Planungsphase des entsprechenden Projektes bin. Entschuldigt übrigens, sollte ich ein passendes Thema hier im Forum übersehen haben...

Um mich kurz zu fassen: Ich habe eine Funkkamera, die ich in kürze auf meinen Roboter montieren werde. Ich möchte die Kamerabilder in Visual Basic (im Moment VisualBasic 2005 Express) auswerten – was genau ich da machen will, ist hier jetzt ja erst mal egal. Ich habe mich bisher nicht konkret mit diesem Basic befasst, programmiere aber seit langem in verschiedenen Basic-Dialekten (und anderen Sprachen) und werde mich dementsprechend (hoffentlich) halbwegs zügig eingewöhnen können.
Wie ist es möglich, ein Frame von der Kamera in ein Array einzulesen? Und zwar mit hinreichend hoher Frequenz, so dass das Ganze noch eine Bewegung repräsentiert (also irgendwas >10 frames/sec)? Ich habe mir noch keine Videohardware angeschafft, deshalb wollte ich mal im vorhinein fragen, ob es da besser oder schlechter geeignete Varianten gibt. Es gibt ja z. b. Videohardware, die das Videosignal bereits selbst komprimiert, während andere Hardware das dem Prozessor überlässt. Ich könnte mir vorstellen, dass erstere dem Rechner mehr Zeit für andere Dinge lässt, könnte ich von so einer Hardware profitieren? Hat jemand Erfahrungen, was überhaupt für max. Frameraten möglich sind (abgesehn vom Videosignal macht)?
Seid nicht genervt, wenn ich erstmal so "ins Blaue" frage, ich bin noch dabei, mich ins Thema einzuarbeiten, vielleicht könnt ihr mir ja mit ein paar Tipps und Links helfen.

Vielen Dank! Viele Grüße!
malte

toemchen
05.07.2007, 18:01
Hallo,

zunächst auch mal recht allgemein geantwortet, ohne große Recherche nach anderen Threads:

Es gibt Methoden, ein Standbild z.B. einer Webcam oder eines Grabbers in eine Picture-Box einzulesen, und von dort aus mit irgendeiner Methode auf die Pixelwerte zuzugreifen. Guckst Du unter www.robofriend.de und dort unter "Laserscanner" im Menü, da ist von einem Thread im Roboternetz die Rede. Das ist der Weg zur Information, der mir jetzt aus der hoheln Hand bekannt ist. Suche im Roboternetz nach "Bildverarbeitung" und "Visual Basic" bringt sicher auch was.

AAABER: Visual Basic ist einfach zu langsam. Kann sein, daß es noch irgendwas fertiges zum Handhaben von Videos gibt, aber wenn Du mit selbstgeschriebenem Code in VB auf die Bilder zugreifen willst, kannst Du mit einem Bild alle paar Sekunden zufrieden sein.

Gruß
Tom.

malthy
05.07.2007, 19:22
Danke für die Antwort!

Die Suche hier im Forum war noch nicht so erfolgreich, werde es aber noch mal mit mehr Geduld wiederholen.
Ein Standbild mittels Grabbers einzulesen, klingt etwas schmutzig, direkter kommt man nicht an den Datenstrom? Dass die genannte Methode etwas langsam ist, kann ich mir vorstellen. Aber ansonsten mit einer 380 x 240 Byte-Matrize zu hantieren, kann doch nicht so’n Problem sein. Ich erwäge alternativ noch Matlab zu verwenden, das hat ja extra eine Image Acquisition Toolbox, da Matlab aber erfahrungsgemäß tierisch langsam ist (weil Interpreter), hatte ich gedacht, dass ich mit VB compilierten Code erzeugen kann, mittels dessen ich möglicherweise dann auch irgendwelche dlls verwenden kann, die das eigentliche Einlesen von der Videohardware für mich übernehmen. VB2005 ist ja übrigens auch die .NET Variante von VB - keine Ahnung ob das noch'n Punkt ist...

Nochmals Danke!
malte

NumberFive
06.07.2007, 08:29
Hallo malthy,

was du da suchst ist im Forum schon alles vorhanden bzw. können wir noch basteln aus bestehen Teilen. Ich habe ein Video Server der mit allen PC Cams um gehen kann die ein DirektX fähigen Treiber mit bringen. Aber das tuen sich meines wissens alle. Es gibt ein Dll für SciLab die die daten in eine Array liefert. und dort ein gebunden werden kann.

Des weiteren gibt es ein VideoServer der die Daten per TCP als jgs verschickt und eine DLL die diese dann wieder VB zur verfügung stellt.

Die Frame rate selbst bei der TCP Variante liegt bei bis zu 20 FPS.
Hab e das mal hier mit WLan getestet ich fan schon das man die Bewegug sauber erkennen konnte. Allerdienst habe ich das alles in C++ geschireben
aber die dll's lassen sich zu mindetens in VB 6 ein binden. Mit VB2005 habe ich das noch nicht probiert aber mit meinen anderen ging es auch.

Da Mr. niemand auch noch sowas braucht das man einzel bilder per VB enpfangen kann werde ich auch noch daran arbeiten.

Also wenn ich dich jetzt neugiriegt gemacht habe kannst du dich ja mal melden

gruß

malthy
06.07.2007, 10:39
Hallo,

danke für die Infos! Die TCP-Variante ist ja auch noch etwas "indirekt", aber das scheint ja mal 'ne Möglichkeit zu sein. Was ist denn dabei (zeitlich) der begrenzende Faktor? Also worauf ich hinaus will: bleibt mir zwischen dem Update der Frames noch Rechenkapazität um mit den Daten zu rechnen? Letztlich geht es mir ja natürlich darum...
Gestern Abend hab ich mein Kamerabild mit einer alten Videokarte latenzfrei nach Matlab bekommen. Aber ob ich da auf 20 f/s komme, wenn ich Frame für Frame in ein Array lese, muss ich noch testen - ich bin da sehr skeptisch... Ich melde mich hier sicher bald wieder.

Dank&Gruß
malte

NumberFive
07.07.2007, 08:02
Es soll ja noch ne Möglichkeit ohne TCP geben die ist halt noch nicht fertig.

Der begrenze Facktor für die Frames ist das Packen der Frames in jpg weil sons die Banbreite im Netz nicht reicht und der DirektX treiber der Cam.
Bei USB Devices habe ich es leider schon oft erlebt das die die CPU sehr belasten.

http://www.i-do-more.de/mine-robo/download/RN-Protokoll.zip

Hier findes du meine gesammelten werk zu thema roboter PC Software
vielleich kannst du ja was damit anfangen über ne kleine Rückmeldung würde ich mich freuen

marvin42x
07.07.2007, 09:57
Hallo malthy,

Ich versuche mich auch zurzeit in VB2500. Das Thema Video in VB2005 steht dabei auch bei mir auf der Liste. Falls Du im Zuge der Entwicklung was von deinen Programmen zugänglich machen kannst wäre das eine Bereicherung, da ich auf diesem Gebiet nur über eingeschränkte Fähigkeiten verfüge. Ich werde aber mit der Zeit auch schon besser.
Hier findest Du das, an dem ich gerade mitarbeite:
http://www.marvins-lab.roboterbastler.de/


Netter Gruß
Und viel Erfolg weiterhin

malthy
08.07.2007, 20:13
Ja, ich bleib dran am Thema - wenn's was neues gibt, melde ich mich.

Gruß,
Malte

Lisbeth
26.07.2007, 11:52
Hallo, guck mal unter dem Stichwort "safearrays" im Internet.
Gruß
Lisbeth