Einfache Webcam mit dem Raspberry Pi

Bild aus dem Meisenkasten mit der Raspberry Pi Kamera. picam

Für die Anwendungsszenarien „Autarke Beobachtung von Höhlenbrütern“ und „Beobachtung des Fluglochs von Honigbienen“ (Forschungsvorhaben #biene40) brauchen wir neben dem mechanischen Aufbau (Nistkasten, wettersicherer Aufbau mit Raspberry Pi ..) auch eine einfache Webcam. Wir nennen es picam. Jeder kann das in einer halben Stunde nachprogrammieren kann. PiCam nimmt ein Bild auf und lädt es auf einen Webserver. PiCam besteht aus einem einfachen Python-Skript auf dem Raspberry Pi, einem einfachen in PHP geschriebenem Webservice auf dem Webserver und einer minimalistischen HMTL-Seite zur Anzeige des hochgeladenen Bildes.

Anwendungsfälle (Use Case Diagramm) für die einfache Webcam

Abb. 1 zeigt, was ein menschlicher Nutzer und ein als Bilderlieferant dienender Kleinrechner Raspberry Pi mit dem webbasierten Teil des Systems tun können.

Abb 1: Use Case Diagramm

Topologie (Netzwerkstruktur)

Abb. 2 zeigt die Vernetzung der Geräte und der Computerprogramme. Das Gesamtsystem besteht aus:

  1. Einem Webserver. Die einzige Anforderung ist, dass der Webserver PHP unterstützt. Fast alle Providern leisten das heutzutage.
  2. Einem Raspberry Pi mit Kamera. Für den Start ist ein Raspberry Pi Zero W kostengünstig.
  3. Einem Nutzer mit Computer oder Smartphone, der die HTML-Seite aufrufen kann.
  4. Einem Python Skript „picam.py“, das auf dem Raspberry Pi läuft, ein Bild aufnimmt und über die bestehende Netzverbindung an den Webservice „picamWS.php“ überträgt.
  5. Ein PHP Skript „picamWS.php“, das auf dem Webserver läuft und ein Bild entgegennimmt und unter dem Namen „picam.jpg“ auf dem Webserver speichert.
  6. Eine HTML-Seite „picam.html“ (smartphone-geeignet), die das Bild im Browser anzeigt.

Abb. 2: Netzwerktopologie für eine einfache Webcam mit dem Raspberry Pi

Client Programm picam.py – Bilder aufnehmen und hochladen

Das Script picam.py (netto 16 Zeilen Quelltext) können Sie mit einem Texteditor, z.B. nano, direkt auf dem Raspberry Pi mit der Befehlsfolge „nano picam.py“ erstellenn. Nach dem Speichern mit der Tastenkombination „ctrl+o“  machen Sie das Script noch ausführbar mit „chmod 777 picam.py“. Das Script lässt sich dann mit „./picam.py“ aufrufen und zeigt, wenn alles richtig eingerichtet ist, die folgende Ausgabe:

pi@naturwatch02:~ $ ./picam.py
<Response [200]>
picam.jpg hochgeladen.
pi@naturwatch02:~ $

Das Script arbeitet „ohne Netz und doppelten Boden“. Der Quelltext ist in Listing 1 dargestellt, Sie können es gleich in den Editor übernehmen. Es ist im Script eine Programmzeile zu ändern: An der Stelle, an die URL spezifiziert wird, ist anstelle von „meinServerUndVerzeichnis“ der eigene Server und das Verzeichnis, in dem Webservice, Bild und HTML-Seite liegen sollen, anzugeben.

Zunächst importieren Sie die benötigten Bibliotheken: „picamera“, um direkt Bilder aus Python aufnehmen zu können,  „sleep“ aus der Bibliothek „time“ für eine Pause für die Kamera und „requests“ für den http-Zugriff auf den Webserver.

Die spannenden Zeilen im Skript sind:

camera.capture(localpicname)

Der Befehl nimmt das Bild auf und speichert es unter localpicname.

url = 'http://meinServerUndVerzeichnis/picamWS.php'

files = {'file': open(localpicname, 'rb')}

r = requests.post(url, files=files)

Mit den Statements werden in der Variablen „url“ der Standort des Webservice angegeben, in „files“ das Bild als Datei zum Übertragen festgelegt,  mit „requests“ der Webservice aufgerufen und das Bild hochgeladen. In der Variablen „r“ wird u.a. der Statuscode und die Antwort des Webservice gespeichert.

#!/usr/bin/python
# picam.py
# vereinfachte Version fuer naturwatch.lite
# Claus Brell 17.11.2018
import picamera
from time import sleep
import requests
# Voreinstellungen Bildgroesse:
WIDTH=320
HEIGHT=240
# Kamera initialisieren:
camera = picamera.PiCamera()
camera.resolution = (WIDTH,HEIGHT)
# Dateiname fuer Bild:
localpicname = 'picam.jpg'
# 2 Sek. Pause, damit Kamera alles einstellen kann:
sleep (2)
# Ein Bild aufnehmen:
camera.capture(localpicname)
camera.close()
# Ein Bild auf den Webspace hochladen:
# Webservice Aufruf URL festlegen:
url = 'http://meinServerUndVerzeichnis//picamWS.php'
files = {'file': open(localpicname, 'rb')}
r = requests.post(url, files=files)
# Zur Kontrolle Rueckgabe ausgeben
print(r)
print(r.text)

Listing 1: picam.py, Skript für das Aufnehmen eines Bildes und Hochladen auf den Webserver.

Webservice picamWS.php – Bild entgegennehmen und speichern.

Den Webservice picamWS.php (netto 3 Zeilen Quelltext) erstellen Sie mit einem einfachen Texteditor (Notepadd++ unter Windows oder Sublime Text unter MacOS oder Linux) und laden ihn dann mit FTP auf den eigenen Webserver hoch. Listing 2 zeigt das Skript, es sind keine Prüfungen oder Fehlerbehandlungen eingebaut, um das Script möglichst einfach und kurz zu halten. Die spannende Zeile ist:

if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
    echo basename( $_FILES['file']['name']). " hochgeladen.";}

