Guten Tag, ich interessiere mich momentan für die Bildverarbeitung auf einem AVR-uC. Ich habe noch kein konkretes Projekt, möchte mich interessehalber aber mal damit beschäftigen. Nur finde ich im Internet keine Tutorials oder Artikel die mir wirklich weiterhelfen. Wenn ich zum Beispiel eine Kamera an einem AVR anschliesse (mal unabhängig von der Rechenleistung): Wie kann ich aus dieser Kamera ein brauchbares Bild erzeugen und weiterverarbeiten bzw. an einen PC übermitteln? Mir fehlt da komplett der Ansatz zu dem Thema Bildverarbeitung. Der Hintergrund besteht darin, dass ich gerne mal ein Projekt hochziehen möchte wo aktiv die Kamera als "Sensor" genutzt wird um z.B. mit der Umgebung zu interagieren. Wie und wo muss ich da anfangen um langsam aber sicher in die Richtung gehen zu können? Vielen Dank schonmal Gruß
Hans schrieb: > Wie kann ich aus dieser Kamera Welche Kamera? > Wie und wo muss ich da anfangen AVR und Bildverarbeitung ist eine extrem ungünstige Kombination, weil du allein zum Speichern eines Bildes viel RAM brauchst. Und weil so viele Daten schnell nacheinander anfallen. "Viel" und "schnell" passt nicht zu "kByte" und "12MHz"...
Öhmm .... Z.B.: 800 X 600 X 3 macht fast 1,5 Megabyte an Rohdaten im Speicher. Welcher AVR hat soviel RAM?
:
Bearbeitet durch Moderator
Lothar Miller schrieb: > Hans schrieb: >> Wie kann ich aus dieser Kamera > Welche Kamera? Soll erstmal ein gedankenspiel sein. Konkrete Hardware habe ich noch nicht, da ich mich erst in das Thema einlesen möchte. >> Wie und wo muss ich da anfangen > AVR und Bildverarbeitung ist eine extrem ungünstige Kombination, weil du > allein zum Speichern eines Bildes viel RAM brauchst. Und weil so viele > Daten schnell nacheinander anfallen. "Viel" und "schnell" passt nicht zu > "kByte" und "12MHz"... Soll also heißen, wenn es um Bildverarbeitung geht ( Dazu soll auch das Thema mit dem interagieren mit der Umwelt gehören, evtl. gesichtserkennung -SPÄTER) muss ein Leistungstärker Prozessor her. Also eher in Richtung ARM? Grundsätzlich interessiert mich grade die allgemeine Vorgehensweise. Mal angenommen ich habe einen leistungsstarken uC mit viel Speicher und einer Kamera. Wie fang ich an? Wo kann ich mich schlau lesen?
Hans schrieb: > Soll also heißen, wenn es um Bildverarbeitung geht ( Dazu soll auch das > Thema mit dem interagieren mit der Umwelt gehören, evtl. > gesichtserkennung -SPÄTER) muss ein Leistungstärker Prozessor her. > Also eher in Richtung ARM? Klingt nach einer Anwendung für RasPI. > Wie fang ich an? Wo kann ich mich schlau lesen? In der zugehörigen Doku: Raspberry Pi Einführung
Das ganze KANN man mit einem völlig hochgezüchteten µC lösen - aber niemand würde es so tun, da es genau dafür Microprozessoren gibt, die auf vergleichsweise gigantische Ressourcen zugreifen können - und wesentlich billiger sind, als ein hochspezialisierter Mikrocontroller, der eigentlich STEUERN soll und nicht VERARBEITEN - deshalb auch der Name Microcontroller für alles zum Steuern, Microprozessor für alles zum verarbeiten der erhobenen Daten. Bildverarbeitung geht im günstigsten Fall mit einem Raspberry pi und einer Kamera. Oder jedem anderen Gerät, das sowohl eine Kamera, als auch RAM, als auch Prozessorleistung hat.
Hans schrieb: > Wie fang ich an? Wo kann ich mich schlau lesen? Was hast du denn bisher so mit Controllern gemacht? Für mich hört sich deine Frage so an, als wolltest du von Null auf Hundert durchstarten. Wo soll man da anfangen? Es gibt haufenweise Literatur zu Bildverarbeitung, aber da wird selten auf Eigenheiten von Microcontrollern eingegangen. Das ist grundsätzliches Werkzeug welches man erstmal beherrschen muss. Wenn du schon Probleme hast dir vorzustellen wie du Rohdaten von einer Kamera in den Controller bekommst dann solltest du erstmal ne Stufe tiefer einsteigen. Also wie ist denn dein Wissenstand bisher?
Hans schrieb: > Wie fang ich an? Wo kann ich mich schlau lesen? Z.B. im Sourcecode von V4L (Video4Linux). Ein Kameratreiber bildet die Hardware auf ein einheitliches Modell ab und spricht den Chip auf der Kamera direkt an. Dann wüsstest du, was es mit der Ansteuerung auf sich hat. Wenn du allerdings einen Raspberry oder ein ähnliches Linuxboard nähmest, musst du dich um so etwas nicht mehr kümmern und kannst direkt mit Bildverarbeitung weitermachen.
Cyblord ---- schrieb: > Hans schrieb: >> Wie fang ich an? Wo kann ich mich schlau lesen? > > Was hast du denn bisher so mit Controllern gemacht? Für mich hört sich > deine Frage so an, als wolltest du von Null auf Hundert durchstarten. Wo > soll man da anfangen? Es gibt haufenweise Literatur zu Bildverarbeitung, > aber da wird selten auf Eigenheiten von Microcontrollern eingegangen. > Das ist grundsätzliches Werkzeug welches man erstmal beherrschen muss. > Wenn du schon Probleme hast dir vorzustellen wie du Rohdaten von einer > Kamera in den Controller bekommst dann solltest du erstmal ne Stufe > tiefer einsteigen. > > Also wie ist denn dein Wissenstand bisher? Erfahrungen mit Microcontrollern habe ich bereits- allerdings bin ich bisher nie über AVRs hinweggekommen. Bei mir hat es angefangen wie bei jedem anderen (mit blinkenden LEDs) und ich habe mittlerweile das ein oder andere Gerät oder Steuerung erfolgreich in Betrieb genommen. Mein Problem wird eher nicht darin bestehen die Rohdaten aus der Kamera auszulesen, sondern eher diese zu verarbeiten. Ich möchte gerne (irgendwann) dazu kommen eine kleine Gesichtserkennung oder ähnliches zu basteln. Also etwas was bewusst reagiert auf ein Ereignis vor der Kamera. Nur fehlt mir das kleine Stück Faden womit ich anfangen kann. Mir fehlt ganz konkret das Wissen der Verarbeitung. Also : - Wie erstelle ih aus den Rohdaten der Kamera ein Bild (Für den Anfang reicht z.B. ein jpg) - Wie komme ich von diesem Schritt weiter in Richtung z.B. Gesichtserkennung. - Und natürlich die Hardware. Soll heißen: Kann ich das ganze mit einem Leistungsstarken ARM lösen oder sollte ich da wirklich auf Minicomputer mit Betriebssystem zurückgreifen. Wie gesagt ich stehe da echt auf dem Schlauch. Ein Tutorial welches diese Nummer beschreibt habe ich auch noch nicht gefunden. Vielen Dank für die Hilfe ;-)
> - Und natürlich die Hardware. Soll heißen: Kann ich das ganze mit einem > Leistungsstarken ARM lösen oder sollte ich da wirklich auf Minicomputer > mit Betriebssystem zurückgreifen. Leistungsstarker ARM JA! (oder anderer Prozessor) Minicomputer mit Betriebssystem JA! Also kein ODER, sondern ein UND.
Hans schrieb: > Mein Problem wird eher nicht darin bestehen die Rohdaten aus der Kamera > auszulesen doch. Genau da werden deine Probleme erst mal anfangen. > sondern eher diese zu verarbeiten. > Ich möchte gerne (irgendwann) dazu kommen eine kleine Gesichtserkennung > oder ähnliches zu basteln. Also etwas was bewusst reagiert auf ein > Ereignis vor der Kamera. Das konkrete Problem ist zwar nicht trivial, aber ein Bild ist im Speicher auch nur ein Array von Bytes, wobei 1 Byte normalerweise für einen Helligkeitswert steht. > - Wie erstelle ih aus den Rohdaten der Kamera ein Bild (Für den Anfang > reicht z.B. ein jpg) Erst mal musst du die Rohdaten haben. und genau da beginnt auf einem AVR das erste Problem. Du hast nicht den Speicher um ein Bild, das du von der Kamera holst, zwischenspeichern zu können. und für den Anfang willst du kein JPG speichern. Das ist nämlich ausgesprochen kompliziert aus den Rohdaten ein JPG zu erzeugen. > > - Wie komme ich von diesem Schritt weiter in Richtung z.B. > Gesichtserkennung. Gar nicht. Man arbeitet bei der Bildverarbeitung nicht mit JPG Daten im Speicher. JPG ist ein Dateiformat, das darauf ausgelegt ist, kleine Dateien zu ergeben. Um mit diesen Daten irgendwas anfangen zu können, muss man erst mal das JPG wieder in die Rohdaten entpacken. Stell dir meinetwegen eine Analogie zu einem Zip-File vor (das JPG entspricht dem Zip). In diesem zip-File hast du ein File reingegeben, welches Text enthält. Du willst nun nicht eine Textänderung dadurch machen, dass du das Zip-File direkt manipulierst. Das wäre nämlich ausgesprochen schwierig. Statt dessen willst du das Zip-File entpacken, das erhaltene Text-File ändern und dann das veränderte Text-File wieder in ein Zip-Archiv packen. Genauso macht man Bildverarbeitung, wenn man JPG hat. Du wirst einen Teufel tun und direkt am JPG arbeiten. Denn das ist ausgesprochen schwierig, wenn nicht sogar unmöglich. Der Rest ist: * arbeiten mit Arrays * anwenden von Algorithmen auf diese Arrays
:
Bearbeitet durch User
geeignetes Kameramodul ist ein OV7670. Dazu gibt es brauchbare Tutorials, z.B. http://embeddedprogrammer.blogspot.de/2012/07/hacking-ov7670-camera-module-sccb-cheat.html. Du brauchst einen großen Speicher. Dazu nimmst du als erstes ein 8bit-tft 240x320. Darauf kannst du mit dem AVR relativ einfach 1/4 VGA-Bild darstellen. Das wäre der Einstieg.
Karl Heinz schrieb: > wobei 1 Byte normalerweise für einen Helligkeitswert steht. Detaillierter: für den Helligkeitswert einer der drei Farben eines Pixels...
Moin, Ueblicherweise haben dafuer geeignete Prozessoren auch irgendeine Art Hardwarebeschleunigung/DMA, damit nicht der Prozessor die gesamten Daten der Kamera permanent durch die Gegend schaufeln muss. D.h. es gibt irgendein HW-Interface, z.B. MIPI-CSI oder sowas, da haengt der Kamerasensor dran und es erfolgt automatisch und (fast) ohne Zutun der CPU ein Transfer der Bilddaten ins RAM des Prozessors. Das sind dann Rohdaten, z.B. direkt die R,G und B Werte von Pixeln. Gruss WK
Ulrich F. schrieb: > Z.B.: 800 X 600 X 3 macht fast 1,5 Megabyte an Rohdaten im Speicher. > Welcher AVR hat soviel RAM? ist das denn nötig, U.Radig hatte es in einem Webserver mal mit einer RS232 Cam gemacht auf dem ATmega32 http://www.ulrichradig.de/home/index.php/software/avr-webserver-software ich habe ja den Pollin NETIO Webserver nun zu ATmega 1284p erweitert 128k flash und 16k Ram
Karl Heinz schrieb: > Gar nicht. Man arbeitet bei der Bildverarbeitung nicht mit JPG Daten im > Speicher. JPG ist ein Dateiformat, das darauf ausgelegt ist, kleine > Dateien zu ergeben. Um mit diesen Daten irgendwas anfangen zu können, > muss man erst mal das JPG wieder in die Rohdaten entpacken. > Stell dir meinetwegen eine Analogie zu einem Zip-File vor (das JPG > entspricht dem Zip). In diesem zip-File hast du ein File reingegeben, > welches Text enthält. Du willst nun nicht eine Textänderung dadurch > machen, dass du das Zip-File direkt manipulierst. Das wäre nämlich > ausgesprochen schwierig. Statt dessen willst du das Zip-File entpacken, > das erhaltene Text-File ändern und dann das veränderte Text-File wieder > in ein Zip-Archiv packen. Genauso macht man Bildverarbeitung, wenn man > JPG hat. Du wirst einen Teufel tun und direkt am JPG arbeiten. Denn das > ist ausgesprochen schwierig, wenn nicht sogar unmöglich. > > Der Rest ist: > * arbeiten mit Arrays > * anwenden von Algorithmen auf diese Arrays Sehr gut.. das ist schonmal das erste was ich gelernt habe. Da besteht nämlich das Problem.. ich habe noch keinen Plan wie die Bildverarbeitung auf den Ebenen überhaupt funktioniert. Und suche deshalb passende Literatur. Danke schonmal für die Hinweise. Also verstehe ich den groben Verlauf richtig? Ein Mikroprozessor am besten mit Betriebssystem verarbeitet die aufgenommenen Bilddaten und gibt je nach ausgewertem die entsprechenden Befehle an ein uC der dementsprechend steuert?
Joachim B. schrieb: > Ulrich F. schrieb: >> Z.B.: 800 X 600 X 3 macht fast 1,5 Megabyte an Rohdaten im Speicher. >> Welcher AVR hat soviel RAM? > > ist das denn nötig, U.Radig hatte es in einem Webserver mal mit einer > RS232 Cam gemacht auf dem ATmega32 > > http://www.ulrichradig.de/home/index.php/software/avr-webserver-software > > ich habe ja den Pollin NETIO Webserver nun zu ATmega 1284p erweitert > > 128k flash und 16k Ram Geringere Auflösung. ca 120 Bilder pro Stunde Er schleifts nur durch und muss dafür schon Klimmzüge machen. Er muss es in 27 Stückchen hacken. Mustererkennung ist so nicht möglich. Bewegungserkennung erst recht nicht. (min 2 Buffer)
Ulrich F. schrieb: > Geringere Auflösung. > ca 120 Bilder pro Stunde > Er schleifts nur durch und muss dafür schon Klimmzüge machen. > Er muss es in 27 Stückchen hacken. > Mustererkennung ist so nicht möglich. > > Bewegungserkennung erst recht nicht. > (min 2 Buffer) schon klar nur wo hast du solche Anforderung gelesen? Hans schrieb: > Ich habe noch kein konkretes Projekt, möchte mich interessehalber aber > mal damit beschäftigen. > > Nur finde ich im Internet keine Tutorials oder Artikel die mir wirklich > weiterhelfen. > > Wenn ich zum Beispiel eine Kamera an einem AVR anschliesse (mal > unabhängig von der Rechenleistung) und dann wird sofort gesagt geht nicht....... hier war die Frage nach wie und AVR und da habe ich den Weg gezeigt, mehr nicht. Nicht alles was mit dem ARV laufen soll geht nicht Nicht alles was mit dem AVR laufen soll ist sinnvoll aber unmöglich ist fast nichts, ausser eine Drehtür zuknallen.......
> hier war die Frage nach wie und AVR und da habe ich den Weg gezeigt, > mehr nicht. "Gesichtserkennung" steht im Anforderungskatalog! Wie soll das gehen, wenn noch nicht mal das Gesicht in den Speicher passt? Erinnert mich irgendwie an den Kinderspruch: "Woran erkennt man, dass ein Elefant im Kühlschrank war?" An den Fußspuren in der Butter.
Für die Bildsignalverarbeitung bietet sich OpenCV an: http://opencv.org/ http://opencv.org/quickstart.html https://www.semipol.de/wp-content/uploads/2008/07/tutorial.pdf Ein paar Beispiele habe ich auch mal durchgearbeitet: http://www.knoerig.de/Bildsignalverarbeitung.html
Hans schrieb: > Wie und wo muss ich da anfangen um langsam aber sicher in die Richtung > gehen zu können? sicher nicht mit openCV und Gesichtserkennung...
OpenCV bietet erst einmal einen komfortablen Weg, um die Daten von der Kamera in ein Fließkomma/Integer-Feld zu bekommen und dieses dann auch relativ bequem auf den Bildschirm zu bekommen. Das ist der Anfang.
Hans schrieb: > Ein Mikroprozessor am besten mit Betriebssystem verarbeitet die > aufgenommenen Bilddaten und gibt je nach ausgewertem die entsprechenden > Befehle an ein uC der dementsprechend steuert? Kann man so machen - an meine Messmaschinen wurde z.B. manchmal eine Bildverarbeitung einer darauf spezialisierten Firma angebaut, die die Kanten von Werkzeugen erfasst hat und die Koordinaten-Werte an meine Steuerung übermittelt. Das ergab sich so aus der Entwicklung. Aber wenn du sowas "am Stück" entwickelst, brauchst du eigentlich keinen zweiten Prozessor, denn das wird wohl so sein, dass die Bildverarbeitung 99% der Leistung braucht und die Steuerungsaufgabe 1%, das muss man nicht auslagern. Aber wenn es dir leichter fällt und du ein 2-Prozessorsystem sauber implementieren kannst, es schadet auch nicht. Ob dann die Bildverarbeitung ein Slave des Steuerungssystem ist oder umgekehrt, darüber kannst du dann lange philosophieren. Georg
Hans schrieb: > - Wie komme ich von diesem Schritt weiter in Richtung z.B. > Gesichtserkennung. Eine mögliche Vorgehensweise wäre 1) für die "Face-Detection", also um zu bestimmen wo auf dem Kamerabild sich ein Gesicht befindet (wenn überhaupt eins da ist): Viola/Jones, http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.10.6807&rank=8 2) für die "Face-Recognition", also um einem gefundenen Gesicht einen Namen zuzuordnen: Eigengesichter, https://de.wikipedia.org/wiki/Eigengesichter Stand der Technik ist das zwar nicht, aber dafür sind diese Verfahren verhältnismäßig einfach zu implementieren, auch ohne Vorkenntnisse in dem Bereich.
Wenn du wirklich praktisch was machen möchtest, würde ich dir auch empfehlen dich erst mal Schritt für Schritt der Sache zu nähern. Das kann eine Webcam in Verbindung mit OpenCV oder Matlab/Octave sein. In wie weit du dann auf fertige Libs zugreifen möchtest oder als selbst machen willst kannst du dann selber entscheiden. Auf solch einem kleinen System wie einem AVR ist es ein schwieriges (es gab auch schon Leute die haben ein Linux laufen lassen auf so einen Controller) bis unmögliches unterfangen. Eher sinnlos. Alleine schon vom RAM und der Updaterate. Wenn Du dann das ganze Verständnis aufgebaut hast, deine ganzen Algorithmen funktionieren und getestet sind, dann kannst du dir überlegen wie du das ganze auf ein Embedded System portiert. Denn dann hast du auch selbst das Wissen einzuschätzen was deine Plattform für Performance, Ressourcen und Peripherien benötigt.
Joachim B. schrieb: > aber unmöglich ist fast nichts, ausser eine Drehtür zuknallen....... Halte mal den Fuss dazwischen, dann wirds schon gehen...
Hans schrieb: > ich interessiere mich momentan für die Bildverarbeitung auf einem > AVR-uC. Wirkliche Bildverarbeitung kannst du mit AVR schlicht knicken. Viel zu langsam und viel zu wenig RAM. Das heißt aber nicht, daß man nicht auch an den AVR eine Kamera ankoppeln könnte und sogar Bildverarbeitung (wenn auch in sehr, sehr bescheidenen Ausmaßen) damit möglich wäre. Sowas wie die Erkennung und Auswertung des Bildes einer vertikalen Laserlinie z.B. ist realisierbar. Das habe ich selber schonmal gemacht: Gnubbels auf einer leicht gekrümmten Oberfläche auf diesem Weg erfaßt, während ich das Objekt per Schrittmotor bewegt habe, und dann die Meßdaten als DMC interpretiert und decodiert, so daß am Ende der Inhalt des DMC als ASCII-String aus dem UART fiel. > Wenn ich zum Beispiel eine Kamera an einem AVR anschliesse (mal > unabhängig von der Rechenleistung): Wie kann ich aus dieser Kamera ein > brauchbares Bild erzeugen und weiterverarbeiten bzw. an einen PC > übermitteln? Das erste Problem ist, überhaupt eine Kamera zu finden, die du an den AVR koppeln kannst. Ich habe damals ein billiges analoges Kameramodul benutzt, das geht noch am einfachsten an einen AVR zu koppeln. Damals(TM) gab es solche Module noch in SW und mit abschaltbarer Belichtungsautomatik, heute leider nicht mehr. Der Vorteil der analogen Anbindung: Du kannst die ersten Schritte der Bildverarbeitung (Datenreduktion und Merkmalsextraktion) bei bestimmten Anwendungen wie eben dieser Sache mit der Laserlinie sozusagen auslassen. In Wirklichkeit steuerst du natürlich einfach den analogen Kram so, daß der diese Schritte für dich tut. Bei deinem µC kommt dann nur noch an, was er wirklich verarbeiten kann und soll. > Mir fehlt da komplett der Ansatz zu dem Thema Bildverarbeitung. Damit schätzt du dich wohl noch etwas zu gut ein. Dir sind offensichtlich nicht mal die Grundlagen der digitalen Bild- Repräsentation klar, sonst wärest du niemals auf die Idee verfallen, einen AVR zur Bildverarbeitung verwenden zu wollen... Also fang' erstmal damit an: Wie werden Videobilder eigentlich digital repräsentiert? Was kann ich daraus über Speicher- und Rechenzeitbedarf lernen? Schon das ist ein durchaus nicht kleines Feld, was zu beackern ist, bevor man auch nur daran denken kann, mit diesen Repräsentationen dann im Sinne eine echten Bildverarbeitung zu hantieren...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.