Dabney Rueda
Percy Tejada
Diego Ernesto Cuaycal Tirira
Víctor Trigo
Julio Burbano
Iván Alexis Nocua Benitez
Carlos Bustillo
ProfesorNina Papas
Carlos Bustillo
ProfesorGina Peñaloza
Paola Polanco
Victor Matias Marquez
Gustavo Guillermo Alonso
Francisco López Velázquez
Jonatan Yesid Santamaría Largo
Carlos Bustillo
ProfesorSe equivocaron en el orden de los videos, este debería ser después de la clase 4
El código de la clase lo encuentran en el siguiente enlace:
Gracias
Es posible crear un video donde se vea frame por frame como se crea el Heatma?, y no solo el resultado final
Hola Víctor. No se si será a esto que te refieres (está probando en local con VSCode, imagino que para usarlo en Colab deberás cambiar la ruta del video original). El resultado es un video mp4 incrementando frame por frame el mapa de calor hsata llegar al final del video:
# Crea un video sumando el mapa de calor import cv2 import numpy as np from pathlib import Path video_path = r"./Data/store-aisle-detection.mp4" # Resolver ruta del video y carpeta contenedora video_file = Path(video_path).resolve() video_dir = video_file.parent stem = video_file.stem cap = cv2.VideoCapture(str(video_file)) if not cap.isOpened(): raise FileNotFoundError(f"No se pudo abrir el video: {video_file}") fps = cap.get(cv2.CAP_PROP_FPS) if not fps or fps <= 0: fps = 30.0 # fallback w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # Archivo de salida en la MISMA carpeta out_path = video_dir / f"{stem}_heat_accum.mp4" # Writer MP4 fourcc = cv2.VideoWriter_fourcc(*"mp4v") out = cv2.VideoWriter(str(out_path), fourcc, fps, (w, h), isColor=True) if not out.isOpened(): cap.release() raise RuntimeError(f"No se pudo crear el video de salida: {out_path}") # Sustractor de fondo (MOG2) bg = cv2.createBackgroundSubtractorMOG2( history=500, varThreshold=16, detectShadows=True ) heat_acc = np.zeros((h, w), dtype=np.float32) frame_idx = 0 while True: ret, frame = cap.read() if not ret: break fgmask = bg.apply(frame) # Quitar sombras (127) y quedarnos con movimiento real (255) motion = (fgmask == 255).astype(np.float32) # 1 donde hay movimiento heat_acc += motion # Normalizar acumulado a 0..255 para visualizar frame a frame heat_u8 = cv2.normalize(heat_acc, None, 0, 255, cv2.NORM_MINMAX).astype(np.uint8) # Colormap tipo "hot": negro->rojo->amarillo->blanco (similar a matplotlib cmap="hot") heat_color = cv2.applyColorMap(heat_u8, cv2.COLORMAP_HOT) # Si quieres SOLO el mapa (negro/rojo), escribe heat_color tal cual: out.write(heat_color) frame_idx += 1 cap.release() out.release() print(f"Listo. Video generado: {out_path}") print(f"Frames procesados: {frame_idx}")
El numero de frames usados para construir el modelo, ¿es un valor standard o hay que ajustar ese valor siempre? ¿Si hay que ajustarlo, como sabria el numero de frames de cierto video?
El número de frames por segundo (FPS) a utilizar depende:
Vamos con un ejemplo hipotético que suele pasar:
Hay muchas industrias que solo suelen analizar 1 FPS en sus aplicaciones porque no hay mucha variación en 1 solo segundo.
Así que si solo necesitamos analizar 1 FPS, nuestro modelo podría hacer inferencias en los 0.4 segundos y tendríamos que esperar 0.6 segundos hasta que venga el nuevo frame a analizar.
Conocer esto también te ayuda a evitar colas, porque a veces capturas más frames de lo que podes procesar en "tiempo real".
enlace del codigo roto.
Puedes encontrar el notebook en el repositorio del curso: https://github.com/platzi/computer-vision/blob/main/1__Procesamiento_de_Im%C3%A1genes_con%20_OpenCV/2__Procesamiento_con_OpenCV.ipynb 🙌
Les comparto el mapa de calor del video de seguridad en una tienda.
Captura de foto del video original
jola
Profe, una consulta. En la parte del método que usamos para sustraer el fondo. Los valores de los parámetros, history, varThreshold, detecShadows, de que dependen? Osea porque en history podría poner 100 en vez de 500, que cambiaría?
El curso que estaba buscando!! muchas gracias
Para comprender bien la teoría, ¿qué temas específicos debo revisar? Entiendo que está relacionado con matemáticas, pero me gustaría saber exactamente qué área o concepto debo estudiar. Hasta ahora solo entiendo que se deben establecer parámetros para este video, pero si la situación cambia, entonces también cambiarán los parámetros.
enlace del codigo roto.
Puedes encontrar el notebook en el repositorio del curso: https://github.com/platzi/computer-vision/blob/main/1__Procesamiento_de_Im%C3%A1genes_con%20_OpenCV/2__Procesamiento_con_OpenCV.ipynb 🙌