4.8 Real-time vision pipeline-frameworks
Waarom dit belangrijk is
Een nauwkeurig model alleen creëert nog geen real-time visiesysteem.
Een werkend systeem heeft ook nodig:
- input van camera's of bestanden
- decodering en frametransport
- inferentie en nabewerking
- weergave, opslag of downstream-communicatie
Die hele keten wordt een pipeline genoemd.
Deze sectie introduceert het denken in frameworks dat nodig is om real-time visiesystemen te begrijpen, voordat we ingaan op DeepStream en Jetson-specifieke diensten.
Leerdoelen
Aan het einde van deze sectie zou je in staat moeten zijn om:
- de belangrijkste fasen van een real-time vision-pipeline uit te leggen
- eenvoudige applicatiepipelines te vergelijken met framework-gebaseerde pipelines
- de rol van
OpenCVenGStreamerte begrijpen - kleine voorbeelden te schrijven voor het lezen en verwerken van live video
- te denken in end-to-end systeemflow in plaats van geïsoleerde modelaanroepen
Kernconcepten / Theorie
Een real-time pipeline heeft fasen
Een typische real-time visuele pipeline omvat:
- broninvoer
- decodering en frame-acquisitie
- preprocessing
- modelinferentie
- nabewerking
- rendering, opslag of transmissie
Waarom pipelines belangrijk zijn
Als één fase onstabiel of te traag is, lijdt het hele systeem.
Bijvoorbeeld:
- een slechte RTSP-stream kan verloren frames veroorzaken
- trage preprocessing kan de latentie verhogen
- onnodige weergave-overhead kan de doorvoer beperken
OpenCV vs GStreamer
OpenCV is handig voor leren en applicatielogica.
GStreamer is sterker wanneer je robuuste mediapipelines, streaming en real-time dataflow nodig hebt.
Beide zijn nuttig, maar dienen verschillende rollen.
Belangrijkste termen
Source: waar frames vandaan komenDecode: gecomprimeerde video omzetten naar framesPreprocessing: frames voorbereiden voor inferentiePost-processing: ruwe voorspellingen omzetten in bruikbare outputLatency: end-to-end vertraging door de pipelineThroughput: totaal volume van verwerkte frames of streams
Uitgewerkt voorbeeld / Codevoorbeeld
Eenvoudige 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-voorbeeld
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosinkRTSP-invoervoorbeeld
gst-launch-1.0 rtspsrc location=rtsp://<camera-ip>/<path> latency=200 ! \
rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosinkVeelvoorkomende misverstanden
- "Het model is de pipeline."
- Het model is slechts één fase binnen de pipeline.
- "Als ik 30 FPS haal in de modelbenchmark, draait het hele systeem op 30 FPS."
- End-to-end prestaties hangen af van de hele pipeline.
- "OpenCV en GStreamer doen hetzelfde."
- Ze overlappen op sommige gebieden, maar zijn niet dezelfde tool.
Oefeningen / Reflectie
- Teken een real-time pipeline van vijf fasen voor een webcam-detector.
- Voer het OpenCV-voorbeeld uit en meet de geschatte FPS op je machine.
- Vergeleken een videobestandsinvoer met een live camera-invoer. Welke praktische verschillen merk je op?
- Leg uit waarom end-to-end latentie vaak belangrijker is dan alleen de inferentietijd van het model.
Samenvatting
Real-time computer vision hangt af van pipeline-ontwerp, niet alleen van modellen. Begrip van invoer, decodering, preprocessing, inferentie, nabewerking en uitvoer bereidt de leerling voor op meer geavanceerde edge-frameworks zoals DeepStream.
Voorgestelde volgende stap
Ga verder met 4.9 DeepStream en Jetson.