Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert die Sache mit dem image processing ?


von Jackob F. (friedrichjackob)


Lesenswert?

Hallo community, ich habe vor einer weile angefangen mich mit 
microcontroller zu beschäftigen, doch bin ich nun auf ein Problem 
gestoßen, dass mir Schwierigkeiten bereitet. Ich habe einen Atmega328p 
controller (könnte auch umkaufen auf PIC oder arm) und wollte wissen wie 
ich mit so einem chip Bildanalysen durchführen kann (image processing)? 
Ersteinmal müsste ich wissen wie ich eine Kamera mit dem chip verbunden 
bekomme und wie diese Bilder dann gespeichert werden, oder ob sie 
überhaupt langfristig gespeichert werden und nicht nur im 
Zwischenspeicher der Kamera. Zudem stellt sich mir auch die Frage wie 
ich auf diese Bilder zugreifen kann und in welchem Format sie vorliegen? 
Eine verweis auf einen externen Link wäre mir auch ausreichen, wobei es 
egal ist ob dieser in englisch oder deutsch ist.

von Teo D. (teoderix)


Lesenswert?


von Dergute W. (derguteweka)


Lesenswert?

Moin,

Chips, die fuer sowas vorgesehen sind, haben extra-Hardware eingebaut, 
also z.b. ein Kamerainterface, wie MIPI-CSI oder einen parallelen Bus, 
ueber den die einzelnen Pixel mit einer extra Pixelclock und evtl. noch 
extra Signalen wie HSYNC und VSYNC reingetaktet werden koennen.
Hinter diesen Pins gibts dann einen DMA Controller, der die ganzen 
Bilddaten direkt ins RAM schaufeln kann und z.b. nach jedem Bild einen 
Interrupt ausloesen kann. In welcher Form die Pixel dann im Speicher 
rumliegen, kommt letztlich schon auf die angeschlossene Kamera an; 
manchmal kann das HW-Interface auch noch ein bisschen dran drehen, z.b. 
irgendwelche RGB->YUV Wandlungen mit Chromasubsampling machen.
Man guckt, dass man moeglichst viel in Hardware giesst, weil Bearbeitung 
von grossen Pixelmengen die CPU immer ziemlich schnell ueberlastet.

Der Prozessoer auf dem RasPi hat so ein Kamerainterface - weiss nicht, 
wieviel darueber schon in oeffentlich erhaltbaren Datenblaettern steht, 
aber der waere wahrscheinlich ein Einstiegspunkt.

Gruss
WK

von Jackob F. (friedrichjackob)


Lesenswert?

Also ist das nicht möglich mit einer solchen Kamera ? 
(http://www.ebay.de/itm/1Pcs-OV7670-Camera-Module-640X480-Lens-CMOS-For-Arduino-VGA-SCCB-New-QR-/291701705651?hash=item43eac6cbb3:g:UrAAAOSwwpdW25oT)

Welche chips sind denn für solche Bildverarbeitung vorgesehen? Und unter 
welcher Kategorie fallen solche Kameras die in eine MIPI-CSI 
Schnittstelle passen ?

von Carl D. (jcw2)


Lesenswert?

Wenn dich wirklich Bildverarbeitung interessiert (und du mEn am Anfang 
stehst), dann Kauf dir einen Raspi mit Kamera und hol dir OpenCV. 
Bildverarbeitung geht sicher auch irgendwie auf AVR/PIC(<24), aber nur 
wenn man sich in der Materie gut auskennt. Zum erlernen selbiger 
ungeeignet, weil viel zu klein/speziell/...

BTW, bloß weil ein Chinese für sein Produkt ein paar Schlüsselwörter 
einwirft, die Goggle im als zugkräftig für sein Produkt verkauft hat, 
muß man da nicht drauf reinfallen.

30 VGA-Frames pro Sekunde über I2C!
Warum haben wir dann VGA immer analog betrieben,
I2C gab es da doch schon ;-)

: Bearbeitet durch User
von Sigi (Gast)


Lesenswert?

Carl D. schrieb:
> 30 VGA-Frames pro Sekunde über I2C!
> Warum haben wir dann VGA immer analog betrieben,
> I2C gab es da doch schon ;-)

Bei der Kamera wird per I2C (genauer: SCCB)
nur die Kamera-internen Controllerregister
gesteuert, aber nicht das Bild ausgegeben.

