4.8 Frameworks de pipeline de visión en tiempo real
Por qué esto importa
Un modelo preciso por sí solo no crea un sistema de visión en tiempo real.
Un sistema funcional también necesita:
- entrada desde cámaras o archivos
- decodificación y transporte de fotogramas
- inferencia y postprocesado
- visualización, almacenamiento o comunicación posterior
Toda esa cadena se llama pipeline.
Esta sección presenta el pensamiento basado en frameworks necesario para entender los sistemas de visión en tiempo real antes de pasar a DeepStream y a los servicios específicos de Jetson.
Objetivos de aprendizaje
Al final de esta sección, deberías ser capaz de:
- explicar las principales etapas de un pipeline de visión en tiempo real
- comparar pipelines de aplicación simples con pipelines basados en frameworks
- entender el papel de
OpenCVyGStreamer - escribir pequeños ejemplos para leer y procesar vídeo en vivo
- pensar en términos de flujo de sistema de extremo a extremo en lugar de llamadas aisladas al modelo
Conceptos clave / Teoría
Un pipeline en tiempo real tiene etapas
Un pipeline visual en tiempo real típico incluye:
- entrada de fuente
- decodificación y adquisición de fotogramas
- preprocesado
- inferencia del modelo
- postprocesado
- renderizado, almacenamiento o transmisión
Por qué importan los pipelines
Si una etapa es inestable o demasiado lenta, todo el sistema sufre.
Por ejemplo:
- un mal stream RTSP puede causar fotogramas perdidos
- un preprocesado lento puede aumentar la latencia
- la sobrecarga innecesaria de visualización puede limitar el throughput
OpenCV vs GStreamer
OpenCV es conveniente para aprendizaje y lógica de aplicación.
GStreamer es más potente cuando necesitas pipelines de medios robustos, streaming y flujo de datos en tiempo real.
Ambos son útiles, pero cumplen roles diferentes.
Términos clave
Source: de dónde provienen los fotogramasDecode: convertir vídeo comprimido en fotogramasPreprocessing: preparar fotogramas para la inferenciaPost-processing: convertir las predicciones brutas en salida útilLatency: retardo extremo a extremo a través del pipelineThroughput: volumen total de fotogramas o streams procesados
Ejemplo trabajado / Ejemplo de código
Pipeline en vivo simple con OpenCV
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()Ejemplo de GStreamer
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosinkEjemplo de entrada RTSP
gst-launch-1.0 rtspsrc location=rtsp://<camera-ip>/<path> latency=200 ! \
rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! autovideosinkErrores comunes
- "El modelo es el pipeline."
- El modelo es solo una etapa dentro del pipeline.
- "Si obtengo 30 FPS en el benchmark del modelo, todo el sistema corre a 30 FPS."
- El rendimiento extremo a extremo depende de todo el pipeline.
- "OpenCV y GStreamer hacen lo mismo."
- Se solapan en algunas áreas, pero no son la misma herramienta.
Ejercicios / Reflexión
- Dibuja un pipeline en tiempo real de cinco etapas para un detector con webcam.
- Ejecuta el ejemplo de OpenCV y mide los FPS aproximados en tu máquina.
- Compara una entrada de archivo de vídeo y una entrada de cámara en vivo. ¿Qué diferencias prácticas observas?
- Explica por qué la latencia extremo a extremo suele ser más importante que el tiempo de inferencia del modelo por sí solo.
Resumen
La visión por computadora en tiempo real depende del diseño del pipeline, no solo de los modelos. Comprender la entrada, la decodificación, el preprocesado, la inferencia, el postprocesado y la salida prepara al alumno para frameworks de edge más avanzados como DeepStream.
Siguiente paso sugerido
Continúa con 4.9 DeepStream y Jetson.