Es wird überprüft, ob das Kopieren des hochgeladenen Bildes in dasDateisystem des Webservers funktioniert hat, Wenn das der Fall ist, gibt es eine Bestätigung. Das Bild liegt im selben Verzeichnis, in dem sich auch der Webservice befindet.

<?php
// picamWS.php
// Webservice für picam.py
// nimmt Bild entgegen und speichert es auf dem Server
// naturwatch.lite
// Claus Brell 17.11.2018
// Ziel-Name, unter dem das Bild abgelegt wird:
$target_file=$mandant.'picam.jpg'; 
// Bild hochladen und uner Ziel-Name ablegen,
// wenn erfolgreicht, Meldung zurückgeben: 
if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
echo basename( $_FILES['file']['name']). " hochgeladen.";
}
else echo "Fehler";
?>

Listing 2: picamWS.php – Webservice, der ein Bild entgegennimmt

picam.html – Anzeigeseite. Eine einfache HTML-Seite, die i.w. aus einem img-Tag besteht, das Bild aus dem gleichem Verzeichnis lädt und anzeigt. Die Meta-Statements sorgen dafür, dass die Anzeige auch auf einem Smartphone funktioniert.

<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="language" content="de-DE">
<meta http-equiv="Content-type" content="text/html;charset=utf-8">
<meta name="mobile-web-app-capable" content="yes">
</head>
<body>
picam Bildanzeige
<br><br>
<img src="picam.jpg">
</body>
</html>

Listing 3: picam.html – Anzeigeseite für das hochgeladene Bild

Was noch fehlt …

Für eine gelungene Naturbeobachtung wäre ein Automatismus wünschenswert. Dazu kann das Python-Script einfach über CRON, z.B. jede Minute, aufgerufen werden. Dann fehlt jedoch ein ebenfalls automatisches Nachladen des Bildes in der HTML-Seite. Das ließe sich über Javascript realisieren. Möchte man kein Bild verpassen, also sollten die Bilder gespeichert werden und auch die Historie sollte einsehbar sein. Allerdings werden Webservice und Anzeigeseite dadurch sehr viel komplizierter. Wie das gehen kann, ist in einem Artikel in der Raspberry Pi Geek dargestellt (Brell 2017).

Quellen für die einfache Webcam mit dem Raspberry Pi

Brell, Claus (2017) Meisencam – Nistkästen mit der Pi-Cam ins Internet bringen. in: Raspberry Pi Geek 10 / 2017

Zeitungsartikel Rheinische Post Krefeld vom 14.03.2017:
„Auf den Spuren von Heinz Sielmann …“

Pressemitteilung der Hochschule Niederrhein vom 10.03.2017:
https://www.hs-niederrhein.de/news/news-detailseite/wirtschaftsinformatik-studierende-entwickeln-interaktiven-meisenkasten-16506/.

Tweets zum Forschungsvorhaben #biene40 – Naturschutz, Digitalisierung und Wirtschaft verbinden: https://twitter.com/hashtag/biene40

Raspberry Pi Grundsystem aufsetzen

Brutsaison 2018 (Videobeobachtung)

Brutsaison 2019 (Videobeobachtung)

Glossar für die einfache Webcam

Raspberry Pi

Der Raspberry Pi ist ein vielseitiger Kleincomputer, der von der Raspberry Pi Foundation für den Einsatz in Bildungseinrichtungen entwickelt wurde. Er soll Kindern und Jugendlichen das Programmieren und die Computertechnologie näher bringen. Der Raspberry Pi ist etwa so groß wie eine Kreditkarte und kann über eine Vielzahl von Anschlüssen – so genannte GPIOs – mit anderen Geräten verbunden werden. Sowohl Hobbyisten (Maker) als auch professionelle Entwickler verwenden den Raspberry Pi.

Toplologie

Eine Netzwerk-Topologie beschreibt die Struktur eines Computernetzwerks und die Art und Weise, wie die einzelnen Geräte miteinander verbunden sind.

Weiterlesen: Topologie

Webcam

Eine Webcam ist eine Digitalkamera, mit der Videoaufnahmen gemacht und ins Internet übertragen werden können. Webcams werden auch für verschiedene andere Anwendungen wie Überwachung, Bildung und Unterhaltung eingesetzt.

Teile diesen Beitrag.

Schreibe einen Kommentar

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