Veröffentlicht am Schreib einen Kommentar

Anschließen und Betreiben einer Raspberry Pi Kamera

Eine Raspberry Pi Kamera ist eine tolle Sache und lässt neue Möglichkeiten zu. Man kann die Kamera unter anderem zur Bewegungserkennung oder Überwachung Ihrer Räume einsetzen. In diesem Tutorial zeige ich, wie man eine Raspberry Pi Kamera einrichtet, damit Fotos und Videos macht und einen Video-Stream über das Netzwerk von einem anderen System abrufen kann. 

Die Raspberry Pi Kamera hat einen festen Fokus und liefert eine Auflösung von 5 Megapixel. Videos können in 1080p, 720p oder 640×480 mit maximal 30 Bildern pro Sekunde aufgenommen werden. Die Fotos haben eine maximale Auflösung von 2592 × 1944 Pixel. 

Raspberry Pi Kamera einrichten

Der Anschluss für die Kamera befindet sich bei allen Modellen hinter dem Ethernet Anschluss und wird CSI genannt (bei den Zero-Modellen ist die Schnittstelle gegenüber dem MicroSD-Slot angebracht). Trennen Sie den Raspberry Pi vom Strom. Heben Sie die Verschluss-klemme des CSI-Moduls etwas an und stecken Sie das Kabel hinein (achten Sie darauf, dass die blanken Pins in die gegenüberliegende Richtung bezüglich der Klemme zeigen), zum Befestigen drücken Sie die Klemme einfach wieder etwas zurück. 

raspi-csi

Starten Sie den Raspberry Pi und stellen Sie die Verbindung mit dem Pi via SSH oder mittels Tastatur und Monitor. Melden Sie sich mit pi (oder Ihren eigenen Benutzernamen) und raspberry (oder das von Ihnen bestimmte Passwort) an. Führen Sie das folgende Kommando zum Aktualisieren des Systems aus:

 

sudo apt-get -y update && sudo apt-get -y upgrade

sudo rpi-update

Starten Sie anschließend das Konfigurations-Tool raspi-config, um die Kamera zu aktivieren.

Navigieren Sie hierfür zu dem Punkt 5 “Enable Camera” und aktivieren Sie die Schnittstelle.

raspi-config

Damit ist die Einrichtung abgeschlossen. Starten Sie jetzt den Pi neu.

Fotos mit der RasPi Cam aufnehmen

Für die Aufnahme von Fotos mit dem Raspberry Pi kann man das in Raspbian bereits vorinstallierte Tool raspistill verwenden. Die Software bietet eine Vielzahl von Optionen. Wenn man sich in der grafischen Raspbian-Umgebung befindet, wird sogar ein Vorschau-Fenster eingeblendet.

Zum Testen der Kamera-Funktion können Sie ein Testbild mit den Optionen -o (Festlegen des Dateinamens) und -v (Verbose Ausgabe) machen.

 

raspistill -v -o test.jpg

Nun wird im aktuellen Verzeichnis ein test.jpg abgelegt. Falls etwas nicht geklappt hat, wird das Programm mittels der -v Option einen Fehler ausgeben (z.B. wenn die Kamera nicht via raspi-config aktiviert wurde o.ä.).

Fotos im Jpeg-Format aufnehmen

 

raspistill -o test.jpg

Fotos im  PNG-Format aufnehmen

Mit dem Parameter -e können verschiedene Formate wie jpg, bmp, gif und png erzeugt werden.

 

raspistill -o test.png –e png

Aufnahme von Fotos ohne Vorschau-Fenster (-n)

 

raspistill -o test.jpg -n

Aufnahme auf Tastendruck (Enter)
Wenn man test.jpg durch test%02d.jpg ersetzt, wird bei jedem Tastendruck ein neues Foto mit dem Dateinamen test01.jpg, test02.jpg usw. erstellt. Die Serie kann mit STRG+C unterbrochen werden.

 

raspistill -t 0 -k -o test%02d.jpg

Zeitverzögertes Foto (3 Sekunden), die Angabe erfolgt in Millisekunden 

 

raspistill -o test.jpg -t 3000

Aufnahme von Fotos mit anderer Auflösung (640×480), die Parameter w und h geben die Weite und die Höhe in Pixeln an

 

