5139+ Bewertungen
Bestellen bis 16:00 Uhr für Versand am selben Tag
14 Tage Rückgabe
DE
Privat
Geschäftlich
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!
sudo poweroff
oder -Taste). sudo raspi-config
sudo apt-get update -y sudo apt-get upgrade -y
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./home/pi/timelapse_project
sehen.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:
Kamera:
Vorschau: true # Während der Aufnahme ein kleines Vorschaufenster anzeigen
Pixelverhältnis:
- 1920 # Breite der Fotos
- 1080 # Höhe der Fotos
Vorschaupixelverhältnis:
- 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
maximale Zeit:
Dauer: 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.
dep.bash
)Erstellen Sie die Datei:
nano dep.bash
Fügen Sie dies ein:
#!/usr/bin/env bash sudo apt-get update -y # Haalt de nieuwste pakketlijsten op sudo apt-get upgrade -y # Installeert alle beschikbare updates sudo apt-get autoremove -y # Verwijdert oude, overbodige pakketten # Installeer Python-modules & camera-drivers 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
undupgrade
stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist.autoremove
räumt auf.install
ruft bestimmte Python-Pakete und Kamerabibliotheken ab.
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.
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.
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): # Maakt folders als ze nog niet bestaan
Stellt sicher, dass pictures/
und time_lapse_videos/
vorhanden sind.
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.
def images_to_video(...): # Leest alle .jpg-bestanden, maakt er een mp4 van
Kombiniert die Fotos und fügt (optional) Unschärfe hinzu.
def error(e): images_to_video() # Zet op dat er een video wordt gemaakt cleanup()
Fängt Fehler ab und stellt sicher, dass aufgenommene Fotos nicht verloren gehen.
camera.start(...) for i in range(1, iterations+1): maak_foto_en_sla_op(i) time.sleep(config["frame_interval"]) images_to_video() cleanup()
In Ihrem Ordner timelapse_project
sollten Sie jetzt Folgendes sehen:
ls -R
. ├── config.yaml ├── dep.bash ├── timelapse.py ├── pictures/ # (leegt aanvankelijk) └── time_lapse_videos/ # (leegt aanvankelijk)
cd ~/timelapse_project
). python3 timelapse.py
Was Sie sehen:
Warten Sie, bis Klaar!
wird im Terminal angezeigt.
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.
Problem | Lösung |
---|---|
Kamera nicht verfügbar | Überprüfen Sie sudo raspi-config → Schnittstellenoptionen → Kamera |
Berechtigungsfehler | Führen Sie das Skript mit python3 aus (nicht als Root) und überprüfen Sie die Dateiberechtigungen |
Wenig Speicherplatz | Passen Sie maxtime oder frame_interval an oder erweitern Sie die SD-Karte |
Fotos speichern | Entfernen oder kommentieren Sie cleanup() vom Ende des Skripts |
Probleme mit dem Videocodec | Verwenden Sie omxplayer oder passen Sie fourcc in images_to_video() |