Segmentación en tiempo real con YOLOv11

Resumen

La segmentación de imágenes en tiempo real con YOLOv11 te permite detectar y delimitar objetos cuadro a cuadro usando solo tu cámara y Python. Si trabajas con visión por computadora y quieres aislar personas, objetos o áreas específicas en video, esta implementación con OpenCV, NumPy y Ultralytics te da una base funcional con pocas líneas de código.

¿Qué es YOLO y por qué usarlo para segmentación?

YOLO significa You Only Look Once, y su gran ventaja es que analiza una imagen en una sola pasada, de ahí su nombre. Esa eficiencia lo convierte en una opción ideal cuando necesitas procesar video en vivo sin sacrificar velocidad.

La empresa Ultralytics mantiene hoy el desarrollo de YOLO con una librería de código abierto, una comunidad activa y versiones nuevas constantemente. Su ecosistema cubre detección de objetos, segmentación, análisis en tiempo real e incluso detección de puntos característicos del cuerpo.

¿Qué hace diferente a YOLO frente a otros modelos? Procesa la imagen completa en una sola pasada en lugar de revisarla por regiones. Eso baja la latencia y lo vuelve apto para cámaras en vivo.

¿Cómo configurar YOLOv11 Nano con OpenCV y Ultralytics?

Para la implementación necesitas tres librerías: OpenCV, NumPy y Ultralytics. Si todavía no tienes Ultralytics instalado, debes correr el comando de instalación antes de empezar.

El modelo elegido es YOLOv11 Nano. La documentación oficial ofrece cinco tamaños de modelo, y el Nano es el más pequeño, pensado para correr en CPU sin requerir GPU dedicada.

Después defines la fuente del video. Si tienes una sola cámara, asignas el valor 0; si tienes una segunda cámara, usas 1. También configuras el ancho y alto para aprovechar la resolución completa de la pantalla.

¿Cómo medir la latencia del procesamiento por frame?

Una vez que arranca la captura, mides el tiempo de procesamiento antes y después de pasar el frame al modelo. Esa diferencia es la latencia, y te dice cuánto tarda YOLO en procesar cada cuadro. Visualizarla en pantalla te permite saber si el modelo va fluido o si necesitas optimizar.

¿Cómo se dibujan los bounding boxes y las máscaras?

Después de que el modelo calcula las características, accedes a tres datos por cada detección: el bounding box, el confidence y la clase. El bounding box es el rectángulo que rodea al objeto, definido por su esquina superior izquierda y su esquina inferior derecha.

Por cada detección haces lo siguiente:

  • Enumeras los objetos detectados.
  • Asignas el nombre de la clase si está disponible, o un número si no.
  • Dibujas el rectángulo del bounding box con su etiqueta.
  • Muestras el confidence asociado.

Hasta aquí tendrías una detección estándar. La parte distintiva de la segmentación viene ahora.

¿Cómo se representa el segmento detectado con una máscara?

Para colorear el área exacta del objeto detectado creas una máscara. Primero la generas, luego la redimensionas para que coincida con la dimensión del frame original y puedas superponerlas.

Esa máscara debe ser booleana, porque trabajas con una estructura RGB o BGR de tres canales. Por eso creas los tres canales y les aplicas un color aleatorio en cada frame. Así, si aparecen varios objetos a la vez, cada uno recibe un color distinto y no se superponen visualmente.

Finalmente combinas la máscara con el frame original. El resultado es una imagen con los colores reales del video más la máscara coloreada encima del objeto detectado.

¿Para qué sirve una máscara booleana en segmentación? Marca con True los píxeles que pertenecen al objeto y con False los que no. Eso permite aplicar color solo en la zona detectada sin alterar el resto del frame.

¿Cómo filtrar detecciones por clase y confidence?

Muchas veces el modelo detecta cosas que no te interesan. En la prueba aparecieron una taza y un oso de peluche, pero quizás solo te importan las personas. Para eso ajustas dos parámetros al llamar al modelo.

  • Confidence mínimo: por ejemplo 0.7, para que solo muestre detecciones con más del 70 % de certeza.
  • Clases específicas: pasas el número de la clase que quieres aislar.

YOLO viene con un modelo preentrenado sobre 80 categorías, cada una con un número asignado. La clase 0 corresponde a persona. Si pasas [0, 13], detectaría personas y sillas al mismo tiempo. Así filtras objetos de interés combinando categoría y umbral de confianza.

¿Qué pasa cuando hay varios objetos en el frame?

Cada objeto detectado recibe su propia máscara con un color aleatorio independiente. Si te alejas de la cámara y solo apareces tú, verás una sola máscara. Si entra otro objeto al cuadro, aparecen dos máscaras simultáneas, cada una con su bounding box, etiqueta y color propio.

Cuéntame en los comentarios qué clases del modelo preentrenado te interesa filtrar primero en tu propio proyecto.