raspistill -o test.jpg -w 640 -h 480

Fotos mit reduzierter Qualität aufnehmen (-q)
Dadurch kann Speicherplatz eingespart werden, es sind Werte von 0 bis 100 möglich.

 

raspistill -o image.jpg -q 20

 Raspberry Pi Kamera LED abschalten

Wenn Sie durch die rote Aufnahme-LED gestört werden, können Sie diese ausschalten. Dazu ist ein neuer Eintrag in der Datei /boot/config.txt mit anschließendem Neustart notwendig. Tragen Sie hierzu einfach die folgende Zeile in eure config.txt in einem beliebigen Editor ein.

 

disable_camera_led=1

Raspberry Pi Kamera über das Netzwerk Streamen

Um das Video von der Kamera in einem Web-Browser betrachten zu können, wird ein Python-Skript benötigt. Diesen findet man auf der offiziellen PiCamera-Documentation-Seite – Web streaming.
 
 
Erstellen Sie einen Python-Skript “rpi_camera_web_streaming.py

 

 

nano rpi_camera_web_streaming.py

Kopieren Sie den unten angegebenen Code in den neu erstellten Skript: 

import io
import picamera
import logging
import socketserver
from threading import Condition
from http import server

PAGE="""\
<html>
<head>
<title>picamera MJPEG streaming demo</title>
</head>
<body>
<h1>PiCamera MJPEG Streaming Demo</h1>
<img src="stream.mjpg" width="640" height="480" />
</body>
</html>
"""

class StreamingOutput(object):
    def __init__(self):
        self.frame = None
        self.buffer = io.BytesIO()
        self.condition = Condition()

    def write(self, buf):
        if buf.startswith(b'\xff\xd8'):
            # New frame, copy the existing buffer's content and notify all
            # clients it's available
            self.buffer.truncate()
            with self.condition:
                self.frame = self.buffer.getvalue()
                self.condition.notify_all()
            self.buffer.seek(0)
        return self.buffer.write(buf)

class StreamingHandler(server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(301)
            self.send_header('Location', '/index.html')
            self.end_headers()
        elif self.path == '/index.html':
            content = PAGE.encode('utf-8')
            self.send_response(200)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Content-Length', len(content))
            self.end_headers()
            self.wfile.write(content)
        elif self.path == '/stream.mjpg':
            self.send_response(200)
            self.send_header('Age', 0)
            self.send_header('Cache-Control', 'no-cache, private')
            self.send_header('Pragma', 'no-cache')
            self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME')
            self.end_headers()
            try:
                while True:
                    with output.condition:
                        output.condition.wait()
                        frame = output.frame
                    self.wfile.write(b'--FRAME\r\n')
                    self.send_header('Content-Type', 'image/jpeg')
                    self.send_header('Content-Length', len(frame))
                    self.end_headers()
                    self.wfile.write(frame)
                    self.wfile.write(b'\r\n')
            except Exception as e:
                logging.warning(
                    'Removed streaming client %s: %s',
                    self.client_address, str(e))
        else:
            self.send_error(404)
            self.end_headers()

class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer):
    allow_reuse_address = True
    daemon_threads = True

with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
    output = StreamingOutput()
    camera.start_recording(output, format='mjpeg')
    try:
        address = ('', 8000)
        server = StreamingServer(address, StreamingHandler)
        server.serve_forever()
    finally:
        camera.stop_recording()

Videos aufnehmen

Auch für die Aufnahme von Videos über die Raspberry Pi Kamera gibt es unter Raspbian ein zentrales Tool – raspivid übernimmt hier alle wichtigen Aufgaben.

Ein Video in 1080p aufnehmen (1920 x 1080)
Mit dem Parameter -t gibt man die Aufnahmezeit in Millisekunden an, für eine dauerhafte Aufzeichnung wird der Wert auf 0 gesetzt.

 

raspivid -o testvideo.h264 -t 50000

Ein Video in 720p aufnehmen (1280 x 720)

 

raspivid -o testvideo.h264 -t 50000 -w 1280 -h 720

Video mit anderer Framerate aufzeichnen (zb. 15 Frames/Sekunde)

 

raspivid -o testvideo.h264 -t 50000 -f 15

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.