4.8 Echtzeit-Vision-Pipeline-Frameworks
Warum das wichtig ist
Ein genaues Modell allein ergibt noch kein Echtzeit-Vision-System.
Ein funktionierendes System benötigt außerdem:
- Eingaben von Kameras oder Dateien
- Decodierung und Frame-Transport
- Inferenz und Nachverarbeitung
- Anzeige, Speicherung oder nachgelagerte Kommunikation
Diese gesamte Kette wird als Pipeline bezeichnet.
Dieser Abschnitt führt das Framework-Denken ein, das nötig ist, um Echtzeit-Vision-Systeme zu verstehen, bevor wir zu DeepStream und Jetson-spezifischen Diensten übergehen.
Lernziele
Am Ende dieses Abschnitts sollten Sie in der Lage sein:
- die wichtigsten Phasen einer Echtzeit-Vision-Pipeline zu erklären
- einfache Anwendungspipelines mit framework-basierten Pipelines zu vergleichen
- die Rolle von
OpenCVundGStreamerzu verstehen - kleine Beispiele zum Lesen und Verarbeiten von Live-Video zu schreiben
- in End-to-End-Systemflüssen statt in isolierten Modellaufrufen zu denken
Kernkonzepte / Theorie
Eine Echtzeit-Pipeline besteht aus Phasen
Eine typische Echtzeit-Vision-Pipeline umfasst:
- Quelleingang
- Decodierung und Frame-Erfassung
- Vorverarbeitung
- Modellinferenz
- Nachverarbeitung
- Rendering, Speicherung oder Übertragung
Warum Pipelines wichtig sind
Wenn eine Phase instabil oder zu langsam ist, leidet das gesamte System.
Zum Beispiel:
- ein schlechter RTSP-Stream kann verlorene Frames verursachen
- langsame Vorverarbeitung kann die Latenz erhöhen
- unnötiger Anzeige-Overhead kann den Durchsatz begrenzen
OpenCV vs GStreamer
OpenCV ist praktisch zum Lernen und für Anwendungslogik.
GStreamer ist stärker, wenn Sie robuste Medien-Pipelines, Streaming und Echtzeit-Datenflüsse benötigen.
Beide sind nützlich, erfüllen aber unterschiedliche Rollen.
Schlüsselbegriffe
Source: Woher die Frames kommenDecode: Komprimiertes Video in Frames umwandelnPreprocessing: Frames für die Inferenz vorbereitenPost-processing: Rohvorhersagen in nützliche Ausgabe verwandelnLatency: Durchgehende Verzögerung durch die PipelineThroughput: Gesamtmenge der verarbeiteten Frames oder Streams
Ausgearbeitetes Beispiel / Codebeispiel
Voraussetzungen: Installieren Sie die benötigten Abhängigkeiten:
bashpip install opencv-python
Einfache OpenCV-Live-Pipeline
import cv2
import time
cap = cv2.VideoCapture(0)
prev_time = time.time()
while True:
ok, frame = cap.read()
if not ok:
break
current_time = time.time()
fps = 1.0 / (current_time - prev_time)
prev_time = current_time
cv2.putText(frame, f"FPS: {fps:.2f}", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
cv2.imshow("OpenCV Live Pipeline", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()GStreamer-Beispiel
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosinkBeispiel für RTSP-Eingang
gst-launch-1.0 rtspsrc location=rtsp://<camera-ip>/<path> latency=200 ! \
rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosinkHäufige Missverständnisse
- "Das Modell ist die Pipeline."
- Das Modell ist nur eine Phase innerhalb der Pipeline.
- "Wenn ich im Modell-Benchmark 30 FPS erreiche, läuft das gesamte System mit 30 FPS."
- Die End-to-End-Leistung hängt von der gesamten Pipeline ab.
- "OpenCV und GStreamer machen dasselbe."
- Sie überschneiden sich in einigen Bereichen, sind aber nicht dasselbe Werkzeug.
MediaPipe
MediaPipe ist Googles Open-Source-Framework für den Aufbau von Echtzeit-Pipelines für multimodale ML-Wahrnehmung.
Einrichtung
uv venv .mediapipe --python 3.10.12
source .mediapipe/bin/activate
uv pip install mediapipe opencv-python dlib

Hinweis: Die Kompilierung von
dlibkann mehrere Minuten dauern. Haben Sie etwas Geduld.
Handerkennung
Erkennen Sie 21 Hand-Keypoints in Echtzeit:

Gesichtserkennung

Posenschätzung
Erkennen Sie 32 Körper-Keypoints:

Holistische Erkennung
Erkennen Sie gleichzeitig Körper-, Hand- und Gesichts-Keypoints:

Weitere MediaPipe-Funktionen
- Gesichtsmesh — 3D-Gesichtsmesh mit 468 Landmarken
- Virtueller Pinsel — Zeichnen mit Fingergesten
- Gestenerkennung — Erkennt über 14 Handgesten
- Fingersteuerung — Steuerung der Oberfläche über den Fingerabstand
- 3D-Objekterkennung — Erkennt Schuhe, Stühle, Kameras und Tassen
- Hintergrundentfernung — Hintergründe segmentieren und ersetzen

QR-Code-Erkennung
QR-Codes erzeugen
Voraussetzungen: Installieren Sie die benötigten Abhängigkeiten:
bashpip install qrcode pillow opencv-python numpy pyzbar
cd 4-Computer-Vision/4.8-Real-Time-Vision-Pipeline-Frameworks/code
python qr_code_generate.py
QR-Codes erkennen
cd 4-Computer-Vision/4.8-Real-Time-Vision-Pipeline-Frameworks/code
python qr_code_detect.py
Übungen / Reflexion
- Zeichnen Sie eine fünfstufige Echtzeit-Pipeline für einen Webcam-Detektor.
- Führen Sie das OpenCV-Beispiel aus und messen Sie die ungefähre FPS auf Ihrem Rechner.
- Vergleichen Sie eine Videodatei-Eingabe mit einer Live-Kamera-Eingabe. Welche praktischen Unterschiede beobachten Sie?
- Erklären Sie, warum die End-to-End-Latenz oft wichtiger ist als nur die Modellinferenzzeit.
Zusammenfassung
Echtzeit-Computer-Vision hängt vom Pipeline-Design ab, nicht nur von Modellen. Das Verständnis von Eingabe, Decodierung, Vorverarbeitung, Inferenz, Nachverarbeitung und Ausgabe bereitet den Lernenden auf fortgeschrittenere Edge-Frameworks wie DeepStream vor.
Empfohlener nächster Schritt
Fahren Sie fort mit 4.9 DeepStream und Jetson.