Zugriff auf die Raspberry-Kamera über ein Webinterface

Über den vorher installierten nginx-Webserver und PHP wollte ich das Kameramodul vom Raspberry ansprechen. Dabei sollte das ganze als Dokumentenkamera dienen, die nur bei Aufruf einer Webseite jeweils ein stehendes Bild überträgt. Zunächst dachte ich: kein Problem. Aber im folgenden zeigte sich, das man doch einige Dinge beachten muss, damit das ganze optimal zusammenspielt.

An der Kommendozeile des Raspberrys kann man über den Befehl „raspistill -o dateiname.jpg“ ein einzelnes Foto machen und als Datei ablegen. Genau damit wollte ich das auch in PHP machen.

Hier nun die Lösung:

Datei bild.php:

<?PHP
 shell_exec("/usr/bin/raspistill -q 60 -br 50 -ex auto -co 20 -sa 20 -mm average -sh 10 -w 1920 -h 1440 -n -o /var/www/html/out/image.jpg");
 $filename = "out/image.jpg";
 $handle = fopen($filename, "rb");
 $contents = fread($handle, filesize($filename));
 fclose($handle);
 echo $contents;
 unlink($filename);
 ?>

Im Webserververzeichnis muss man noch das Verzeichnis „out“ anlegen, in dem dann die Bilder abgelegt werden und dem Schreibrechte für alle geben – also sudo chmod 555 /var/www/html/out/image.jpg

Nun baut man sich eine kleine HTML-Datei, die das PHP als Bild einfügt. Es muss also sowas in der Art im Body-Bereich drinnen stehen:

<img src="bild.php" width="1920" height="1440">

Und natürlich kann man das ganze noch in hübsch machen und vielleicht noch einen JavaScript-Reload-Button anbringen.

Wenn man die HTML-Datei nun so aufruft, wird es aber noch immer nicht funktionieren, da der User des Webservers keinen Zugriff auf das Video-Device des Raspberrys hat. Das löst man nun einmalig mit

sudo chmod 777 /dev/vchiq

Nun kann man es mal testen. Nach einem Neustart vom Raspberry werden aber die Zugriffsrechte von /dev/vchiq wieder zurückgesetzt.

Dauerhaft bekommt man das so hin:

echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0777"' > /etc/udev/rules.d/10-vchiq-permissions.rules

 

Schreiben Sie einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.