Forum: Mikrocontroller und Digitale Elektronik Günstige Kamera zur Objekterkennung


von Michael (Gast)


Lesenswert?

Hallo,

für einen Schüler-Robotikwettbewerb wollen wir eine optische 
Objekterkennung von Spielsteinen mithilfe einer Kamera realisieren. Zur 
Verfügung haben wir die Kamera OV7670, aber eine Neubestellung wäre auch 
möglich.

Mit der Ansteuerung der Kamera auf dem Arduino haben wir aber trotz 
zahlreicher Beispielprogramme noch Schwierigkeiten.

Kennt Ihr ein Tutorial, das die Erfassung von Bildern leicht macht oder 
eine Kamera, die sich leicht im Arduino ansteuern lässt.

Wichtig sind vor allem zwei Dinge:
- die Auflösung lässt sich herunterregeln (Speicherplatzbedarf auf dem 
Arduino) und
- wir wollen die Bilddaten komfortabel erhalten und uns nicht durch 
längere Tutorials quälen

Die Klassifizierung der Objekte erfolgt auf dem Arduino und wird dann 
vermutlich über LED an das Lego-System übertragen.
Die zu erkennenden Objekte haben Durchmesser im Bereich weniger cm und 
stellen sich auf dem Bild dar als:
- blaue Kreise (Zylinder von oben betrachtet)
- grüne Kreise (Kugeln) oder
- grüne Vierecke (Quader)


Viele Grüße
Michael

von pegel (Gast)


Lesenswert?

Das hört sich nach einem stressigen Job für einen Ardu* an.

Wie wäre es mit mindestens einem Raspi oder einer Kamera mit Linux, die 
dann nur die Koordinaten liefert?

von Robinson (Gast)


Lesenswert?

Moin,

warum nehmt ihr nicht einen Raspberry Pi und einer der beiden dazu 
passenden Kameras? Eine hat einen IR-Filter, die andere nicht.

Außerdem gibt es da zahlreiche Beispiele und gerade im Bereich 
Bilderkennung und Auswertung geht da viel mehr.

Zusätzlich habt ihr deutliche Vorteile was Geschwindigkeit und Speicher 
angeht...

Also macht es euch nicht schwerer als notwendig.

von Franz M. (elmo64)


Lesenswert?

Michael schrieb:
> Mit der Ansteuerung der Kamera auf dem Arduino haben wir aber trotz
> zahlreicher Beispielprogramme noch Schwierigkeiten.

Welcher Arduino?
Welche Probleme?

Mittel der Wahl wäre ein Raspi mit OpenCV.

von Sebastian S. (amateur)


Lesenswert?

Grundsätzlich würde ich mal sagen:
Bildverarbeitung (Objekterkennung ist nichts anderes) ist 
rechenintensiv.
Bildverarbeitung ist sehr komplex.
Bildverarbeitung ist nichts für einen Arduino (meine Meinung)!

von Mike J. (linuxmint_user)


Lesenswert?

Also Bilder und Arduino kannst du wieder vergessen.

Bei Arduino kann man fertige Biliotheken nutzen und kommt ohne großen 
Aufwand schnell zu einem Ergebnis, aber eben nur wenn es fertigen 
Quellcode für alles gibt und man das Zeug nur noch zusammenfügen muss.

So ein kleiner AVR Atmega328 mit seinen 2kbyte SRAM wird kein noch so 
kleines Kamera-Bild in den Speicher laden können. Selbst einer der 
größeren AVR Controller hat da keine vielen Möglichkeiten. Der Aufwand 
wäre extrem groß, das ist so als wolle man mit einem Spielzeugbagger ein 
Haus abreißen.


Wenn du kein Jahr für die Einarbeitung hast und auch irgend wann zu 
einem Ziel kommen willst, dann hole dir so einen RaspBerryPi (oder auch 
die Zero-Version davon könnte ausreichen), programmiere in C++ oder 
Python, lass dir einfach ein Bild von der Kamera übergeben (gute 
Beispiele im Netz und viel Support bei Fragen) und wende dort dann 
bekannte Routinen an (Sobel-Filter um de Rand zu finden) und dann mit 
der Rand-Information gerade Linien erkennen zu können und daraus dann 
das Muster eines Lego-Bausteins erkennen zu können.

Du wirst trotz all dieser Rechenpower vielleicht nicht mal 1 Bild pro 
Sekunde abarbeiten können!
(ein RaspBerryPi Zero braucht 1,1W wenn die Kamera aktiv ist und noch 
mal zusätzliche 0,4W wenn der CPU zu 100% ausgelastet ist)

Ein Pi4 wäre da schon angebracht, Bildverarbeitung benötigt nicht wenige 
Ressourcen und Rechenpower.

Mache es dir vor allem nicht so unglaublich schwer. Den Sobel-Filter 
willst du auch nicht selbst programmieren, das gibt es fertig in den 
OpelCV-Bibliotheken.

Um ein Objekt ordentlich bestimmen zu können brauchst du auch eine 
möglichst gute Auflösung. Je besser das Bild, desto einfacher ist es 
einen Kreis irgend wo zu erkennen.


Bei dem RaspBerryPi gibt es so ein rundes 
Kamera-Linse-Fokus-Einstell-Dingens, damit kannst du den Fokus gut 
einstellen (fix-fokus) und das Bild damit scharf stellen.


Ein paar Tipps:
- An deiner Stelle würde ich es aber erst ein mal an deinem Laptop 
probieren bevor du dich in Arbeit stürzt die für dich unbekannt ist, wo 
es unbekannte Probleme gibt.
- Es gibt OpenCV als gut nutzbaren Ansatzpunkt für die Bilderkennung.
- Jetzt solltest du erst mal eine grafische Oberfläche schaffen (mit C#) 
um dir die Resultate der Bildverarbeitung anschauen zu können.
- Eine normale Webcam reicht erst mal völlig aus um das alles zu 
probieren.

: Bearbeitet durch User
von pegel (Gast)


Lesenswert?

OpenCV ist ja eine heiße Sache!

Hatte immer Angst, dass es zu kompliziert für mich ist.

Jetzt sehe ich mir gerade alle Teile dieses Python Tutorials auf YT an:

OpenCV Python Tutorial For Beginners

Ist zwar Englisch, aber der macht das sehr gut und verständlich.

von Timmo H. (masterfx)


Lesenswert?

Schau dir mal esp32-Cam an, Gesichtserkennung läuft da mit 1-2 fps.

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.