Solche Kameras sind aber im nackten Zustand
eher was für FPGAs (damit sehr leicht ansteuerbar)
als für uCs.

von Carl D. (jcw2)


Lesenswert?

Sigi schrieb:
> Carl D. schrieb:
>> 30 VGA-Frames pro Sekunde über I2C!
>> Warum haben wir dann VGA immer analog betrieben,
>> I2C gab es da doch schon ;-)
>
> Bei der Kamera wird per I2C (genauer: SCCB)
> nur die Kamera-internen Controllerregister
> gesteuert, aber nicht das Bild ausgegeben.
>
> Solche Kameras sind aber im nackten Zustand
> eher was für FPGAs (damit sehr leicht ansteuerbar)
> als für uCs.

Es kam ja hoffentlich zum Ausdruck, daß ich den Versuch, über den 
Blickfang "I2C" diese Kamera einen unbedarften Arduino-Besitzer 
anzudienen, verhindern wollte.

von Jackob F. (friedrichjackob)


Lesenswert?

Erst einmal danke für die vielen Antworten.
Ich habe gerade noch ein wenig im Internet gesucht und bin auf eine 
Firma gestoßen die GUMSTIX heißt. Hat vielleicht jemand mit solchen 
Geräten Erfahrungen? Wie wäre es denn dann mit einem gumstix com, einem 
ribbon cable und einer Kamera von denen ?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Jackob F. schrieb:
> Also ist das nicht möglich mit einer solchen Kamera ?
> (Ebay-Artikel Nr. 291701705651)

Weissich nicht, koennte schon sein, dass da "irgendwas" geht. Die Frage 
ist halt: Was? Und wie lange dauert das dann -also wieviele 
Sekundem/Minuten/Stunden muss ich an dem einen Bild rumrechnen - und in 
welchem Speicher des ATMega stehen da die Daten?

Koennt' man schon riskieren, bei dem Preis kann man ja nicht allzuviel 
falsch machen.
Aber ich kann mir nicht vorstellen auf einem ATMega vernuenftig 
Bildverarbeitung (und sei's auch nur 640x480) zu treiben. Obwohl ich da 
schon ein bisschen Vorstellungsvermoegen hab', was man auf ATMegas an 
Signalverarbeitung machen kann.

> Welche chips sind denn für solche Bildverarbeitung vorgesehen?
Chips fuer Handies, Tablets, SecurityCams,...

> Und unter
> welcher Kategorie fallen solche Kameras die in eine MIPI-CSI
> Schnittstelle passen ?

In die Kategorie MIPI-CSI :-) Das ist allerdings keine 
Konsumerschnittstelle, sondern eher so ein Abkommen zwischen den 
Herstellern obiger Chips und den Herstellern von Bildsensoren.

Insgesamt wuerd' ich mal sagen: Investier doch spasshalber mal den 
Gegenwert eines Hefeweizens in das chinesische Modul, und guck', was 
geht. Wenn du da genz schnell an die Grenzen stoesst, dann kauf' dir 
entsprechendes Raspi-Zeugs.

Gruss
WK

von Wolfgang (Gast)


Lesenswert?

Jackob F. schrieb:
> Wie wäre es denn dann mit einem gumstix com, einem
> ribbon cable und einer Kamera von denen ?

Falls du die hier meinst:
https://en.wikipedia.org/wiki/Gumstix

Von Atmega328p sind die weit entfernt. Da steht etwas von ARM.

p.s. Du darfst hier im Forum auch Links posten. Nicht jeder hat Lust, 
deinen Stichworten hinterher zu gogglen.

von Yalu X. (yalu) (Moderator)


Lesenswert?

An einen AVR oder 8-Bit-PIC kannst du bspw. so etwas anschließen:

  http://www.suntekstore.com/goods-14004307-640x480_cmos_camera_module_ov7670_vga_yuv_snr_46_db_with_high_quality_lens.html

Dieses Modul sieht zwar ähnlich aus und hat den gleichen Bildsensor wie
das Modul in deinem E-Bay-Link, hat aber im Gegensatz zu diesem einen
FIFO-Chip eingebaut, der groß genug ist, um ein komplettes Einzelbild
zwischenzuspeichern. Nur dadurch ist es überhaupt möglich, die Daten mit
einem langsamen µC einzulesen. Allzuviel Bildverarbeitung kannst du aber
mit einem 8-Bit-Controller wegen der limitierten Rechenleistung nicht
machen.

