Contenido del curso
Procesamiento de Imágenes y Fundamentos de OpenCV
Segmentación de Imágenes con YOLO
Detección de Objetos con YOLO
Pose Estimation con Mediapipe
Entrenamiento y Creación de Modelos Personalizados con YOLO
Heatmap de personas con YOLO y OpenCV
Resumen
Cuando construyes un heatmap solo con procesamiento de imágenes en OpenCV, cualquier objeto en movimiento aparece detectado: una cuerda colgando, una sombra, una bolsa que se mueve. La segmentación con YOLO resuelve ese problema porque te permite enfocarte exclusivamente en las personas y limpiar el ruido visual. Esta técnica es útil si trabajas con visión por computador aplicada a retail, seguridad o análisis de tráfico peatonal.
¿Por qué combinar segmentación con sustracción de fondo?
La idea central es unir dos máscaras: la máscara de movimiento que ya conoces del background subtractor y la máscara de segmentación que entrega YOLO. El resultado es un heatmap que solo registra personas, sin partículas raras ni objetos accesorios.
En el video del centro comercial puedes ver cuatro paneles trabajando en paralelo:
- El frame original del video.
- La máscara de movimiento que detecta cualquier cambio entre frames.
- La segmentación de YOLO que aísla únicamente personas.
- La máscara refinada, que es la intersección entre movimiento y segmentación.
¿Qué hace la segmentación en un heatmap? Identifica los píxeles que pertenecen a una persona en cada frame y descarta el resto. Así el heatmap solo acumula calor donde hubo presencia humana real.
¿Cómo se arma el flujo en código?
El punto de partida es el mismo heatmap que ya construiste con procesamiento de imágenes, pero le sumas la capa de YOLO. Necesitas instalar ultralytics si aún no lo tienes y definir el path del video que vas a analizar.
Configuración inicial del pipeline
Dentro del script debes preparar varios elementos antes de iterar sobre los frames:
- Abrir el video con su path.
- Inicializar el sustractor de fondo (BG subtractor).
- Crear el heatmap refinado vacío.
- Importar el modelo YOLO de segmentación.
A partir de ahí entras al loop donde capturas cada frame, aplicas la sustracción de fondo y defines un umbral binario para limpiar el resultado del movimiento.
Detección y filtrado de personas con YOLO
Con el frame ya procesado, se lo pasas al modelo. Si no quieres que la consola imprima cada detección, configura verbose=False y te quedas con el primer resultado.
Luego creas una máscara vacía y, si YOLO encontró objetos, recorres las detecciones para conservar solo la clase persona. YOLO puede detectar 80 clases distintas, pero aquí solo te interesa una.
El paso clave es:
- Convertir la máscara de la persona en binaria.
- Redimensionarla al tamaño del frame original para que coincida con la máscara de movimiento.
- Hacer un bitwise entre ambas máscaras para obtener la intersección.
Ese bitwise es lo que elimina los puntos blancos del ruido y deja solo a las personas en el heatmap final.
¿Cómo se ve el resultado en Google Colab?
Una vez que entiendes qué hace cada parte, puedes saltarte la visualización de los cuatro paneles y generar directamente el heatmap final en un notebook. Conecta el entorno a una GPU desde la configuración del cuaderno para acelerar el proceso.
¿Qué hago si YOLO no descarga el modelo en Colab? Ve a la documentación de ultralytics, busca la sección de segmentación, haz clic derecho sobre el modelo y copia el vínculo. Luego descárgalo manualmente con el comando wget y el link correspondiente.
Con GPU activa, el procesamiento del video del centro comercial tarda alrededor de 2 minutos con 15 segundos. El heatmap resultante muestra con claridad por dónde caminó cada persona en el pasillo, sin partículas dispersas. Incluso se nota un brazo extendido como zona de mayor intensidad.
¿La segmentación resuelve el problema de la cuerda en movimiento?
Este era el desafío inicial: una cuerda colgando se balanceaba y el heatmap antiguo la registraba como si fuera una persona. La hipótesis era que al enfocar solo personas, la cuerda iba a desaparecer del mapa.
Al correr el flujo con segmentación sobre ese segundo video, el procesamiento dura cerca de 30 segundos y el resultado confirma la teoría:
- La cuerda ya no aparece como zona caliente.
- El heatmap concentra la intensidad en dos personas que estuvieron paradas mucho tiempo en puntos específicos.
- La versión normalizada muestra el flujo limpio, enfocado solo en movimiento humano.
Comparado con el heatmap original, donde la cuerda dominaba la imagen, la segmentación entrega un análisis fiel al comportamiento de los clientes.
Habilidades y conceptos que aplicaste
Esta clase combina técnicas de visión por computador clásica con deep learning:
- Sustracción de fondo [0:50]: técnica de OpenCV que detecta cambios entre frames usando un background subtractor.
- Umbralización binaria [1:30]: convierte la imagen en blanco y negro según un valor de corte para limpiar el resultado.
- Segmentación con YOLO [1:45]: modelo que identifica los píxeles exactos de cada objeto, no solo su bounding box.
- Máscara binaria [2:30]: imagen donde cada píxel vale 0 o 1 para marcar pertenencia a una región.
- Operación bitwise [2:50]: intersección lógica entre dos máscaras que conserva solo los píxeles comunes.
- Filtrado por clase [2:15]: YOLO detecta 80 clases pero aquí se filtra solo la clase persona.
- Verbose false [2:00]: parámetro que silencia los logs de detección en consola.
El siguiente paso natural es contar cuántas personas pasan por ese pasillo, no solo dónde estuvieron. ¿Qué métrica te gustaría medir primero en tu propio caso de uso? Cuéntalo en los comentarios.