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
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?
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.
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.
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)!
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.