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 OpenCV und GStreamer zu 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:

  1. Quelleingang
  2. Decodierung und Frame-Erfassung
  3. Vorverarbeitung
  4. Modellinferenz
  5. Nachverarbeitung
  6. 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 kommen
  • Decode: Komprimiertes Video in Frames umwandeln
  • Preprocessing: Frames für die Inferenz vorbereiten
  • Post-processing: Rohvorhersagen in nützliche Ausgabe verwandeln
  • Latency: Durchgehende Verzögerung durch die Pipeline
  • Throughput: Gesamtmenge der verarbeiteten Frames oder Streams

Ausgearbeitetes Beispiel / Codebeispiel

Voraussetzungen: Installieren Sie die benötigten Abhängigkeiten:

bash
pip install opencv-python

Einfache OpenCV-Live-Pipeline

python
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

bash
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

Beispiel für RTSP-Eingang

bash
gst-launch-1.0 rtspsrc location=rtsp://<camera-ip>/<path> latency=200 ! \
  rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosink

Hä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

bash
uv venv .mediapipe --python 3.10.12
source .mediapipe/bin/activate
uv pip install mediapipe opencv-python dlib

MediaPipe-Installation MediaPipe-Verifizierung

Hinweis: Die Kompilierung von dlib kann mehrere Minuten dauern. Haben Sie etwas Geduld.

Handerkennung

Erkennen Sie 21 Hand-Keypoints in Echtzeit:

Hand-Keypoints-Diagramm Handerkennung über USB

Gesichtserkennung

Gesichtserkennung

Posenschätzung

Erkennen Sie 32 Körper-Keypoints:

Pose-Keypoints Posenschätzung

Holistische Erkennung

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

Holistische Erkennung mit mehreren Personen Holistische Erkennung

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

Gesichtsmesh Virtueller Pinsel Gestenerkennung Fingersteuerung Objectron Hintergrundentfernung

QR-Code-Erkennung

QR-Codes erzeugen

Voraussetzungen: Installieren Sie die benötigten Abhängigkeiten:

bash
pip install qrcode pillow opencv-python numpy pyzbar
bash
cd 4-Computer-Vision/4.8-Real-Time-Vision-Pipeline-Frameworks/code
python qr_code_generate.py

Erzeugter QR-Code

QR-Codes erkennen

bash
cd 4-Computer-Vision/4.8-Real-Time-Vision-Pipeline-Frameworks/code
python qr_code_detect.py

QR-Code-Erkennung

Übungen / Reflexion

  1. Zeichnen Sie eine fünfstufige Echtzeit-Pipeline für einen Webcam-Detektor.
  2. Führen Sie das OpenCV-Beispiel aus und messen Sie die ungefähre FPS auf Ihrem Rechner.
  3. Vergleichen Sie eine Videodatei-Eingabe mit einer Live-Kamera-Eingabe. Welche praktischen Unterschiede beobachten Sie?
  4. 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.

Referenzen