Für das Modul aus Ebay musst du selber eine Schaltung mit dem FIFO-Chip
bauen oder einen µC einsetzen, der die Daten direkt vom Bildsensor mit
hoher Geschwindigkeit einlesen kann und die Bilddaten per DMA in den
Hauptspeicher schreibt. Der STM32F4 scheint das zu können:

  http://embeddedprogrammer.blogspot.de/2012/07/hacking-ov7670-camera-module-sccb-cheat.html

Jackob F. schrieb:
> Firma gestoßen die GUMSTIX heißt. Hat vielleicht jemand mit solchen
> Geräten Erfahrungen? Wie wäre es denn dann mit einem gumstix com, einem
> ribbon cable und einer Kamera von denen ?

Das würde sicher ganz gut funktionieren, zumal der ARM auf dem
Modul deutlich mehr Rechenleistung als so ein 8-Bit-Controller hat.

Ich schließe mich aber Carls Vorschlag an:

Carl D. schrieb:
> Wenn dich wirklich Bildverarbeitung interessiert (und du mEn am Anfang
> stehst), dann Kauf dir einen Raspi mit Kamera und hol dir OpenCV.

Da bekommst du für weniger Geld einen noch besseren Prozessor, mehr
Speicher und eine bessere Kamera. Da das Raspberry weiter verbreitet
ist, findest dafür auch sehr viel mehr Informationen, Hilfestellung und
Softwarebeispiele.

von Rolf M. (rmagnus)


Lesenswert?

Die erste Frage sollte doch sein, was überhaupt Ziel des ganzen ist. Was 
soll denn so mit dem Bild angestellt werden und in welcher Zeit?
Generell würde ich einen AVR für eher ungeeignet betrachten, da er nicht 
genug Speicher hat, um ein Bild darin vollständig unterzubringen. Das 
macht den Zugriff sehr umständlich und langsam, und man braucht etwas 
externes, das das Bild lange genug speichert und wahlfreien Zugriff 
darauf erlaubt.
Mit einem Raspi als Bildverarbeitungssystem dürfte man so ziemlich am 
meisten Leistung für sein Geld bekommen.

von S. R. (svenska)


Lesenswert?

Jackob F. schrieb:
> Ich habe einen Atmega328p controller (könnte auch umkaufen auf PIC oder
> arm) und wollte wissen wie ich mit so einem chip Bildanalysen durchführen
> kann (image processing)?

Bildverarbeitung hat erstmal nichts mit dem Controller zu tun. Die 
eigentliche Magie steckt in den Algorithmen, und die kannst du auch auf 
einem stinknormalen PC entwickeln und benutzen.

> Ersteinmal müsste ich wissen wie ich eine Kamera mit dem chip verbunden
> bekomme und wie diese Bilder dann gespeichert werden, oder ob sie
> überhaupt langfristig gespeichert werden und nicht nur im
> Zwischenspeicher der Kamera.

Es gibt analoge und digitale Übertragung, wobei die analoge Variante mit 
dem analogen Fernsehen ausstirbt.

Nimm eine billige USB-Kamera für deinen PC und spiele damit rum. Die 
kannst du auch an ein Raspberry Pi anschließen.

> Zudem stellt sich mir auch die Frage wie ich auf diese Bilder zugreifen
> kann und in welchem Format sie vorliegen?

Dein Betriebssystem hat einen Treiber für die Kamera und dieser Treiber 
kann deiner Anwendung die Bilder geben.

Welches Format du bekommst, hängt von deiner Kamera ab. Normale Webcams 
nutzen oft MJPEG oder unkomprimiertes YUV, bessere Kameras schenken dir 
MPEG4, womit du einen kleinen Mikrocontroller schon überforderst.

Mein Tipp: Kaufe dir eine normale USB-Kamera, schließe die an deinen PC 
an und spiele damit rum. Wenn du damit fertig bist, entwickelst du 
deinen Code für Linux. Und wenn das funktioniert, dann nimmst du ein 
Raspberry Pi und schließt die Kamera da an.

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
Noch kein Account? Hier anmelden.