PinQam - Steuertool für die RaspiCam

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum,

    ich möchte euch heut mein Projekt PinQam vorstellen. Gestartet als ein kleines Sonntagnachmittags - Regen - Projekt ist es mittlerweile recht Umfangreich geworden. Aufgabe des Tools soll es sein, die Bedienung der RaspiCam über eine GUI zu vereinfachen.

    Grundlage für die Foto/Videofunktionen ist raspistill und raspivid. Hier möchte ich mich nicht mit fremden Federn schmücken, daher der Hinweis.

    Der Verlauf des Projekts ist auf meinem Blog mehr oder weniger dokumentiert. Ich werde ab jetzt Neuigkeiten auch hier veröffentlichen.

    filter.png?w=1200&h=

    rotation.png?w=575

    Warum der Thread?

    Mich würde Interessieren, was potentielle Anwender für Funktionen vermissen. Gerne nehme ich auch Kritik bzw. Verbesserungsvorschläge entgegen, was den Code angeht. Ich bin kein "studierter" Informatiker, eher ein Elektroniker mit großem Interesse an der Informatik, also haut nicht gleich voll auf mich drauf ;)

    Ich hoffe, dass jemand im Forum unterwegs ist, für den das Tool nützlich ist und ich freue mich auf eure Vorschläge.

    Vorraussetzungen

    • RaspberryPi
    • angeschlossene RaspiCam
    • pyqt4

    Installation

    Sollte pyqt4 nicht installiert sein, wird dies wie folgt gemacht:

    Code
    sudo apt-get install python-qt4

    Seit der Umstellung auf die PiCamera Bibliothek ist es noch notwendig diese und die rpi.GPIO zu installieren. Vielen Dank an MetaKnight für den Hinweis!

    Code
    sudo apt-get install python-picamera python3-picamera python-rpi.gpio

    Alle Dateien von PinQam müssen heruntergeladen und in einen beliebigen Ordner kopiert werden.

    Die Dateien gibt es hier:

    Code
    sudo git clone https://github.com/pinqin/pinqam.git

    oder hier: PinQam

    Anschließend müssen wir noch die Berechtigungen anpassen:

    Code
    sudo chmod 0755 pinqam_prog.py

    Nun kann das Programm gestartet werden:

    Code
    ./pinqam_prog.py

    Bei den letzten 2 Befehlen ist darauf zu achten, dass man sich in dem Verzeichnis befindet, in dem sich die Dateien von PinQam befinden.


    PinQin
    _____________________________________

    To-Do-Liste

    • PiCamera anstelle von os.system (in Arbeit ...)
    • PEP 8

    _____________________________________

    Bug-Liste

    • Deaktivieren der LED funktioniert nicht
    • Videoaufnahmen in mjpeg führt zum einfrieren der Camera, bekanntes Problem...

    Einmal editiert, zuletzt von PinQin (25. August 2014 um 16:37)

    • Offizieller Beitrag

    hiho, dann hau ich mal ;)

    die Idee ist super, die grafische Umsetzung schlicht und funktionell (was ich mag).
    Was ich, persönlich, hnicht so schön finde, ist der Aufruf von raspivid/still über os.system(). Es gibt ein super dokumentiertes Python Camera Modul was ohne diesen Umweg auskommt (und noch einige andere Coole features, wie Streams usw. bietet)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Sollte es in absehbarer Zeit an einem Sonntag regnen, dann könntest du - sofern du Lust/Laune etc. hast - folgendes noch tun:

    Anstelle von os.system ein Kommando aufzurufen, könntest du alles in Python machen. Schau dir mal das picamera Modul an.

    Zusätzlich noch den gesamten Code PEP 8 konform machen :D


    EDIT:
    Verdammt, dbv war schneller

  • Ich habe den Beitrag zu dem Pythonmodul von dir schon gelesen und habe mich auch sehr geärgert, dass ich das nicht eher gelesen habe ;). Bald habe ich 2 Wochen frei, vielleicht fang ich dann noch einmal an und nutze das Pythonmodul :)

    Das wäre sicher sauberer gelöst und eröffnet neue Möglichkeiten, aber bisher ist es wenigstens funktionell :P

    PinQin

  • Ich bin gerade dabei alles auf PiCamera umzustellen. Bisher komme ich auch ganz gut zurecht. Allerdings stehe ich nun vor einem Problem. Ich möchte gern eine Funktion einbauen, um festzulegen, ob die LED der Kamera bei Betrieb leuchtet oder nicht.

    PiCamera bietet mir hierzu das:
    http://picamera.readthedocs.org/en/release-1.5…ra.PiCamera.led

    Das Problem ist nun, dass ich das Programm nicht als root starte und ich bekomme folgenden Fehler:

    Zitat

    GPIO library not found, or not accessible; please install"
    picamera.exc.PiCameraRunTimeError: GPIO library not found, or not accessible; please install RPi.GPIO and run the script as root

    (RPi.GPIO ist installiert...)

    In der Doku steht folgendes:

    Zitat

    If a GPIO library is available (only RPi.GPIO is currently supported), and if the python process has the necessary privileges (typically this means running as root via sudo), this property can be used to set the state of the camera’s LED as a boolean value (True is on, False is off).

    Kann ich das Problem mit anderen Rechten per chmod z.B. lösen?

    Ich möchte das Programm eigentlich nicht als root starten. Der Sinn dahinter ist, dass ich die Ordnerstruktur über

    Code
    getpass.getuser()

    erstelle bzw. überprüfe. So stelle ich sicher, dass die Ordner auch angelegt werden, bzw. meine Pfade alle noch stimmen, wenn ein Anwender sich nicht mit dem Benutzer pi am raspberry anmeldet.

    PinQin

  • chmod wird dir nur temporär etwas bringen.

    Über welchen Benutzer lässt du das denn laufen? Bitte poste mal die Ausgabe des folgenden Befehls, über den piCam läuft:

    Code
    id


    Ansonsten guck mal einfach in die https://github.com/waveform80/pic…amera/camera.py ab Zeile 329:

    Und ab Zeile 1654:

  • Code
    insgesamt 0
    drwxr-xr-x  2 root root    0 Jul  1 20:44 .
    drwxr-xr-x 43 root root    0 Jun 29 19:16 ..
    --w-------  1 root root 4096 Jul  1 20:44 export
    lrwxrwxrwx  1 root root    0 Jul  1 20:44 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
    --w-------  1 root root 4096 Jul  1 20:44 unexport

    Einmal editiert, zuletzt von PinQin (1. Juli 2014 um 21:31)

  • Benutzt du kein Raspbian :huh:
    Das sieht nicht normal aus bei dir :)

    Dann bleibt dir wohl nur die Rechte für /sys/class/gpio/ bei jedem Systemstart zu ändern...
    2 Möglichkeiten:

    • Entweder du addest selber die Gruppe gpio:

      Code
      groupadd gpio


      Fügst den pi Benutzer der Gruppe gpio hinzu:

      Code
      usermod -a -G gpio pi


      Und änderst bei jedem Systemstart (mit root Rechten) den Besitzer für /sys/class/gpio/:

      Code
      chown -R root:gpio /sys/class/gpio/
    • Oder du änderst die Rechte bei jedem Systemstart für /sys/class/gpio/ sodass dort jeder drauf zugreifen kann:

      Code
      chmod -R 666 /sys/class/gpio/
  • Also, die Sache mit der LED habe ich vorerst auf Eis gelegt, da ich in Konflikt mit den Rechten stehe. Ich möchte nicht, dass das Programm als root gestartet werden muss. Aber dazu bei Gelegenheit mehr.

    Ich bin nun dabei alle Funktionen mit PiCamera umzusetzen.

    Den aktuellen Stand habe ich als Anhang angefügt. Es wäre schön, wenn ein Paar von euch die Funktionen mal testen könnten. Selbst wird man irgendwann blind ;)

    Ein Problem habe ich zur Zeit. Wenn man bei der Videofunktion das Format MJpeg auswählt scheint sich die Camera aufzuhängen. Ich habe natürlich schon google gefragt. Dies wird wohl noch nicht vollständig unterstützt. Aber vielleicht weiss ja jemand genaueres :thumbs1:

    Danke fürs Testen, PinQin

  • PiCamera

    In letzter Zeit habe ich den Code überarbeitet und bin von den os.system Aufrufen zu einem Python-Modul für die RaspiCam namens PiCamera gewechselt. Leider funktioniert noch nicht alles einwandfrei und einige Funktionen habe ich noch nicht umgestellt, aber ein Anfang ist gemacht.

    Neue Funktion – Weißabgleich einstellen

    Es ist jetzt möglich den Weißabgleich per presets einzustellen. Somit kann die RaspiCam auf das Umgebungslicht angepasst werden.

    gui_weissabgleich.png

    Zur Auswahl stehen:

    • aus
    • automatisch
    • Sonnenlicht
    • bewölkt
    • Schatten
    • Glühlampe
    • Leuchtstoffröhre
    • Blitz

    Probleme

    Probleme Gibt es noch bei der Funktion die LED der Kamera zu aktivieren/deaktivieren. Ich nutze getpass.getuser() um festzustellen, wie der angemeldete Benutzer heißt, um damit die Pfade festzulegen. Das Programm müsste als root gestartet werden um die Funktion zu nutzen, was mir aber Probleme bereitet, da getpass.getuser() dann immer “root” zurückgibt.

    Ein weiteres Problem gibt es bei der Videofunktion. Wenn man als Format “mjpeg” auswählt, hängt sich die Kamera auf. Das Problem mit “mjpeg” ist aber bekannt, soweit ich im Internet lesen konnte und wird hoffentlich bald gelöst.

    Einmal editiert, zuletzt von PinQin (17. August 2014 um 09:19)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!