webwinkelkeur logo

4.7 Ø

5152+ Bewertungen
webwinkelkeur logoAlle ansehen

5152+ Bewertungen

5152+ Bewertungen

Bestellen bis 16:00 Uhr für Versand am selben Tag

14 Tage Rückgabe

DE

Privat

Geschäftlich

Zeitraffer der Raspberry Pi-Kamera

Anfänger
1 uur
136,98

In diesem Projekt lernen Sie, wie Sie mit Ihrem raspberry Pi 4 oder raspberry Pi 5 Ihre eigene Zeitrafferkamera bauen. In diesem Projekt wird alles erklärt, sodass Sie es leicht selbst machen und auch leicht an die Bedürfnisse anpassen können. Wir besprechen unter anderem, wie Sie den Zeitraffer vollständig selbst konfigurieren können und erklären Ihnen auch, wie die Funktionen im Code funktionieren. Dann lass uns gleich loslegen!

Übersicht der Projektschritte

  1. Terminal öffnen
  2. Projektordner erstellen
  3. Erstellen und Erklären von config.yaml
  4. Installationsskript erstellen und ausführen (dep.bash)
  5. Erstellen eines Python-Skripts (timelapse.py) und Code-Erklärung
  6. Verzeichnisstruktur prüfen
  7. Zeitrafferaufnahmen
  8. Video ansehen
  9. Häufige Probleme und Tipps

1. Öffnen Sie das Terminal

  • Grafik : Klicken Sie auf das schwarz-weiße Terminalsymbol (oben links in der Menüleiste).
  • Tastenkombination : Drücken Sie Strg+Alt+T.
  • Das Terminal ist Ihre „Befehlszeile“, in die Sie alle nachfolgenden Befehle eingeben.

2. Projektordner erstellen

Geben Sie im Terminal Folgendes ein:

mkdir ~/timelapse_project
  • mkdir erstellt ein neues Verzeichnis.
  • ~ steht für Ihr Home-Verzeichnis (z. B. /home/pi ).

Gehen Sie zu diesem Ordner:

cd ~/timelapse_project
  • cd = Verzeichnis ändern, Sie „gehen zu“ dem Ordner.

Überprüfen Sie, ob Sie sich im richtigen Ordner befinden:

pwd
  • pwd zeigt Ihren aktuellen Standort im Dateisystem an.
  • Sie sollten etwas wie /home/pi/timelapse_project sehen.

3. Erstellen von config.yaml und Erklärung

Öffnen Sie den Editor:

nano config.yaml
  • nano ist ein einfacher Texteditor im Terminal.

Fügen Sie diesen Inhalt ein:

camera:
	preview: true # Während der Aufnahme ein kleines Vorschaufenster anzeigen
	pixel_ratio:
		- 1920 # Breite der Fotos
		- 1080 # Höhe der Fotos
preview_pixel_ratio:
	- 640 # Breite der Vorschau
	- 480 # Höhe der Vorschau
logging: true # Auf „true“ setzen, um Statusmeldungen im Terminal anzuzeigen
picture_folder: "Bilder" # Ordner, in den die Bilder gehen
time_lapse_folder: "time_lapse_videos" # Ordner, in den das Video gespeichert wird
maxtime:
	duration: 60 # Gesamtaufnahmezeit in Sekunden
frame_interval: 0.5 # Zwischen jedem Foto (in Sekunden)
frame_rate_video: 30 # Bilder pro Sekunde im Video

Speichern : Drücken Sie Strg+O, Eingabe.

Schließen : Strg+X

Was bewirkt das?
Config.yaml ist auch die Konfigurationsdatei für den gesamten Python-Code, den Sie ausführen werden. Sie teilen dem Skript mit, wie die Kamera funktionieren soll, wo die Dateien gespeichert werden sollen, wie lange sie laufen soll und wie schnell das fertige Video sein soll.

4. Installationsskript erstellen und ausführen ( dep.bash )

Erstellen Sie die Datei:

nano dep.bash

Fügen Sie dies ein:

#!/usr/bin/env bash 
sudo apt-get update -y
sudo apt-get upgrade -y 
sudo apt-get autoremove -y sudo apt-get install python3-picamera2 -y 
sudo apt-get install python3-libcamera -y 
sudo apt-get install python3-yaml -y 
sudo apt-get install python3-shutil -y 
sudo apt-get install python3-opencv -y # 'cv2' 
sudo apt-get install python3-numpy -y 
sudo apt-get install python3-pathlib -y

