USB-Webcam mit Browser Bild erstellen u. Anzeigen

  • Hallo
    Ich möchte mit dem kleinen Code den ich angefügt habe mit dem Befeh fswebcam ein aktuelles Foto erzeugen
    und im Browser darstellen.
    Beim starten des Programms über die Konsole wird ein aktuelles Bild erzeugt.
    Will ich diesen CGI - Code über den Browser aufrufen kommt zwar die Oberfläche mit dem Schalter "Aktualisiere Bild"
    es wird allerdings kein neues Bild erstellt.
    Ich gehe davon aus das es am Befehl os.system liegt.
    Ich wäre dankbar wenn mir jemand eine Lösung oder den Fehler nennen könnte.


  • Hallo,


    das kann so nicht funktionieren.


    Grund: dein Formular sendet einen POST-Request an den Server - und lauscht auf dem Server keiner, der auf den POST-Request reagiert.


    CGI ist auch sowas von angestaubt, altbacken und - zumindest im Falle von Python - überholt, dass ich das an deiner Stelle direkt vergessen würde. Standard für Python ist WSGI, darauf solltest du auch deine Anwendung setzen. Dafür gibt es Frameworks wie Bottle oder Flask, mit der du auch kleine Anwendungen mit wenigen Zeilen Code umsetzen kann. Hier ist IMHO Bottle "einfacher", geht aber ohne Probleme auch mit Flask:


    Grundsätzliches vorgehen:
    - Bottle installieren
    - Python-Skript schreiben, in dem zwei Routen definiert sind:
    * eine, die das Formular ausliefert
    * eine, die POST-Requests lauscht. Kommt ein POST-Request, führst du den Befehl für das neue Bild aus und lieferst es aus.


    Das sollte so mit ~20 Zeilen Code plus ein paar Zeilen für die Templates umsetzbar sein.


    Gruß, noisefloor

  • Hallo
    Vielen Dank für die Antwort. Ich möchte nicht wissen was besser ist!
    In den Script funktioniert der Aufruf "os.system(KOMMANDO) nicht.
    Es wird kein neues Bild erzeugt.
    Weiss jemand warum?
    Vielen Dank

  • Was mir auffällt, wäre:
    - absolute Pfadangabe zu fswebcam, damit auch sichergestellt wird, dass das Programm gefunden wird.
    - Wenn das Ganze über den Webserver läuft, hat der User, unter dem der Webserver läuft, auch das Recht, das Programm fswebcam auszuführen?
    - "http://localhost/cgi-bin/webcam.cgi" würde ich eher mit der IP-Adresse statt dem localhost angeben. Wenn du von ausserhalb des Raspberry auf den Webserver zugreifst, ist localhost was anderes als es der Raspberry sieht.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • Hallo,


    Quote

    In den Script funktioniert der Aufruf "os.system(KOMMANDO) nicht.


    "Funktioniert nicht" heißt alles und nichts. Kommt 'ne Fehlermeldung? Steht was im error.log des Apache?


    BTW: Webanwendung via WSGI sind 100x einfacher zu debuggen als CGI Skripte. Da aber

    Quote

    Ich möchte nicht wissen was besser ist!

    dein Weg ist, wird dieser eben hart, steinig und hat einen ungewissen Ausgang. Your choice :)


    Gruß, noisefloor
    Automatisch zusammengefügt:[hr]
    Hallo,


    Nachtrag: `os.system` gilt als der veraltete Weg zum Aufruf für externe Programme. Üblicherweise nimmt man das `subprocess` Modul. Das hat du auch mehr Möglichkeiten, direkt an die (mögliche) Fehlermeldung des externen Programmaufrufs zu kommen.


    Gruß, noisefloor

  • Hallo Zusammen,

    ich habe ein ähnliches Problem.

    Ich kann mit Bild_machen.py ein Bild aufnehmen sowohl mit

    1. os.system("raspistill -o /var/www/cgi-bin/images/test_ossystem.jpg -w 640 -h 480") als auch mit

    2. picamera (s.u.).

    Ich kann mit raspistill ... ein Bild aufnehmen.

    Ich will aus einem Button auf einer Webseite (Also Apache2 mit CGI (#!/usr/bin/env python3) ein Bild auf einer neuen Webseite (bildaufnehmen.cgi?Bild=STALL) aufnehmen und dann anzeigen lassen.

    Ich habe es versucht mit:

    1.

    from picamera import PiCamera

    from time import sleep

    camera = PiCamera()

    camera.capture('/var/www/cgi-bin/images/test_picammod.jpg')

    Ergebnis: Server Error

    2.

    os.system("sudo python3 /home/pi/PythonProgramme/Bilder_machen.py")

    Ergebnis: Nix passiert, website läuft weiter

    (ohne sudo gibt es einen Server Error)

    3.

    os.system("sudo raspistill -o /var/www/cgi-bin/images/test.jpg -w 640 -h 480")

    Ergebnis: Nix passiert, website läuft weiter

    (ohne sudo gibt es einen Server Error)


    Ich habe auch schon mit sudoers herumexperimentiert (sowohl .py für www-data als sudo ohne PW als auch .cgi). Bringt nichts.


    Zuerst hatte ich motion, das war auch ok. Nur läuft der die ganze Zeit und nachts mit IR. das brauche ich nicht.