Image Processing mit Raspberry Pi 3

  • Hallo zusammen!


    Für meine Master-Arbeit möchte ich ein autonomen Roboter programmieren. Dieser soll eine Straße entlang fahren und Kreuzungen, Verkehrsschilder, etc. erkennen. Anschließend soll über die gesammelten Informationen eine Karte des Straßennetzwerks erstellt werden (sowas wie google maps, nur virtuell eben). Die Karte erstelle ich am Laptop.


    Dafür möchte ich ein Raspberry Pi 3 Modell B nutzen.
    Nun bin ich leider auf einige Schwierigkeiten gestoßen. Ich habe bislang nicht herausfinden können, wie ich die Raspberry Pi Kamera "effektiv" in meinem Algorithmus verwenden kann.


    Kann mir jemand sagen, wie ich die Raspberry Pi Kamera in einem C - Code (zum Beispiel über Geany) verwenden kann? Gegebenenfalls auch über Python.


    Ich brauche etwas in dieser Art:
    (Die unteren Befehle existieren nicht; diese dienen nur zur Veranschaulichung)


    //Livevideo: Einstellungen und Start
    video.modus('RGB');
    video.auflösung('640x480');
    video.begin();


    while(1)
    {
    //Aus Video Bild nehmen
    image = video.frame();
       
    //Nun kommt die ganze Bildverabeitung; Ab hier müsste ich klar kommen
    .......
    .......
    .......
    .......
    }


    Also wie zu sehen ist, muss ich im C-Code die Kamera starten und aus dem Video ein Frame mir nehmen und bearbeiten. Danach kommt das nächste Frame und so weiter.


    Selbstverständlich habe ich mich bereits im Web intensiv umgeschaut und auch einiges gefunden. Aber irgendwie funktioniert das alles nicht.


    Vielleicht hat jemand einen guten Link dazu oder hat selber schon mal eine derartige Aufgabe gelöst.


    Für jede Hilfe bin ich dankbar.


    Beste Grüße
    Armend

  • Hallo Armned,
    die OpenCV Bibliothek ist soweit ich weiß auch auf dem Pi lauffähig, damit solltest du die Bilder bekommen können. (Siehe Beispiele aus dem Netz)


    Gruß
    Chris


    PS: Willst du alle Berechnungen mit den begrenzten Rechenresourcen des Pi machen?

  • OpenCV musst du auf jeden Fall verwenden. Guck zum Beispiel mal hier: https://github.com/DexterInd/B…n/Project_Examples/openCV


    Allerdings empfehle ich dir lieber auf Python3 sowie OpenCV3 zu wechseln (erst mit cv3 wird auch python3 unterstützt) da das weitaus schneller und umfangreicher ist, auch wenn es für cv3 im Grunde keine Rolle spielt ob man python2 oder python3 nutzen tut...


    Achte aber auch darauf das du mindestens Python3.5 hast damit OpenCV3.1 funktioniert.


    Den Stream der RaspiCam kannst du auch übers Netzwerk schicken und den PC dann die Berechnungen anstellen lassen - allerdings solltest du dich fragen was passiert wenn die Verbindung zum PC abbricht?


    Die Berechnungen stellen kein Problem dar @ ChrisvA. Selbst auf singlecore Pi's läuft das mit OpenCV gut.

  • chris
    Danke für deinen Tipp. Also an OpenCV hatte ich auch schon gedacht. Aber der Import der Bibliothek in Python wollte irgendwie nicht funktionieren. Deswegen war ich auf der Suche nach einem anderen Weg. Nun habe ich aber das OpenCV nochmal heruntergeladen (jedoch von einer anderen Internetseite) und jetzt klappt es.


    meigrafd
    Also im Moment habe ich Python2 und OpenCV2. Aber ich versuche auf Python3 und OpenCV3 umzusteigen. Danke für den Hinweis.



    Nun noch eine Frage (an alle):
    Hat jemand Erfahrung mit dem Datenaustausch zwischen dem Raspberry Pi 3 und einem Laptop (Windows)?
    Ich habe mir im nach hinein überlegt, den Raspberry Pi 3 für meine Master-Arbeit auf folgende drei Funktionen zu beschränken:
    1) Video aufnehmen
    2) Motoren ansteuern
    3) Datenaustausch zwischen Raspberry Pi 3 und Laptop


    Der Raspberry Pi 3 würde im Straßennetz rumfahren und Bilder an meinem Laptop senden. Am Laptop erfolgt dann die Bildverarbeitung (Spurhalteassistent, Verkehrszeichenerkennung, etc.). Anschließend sendet mein Laptop Anweisungen zum Steuern der Motoren ans Raspberry Pi.


    Im Internet bin ich auf die SSH-Funktion des Raspberry Pi's gestoßen. Für mein Laptop bräuchte ich dann das Tool "Putty".
    Ich befürchte aber, dass die SSH-Funktion nicht automatisierbar ist (zum Beispiel in einem C Code oder Python).


    Das Ganze sollte wie folgt aussehen:
    Raspberry Pi sendet ein Bild an meinem Laptop und schaltet auf Empfang. Empfängt er eine Anweisung zum Ansteuern der Motoren, dann führt er diese durch und sendet wieder ein Bild und so weiter. Das Ganze würde also automatisch ablaufen.


    Ich erhoffe mir, dass durch das Auslagern der Algorithmen für die Bildverarbeitung auf einem Laptop ich mir Rechenzeit einspare und dadurch mein Roboter schneller unterwegs sein kann.


    Für Hinweise wäre ich dankbar.


    Beste Grüße
    Armend

  • Blöde Frage: Wieso ausgerechnet ein Pi wenn der denn garnichts machen muss? Zum ansteuern von Sensoren/Motoren etc wäre ein Mikrocontroller besser geeignet.


    SSH fällt für dein Fall eher flach - damit irgendwelche Daten an den Laptop zu übermitteln ist eher untypisch und auch Quatsch. Nimm einfach einen Socket.

  • Hallo Armend,



    Hat jemand Erfahrung mit dem Datenaustausch zwischen dem Raspberry Pi 3 und einem Laptop (Windows)?


    Das sicherste ist eine Übertragung über eine Socket-Verbindung. Zu diesem Stichwort gibt es reichlich Beispiele.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • meigrafd:
    Du schriebst:

    Quote

    Blöde Frage: Wieso ausgerechnet ein Pi wenn der denn garnichts machen muss? Zum ansteuern von Sensoren/Motoren etc wäre ein Mikrocontroller besser geeignet.


    Diese Sache ist die, dass mein Vorgänger (ein Bachelor-Student) im Rahmen seiner Bachelor-Arbeit einen Roboter, den ich für meine Master-Arbeit verwende, konzipiert hat. Und er verwendete einen Raspberry Pi. Ich kann zwar noch einen Mikrocontroller bestellen, aber ich habe mich für den Pi entschieden, da ich ihn bereits habe.



    Danke an Andreas und meigrafd für den Tipp mit dem Socket.
    Ich mache mich da etwas schlau darüber. Vielleicht klappt es ja.




    Beste Grüße
    Armend

  • Naja es würde ein PiZeroW für die RaspiCam Geschichte völlig reichen. Zum steuern von Sensoren oder Motoren fährst du mit nem AVR besser, insbesondere weil du dann auch Hardware-PWM, Analoge- und externe Interrupt-Pins hast.


    Nur weil dein Vorgänger seine Bachelor-Arbeit damit machte ist das nicht automatisch eine gute/sinnvolle Sache :fies:


    Du solltest dir halt auch Gedanken zur Ausfallsicherheit machen - was passiert wenn die Verbindung zum PC abbricht? Fährt dein Gefährt dann blind über die Strasse und verursacht nen Verkehrschaos?