Ausführbar machen:

chmod +x dep.bash

Ausführen:

./dep.bash

 

Was passiert?

  • update und upgrade stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist.
  • autoremove räumt auf.
  • install ruft bestimmte Python-Pakete und Kamerabibliotheken ab.

5. Erstellen Sie ein Python-Skript ( timelapse.py ) und eine Code-Erklärung

Öffnen Sie eine neue Datei:

nano timelapse.py

Fügen Sie den vollständigen Code ein ( from picamera2 import Picamera2 to cleanup() ).

from picamera2 import Picamera2
from libcamera import Transform, controls
import libcamera
 
import yaml
import shutil
import cv2
import numpy as np
from pathlib import Path
import os
import time
 
# Open het configuratie bestand en lees hem
with open('config.yaml', 'r') as file:
    config = yaml.safe_load(file)
 
# Maak een camera object
camera = Picamera2()
 
# Zet maximale stappen
iterations = int(config["maxtime"]["duration"] / config["frame_interval"]) # maximale tijd / interval 
picdir = config["picture_folder"]
log = config["logging"]
 
 
 
 
 
def images_to_video(image_folder=f"{config['picture_folder']}", output_path=f"{config['time_lapse_folder']}/output.mp4", fps=30, pixel_radius=3):
    
    if log:
        print("Foto's naar video aan het converteren...")
 
 
    folder_path = Path(image_folder)
    
    # Get list of numbered images
    image_files = sorted([f for f in folder_path.glob('*.jpg') 
                     if f.stem.isdigit()],
                    key=lambda x: int(x.stem))
 
    if not image_files:
        raise ValueError("Geen fotos gevonden")
        
    # Read first image to get dimensions
    first_frame = cv2.imread(str(image_files[0]))
    
    # Create VideoWriter object with H.264 codec
    height, width = first_frame.shape[:2]
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # H.264 codec
    out = cv2.VideoWriter(
        str(output_path),
        fourcc,
        fps,
        (width, height)
    )
    
    # Process each image
    for img_path in image_files:
        frame = cv2.imread(str(img_path))
        
        # Apply Gaussian blur based on pixel radius
        if pixel_radius > 0:
            frame = cv2.GaussianBlur(frame, 
                                   (pixel_radius*2 + 1, pixel_radius*2 + 1), 
                                   0)
            
        out.write(frame)
    
    # Release VideoWriter
    out.release()
    cv2.destroyAllWindows()
    
 
def create_directorys(folders: list):
    for folder in folders:
        if not os.path.exists(f"{os.getcwd()}/{folder}"):
            try:
                os.mkdir(f"{os.getcwd()}/{folder}")
                print(f"Map aangemaakt : {folder}")
            except Exception as e:
                if e.errno != errno.EEXIST: 
                    print(f"Error bij het aanmaken van een map: {e}")
    return
 
 
 
def cleanup():
    shutil.rmtree(f"{os.getcwd()}/{config['picture_folder']}") # verwijdert alle foto bestanden
    exit()
 
 
 
def maak_foto_en_sla_op(i):
    try:
        # Maak de foto
        camera.capture_file(f"{os.getcwd()}/{picdir}/{i}.jpg")
        if log:
            print(f"foto {i} opgeslagen")
    except Exception as e:
        raise e
    
    
def error(e):
    images_to_video()
    cleanup()
    print(f"Er is een error voorgekomen ({e}). De fotos die zijn gemaakt zijn opgeslagen en worden omgezet in een time-lapse")
    exit(1)
    
 
 
 
# configureer de code
camera_config = camera.create_still_configuration(
    main={"size": (config["camera"]["pixel_ratio"][0], config["camera"]["pixel_ratio"][1])},
    lores={"size": (config["camera"]["preview_pixel_ratio"][0], config["camera"]["preview_pixel_ratio"][1])}
)
 
camera_config = camera.create_preview_configuration(
    main={"size": (config["camera"]["pixel_ratio"][0], config["camera"]["pixel_ratio"][1])},
    lores={"size": (config["camera"]["preview_pixel_ratio"][0], config["camera"]["preview_pixel_ratio"][1])}
)
 
camera.configure(camera_config)
 
 
camera.start(show_preview=config["camera"]["preview"])
 
camera.set_controls({"AfMode": controls.AfModeEnum.Continuous, "AfSpeed": controls.AfSpeedEnum.Fast})
 
 
create_directorys([config["picture_folder"], config["time_lapse_folder"]])
 
print("Let op : Het bestand output.mp4 word overgeschreven ook al staat hij er. Als je nog een oude video heb sla hem dan onder een andere naam op of op een andere plek om hem nog te behouden")
if log:
    print("Programma begint met opnemen over 3 seconden")
time.sleep(3)
if log:
    print("Programma maakt nu foto's")
 
 
try:
    for i in range(1, iterations+1):
        try:
            maak_foto_en_sla_op(i)
            time.sleep(config["frame_interval"]) 
        except Exception as e:
            error(e)
            cleanup()
except Exception as e:
    error(e)
    cleanup()
 
images_to_video()
print("Klaar!")
cleanup()

Speichern und beenden : Strg+O, Eingabe und Strg+X.


Erklärung der wichtigsten Codeteile

Importe

from picamera2 
import Picamera2 
import yaml, shutil, cv2, numpy as np 
from pathlib import Path 
import os, time

Ruft alle Module ab, die wir brauchen.

Konfiguration wird geladen

with open('config.yaml','r') as f:
config = yaml.safe_load(f)

Liest Ihre Einstellungen aus config.yaml .

Iterationen berechnen

iterations = int(config["maxtime"]["duration"]/ config["frame_interval"])

Berechnet die Gesamtzahl der aufgenommenen Fotos.

Ordner erstellen

def create_directorys(folders): 

Stellt sicher, dass pictures/ und time_lapse_videos/ vorhanden sind.

Fotografieren

def maak_foto_en_sla_op(i): camera.capture_file(f"{picdir}/{i}.jpg")

Nimmt ein einzelnes Foto auf und speichert es als 1.jpg , 2.jpg usw.

Fotos zum Video

def images_to_video(...): 

Kombiniert die Fotos und fügt (optional) Unschärfe hinzu.

Fehlerbehandlung

def error(e): images_to_video() 

Fängt Fehler ab und stellt sicher, dass aufgenommene Fotos nicht verloren gehen.

Hauptprogramm

camera.start(...) for i in range(1, iterations+1): 
maak_foto_en_sla_op(i) 
time.sleep(config["frame_interval"]) 
images_to_video() 
cleanup()
  1. Starten Sie die Kamera
  2. Durchläuft alle Iterationen
  3. Foto aufnehmen, Intervall abwarten
  4. Macht Videos, räumt auf
     

6. Verzeichnisstruktur prüfen

In Ihrem Ordner timelapse_project sollten Sie jetzt Folgendes sehen:

ls -R
. ├── config.yaml 
  ├── dep.bash 
  ├── timelapse.py 
  ├── pictures/ 
  └── time_lapse_videos/

7. Zeitraffer ausführen

  1. Stellen Sie sicher, dass Sie sich im Projektordner befinden ( cd ~/timelapse_project ).
  2. Typ:
python3 timelapse.py

Was Sie sehen:

  • In den Terminalstatusmeldungen („Foto 1 gespeichert“, …).
  • Nach 3 Sekunden ein Countdown (wenn die Protokollierung aktiviert ist).
  • Die Kamera macht in Ihrem Abstand Bilder.

Warten Sie, bis Klaar! wird im Terminal angezeigt.

8. Video ansehen

Nach der Fertigstellung ist der Zeitraffer in:

~/timelapse_project/time_lapse_videos/output.mp4

Auf dem Pi selbst :

omxplayer time_lapse_videos/output.mp4

Auf Ihrem Computer: Übertragen Sie die Datei per SCP/USB und öffnen Sie sie in VLC oder einem anderen Player.

9. Häufige Probleme und Tipps

ProblemLösung
Kamera nicht verfügbarÜberprüfen Sie sudo raspi-config → Schnittstellenoptionen → Kamera
BerechtigungsfehlerFühren Sie das Skript mit python3 aus (nicht als Root) und überprüfen Sie die Dateiberechtigungen
Wenig SpeicherplatzPassen Sie maxtime oder frame_interval an oder erweitern Sie die SD-Karte
Fotos speichernEntfernen oder kommentieren Sie cleanup() vom Ende des Skripts
Probleme mit dem VideocodecVerwenden Sie omxplayer oder passen Sie fourcc in images_to_video()