Comprender la visión computarizada

1

¿Por qué aprender computer vision?

2

¿Qué es la visión computarizada?

3

Tipos de visión computarizada

4

Introducción a object detection: clasificación + localización

5

Aprende a identificar problemas

Dimensionamiento de proyecto de visión computarizada

6

Cómo definir los tiempos de tu proyecto

7

Cómo costear tu proyecto

8

Cómo identificar los roles necesarios en el proyecto

9

Producto mínimo viable en computer vision

Obtención y procesamiento de los datos

10

Obtención de datos para tu proyecto

11

Limpieza de la base de datos

12

Distribución de datos en entrenamiento y testeo

13

Etiquetado de los datos de test

14

Etiquetado de los datos de train

15

Transforma tu base de datos a TFRecord

16

Transformar CSV a TFRecord

Entrena, testea y optimiza tus modelos

17

Librerías a importar durante fase de entrenamiento

18

Fase de entrenamiento del modelo

19

Balanceo de imágenes y data augmentation

20

Entrena, evalua y optimiza con TensorBoard

21

Validación de modelo en un entorno de ejecución

22

Re-entrenamiento del modelo para obtener mejores resultados

23

Seguimiento de centroides con OpenCV

24

Configuración de los centroides con OpenCV

25

Algoritmo de dirección y conteo con OpenCV

26

Crea un ciclo de entrenamiento de tu modelo: MLOps

Producto con visión computarizada en producción

27

Prepara tu entorno en Google Cloud Platform

28

Carga y preprocesamiento de modelos

29

Postprocesamiento de modelos

30

Despliega y consume tu modelo en producción

31

Bonus: aprende a apagar las máquinas de GCP para evitar sobrecostos

Siguientes pasos en inteligencia artificial

32

Siguientes pasos en inteligencia artificial

33

Comparte tu proyecto de detección de vehículos en carretera y certifícate

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

16 Días
3 Hrs
34 Min
4 Seg

Configuración de los centroides con OpenCV

24/33
Recursos

Aportes 4

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Hubiese sido genial que en esta clase se hubiese usado mas recursos visuales para entender lo que se esta haciendo.

Me imagino que esta división de los frames depende también de la velocidad con que se realizó la grabación, osea si se grabó a 24 fps se realizara la división por 24, y así sucesivamente.

Configurar correctamente el seguimiento de centroides en OpenCV implica ajustar varios parámetros para detectar y seguir los objetos de interés de manera más precisa. Aquí algunos pasos que puedes tomar para mejorar y configurar el seguimiento de centroides en OpenCV: \### 1. \*\*Ajustar el Método de Segmentación\*\* La segmentación es clave para detectar correctamente los objetos. Puedes experimentar con métodos de segmentación como: \- \*\*Umbral Adaptativo\*\*: Ayuda cuando la iluminación no es uniforme en la imagen. ```python thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE\_THRESH\_GAUSSIAN\_C, cv2.THRESH\_BINARY, 11, 2) ``` \- \*\*Segmentación por Color\*\*: Si los objetos tienen colores específicos, puedes usar máscaras de color en el espacio de color HSV. ```python hsv = cv2.cvtColor(frame, cv2.COLOR\_BGR2HSV) lower\_color = np.array(\[H\_min, S\_min, V\_min]) # Ajusta estos valores upper\_color = np.array(\[H\_max, S\_max, V\_max]) # Ajusta estos valores mask = cv2.inRange(hsv, lower\_color, upper\_color) ``` \- \*\*Detección de Bordes (Canny)\*\*: Puede ayudar a detectar contornos en objetos con bordes definidos. ```python edges = cv2.Canny(gray, 100, 200) ``` \### 2. \*\*Filtrado de Contornos por Tamaño o Forma\*\* Para evitar la detección de ruido o pequeños objetos, filtra los contornos según su área o forma: ```python min\_area = 500 # Área mínima del contorno for contour in contours: if cv2.contourArea(contour) > min\_area: \# Procesar el contorno si cumple con el área mínima \# ... ``` \### 3. \*\*Suavizar el Video (Filtro Gaussiano o Blur)\*\* Aplicar un filtro Gaussiano antes de la detección puede ayudar a reducir el ruido en la imagen: ```python gray = cv2.GaussianBlur(gray, (5, 5), 0) ``` \### 4. \*\*Configuración del Cálculo del Centroide\*\* Asegúrate de que el cálculo del centroide se haga correctamente usando momentos. Si trabajas con varios objetos, puedes asignar un identificador único a cada uno y seguirlos en cada fotograma. ```python M = cv2.moments(contour) if M\["m00"] != 0: cX = int(M\["m10"] / M\["m00"]) cY = int(M\["m01"] / M\["m00"]) ``` \### 5. \*\*Añadir Estabilidad al Centroide (Filtro de Promedio)\*\* Si el centroide varía mucho, puedes suavizar su movimiento usando un promedio móvil para estabilizar el seguimiento. ```python alpha = 0.7 # Factor de suavizado (entre 0 y 1) cX\_smooth = int(alpha \* prev\_cX + (1 - alpha) \* cX) cY\_smooth = int(alpha \* prev\_cY + (1 - alpha) \* cY) ``` \### 6. \*\*Usar Algoritmos de Seguimiento Adicionales\*\* Si necesitas una mayor estabilidad en el seguimiento, puedes usar algoritmos como el filtro de Kalman o los trackers de OpenCV para una mejora considerable en la predicción y seguimiento de trayectorias. ```python tracker = cv2.TrackerCSRT\_create() # Puedes cambiar el tipo de tracker tracker.init(frame, bbox) # bbox es el cuadro delimitador inicial del objeto ``` \### Ejemplo Completo Aquí tienes un ejemplo de código que combina algunos de estos ajustes: ```python import cv2 import numpy as np \# Abre el video cap = cv2.VideoCapture('video.mp4') min\_area = 500 # Área mínima para considerar un contorno válido \# Variables para suavizar el centroide alpha = 0.7 prev\_cX, prev\_cY = 0, 0 while True: ret, frame = cap.read() if not ret: break \# Conversión a escala de grises y suavizado gray = cv2.cvtColor(frame, cv2.COLOR\_BGR2GRAY) gray = cv2.GaussianBlur(gray, (5, 5), 0) \# Umbralización adaptativa para segmentar thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE\_THRESH\_GAUSSIAN\_C, cv2.THRESH\_BINARY, 11, 2) \# Encontrar contornos contours, \_ = cv2.findContours(thresh, cv2.RETR\_EXTERNAL, cv2.CHAIN\_APPROX\_SIMPLE) for contour in contours: if cv2.contourArea(contour) > min\_area: M = cv2.moments(contour) if M\["m00"] != 0: cX = int(M\["m10"] / M\["m00"]) cY = int(M\["m01"] / M\["m00"]) \# Suavizar la posición del centroide cX\_smooth = int(alpha \* prev\_cX + (1 - alpha) \* cX) cY\_smooth = int(alpha \* prev\_cY + (1 - alpha) \* cY) \# Actualizar las posiciones anteriores prev\_cX, prev\_cY = cX\_smooth, cY\_smooth \# Dibuja el centroide cv2.circle(frame, (cX\_smooth, cY\_smooth), 7, (0, 255, 0), -1) cv2.putText(frame, f"({cX\_smooth}, {cY\_smooth})", (cX\_smooth + 10, cY\_smooth), cv2.FONT\_HERSHEY\_SIMPLEX, 0.5, (0, 255, 0), 2) \# Mostrar el resultado cv2.imshow("Seguimiento de Centroides", frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` \### Descripción de los Pasos: 1\. \*\*Umbralización Adaptativa\*\*: Segmenta la imagen sin depender de un umbral fijo, lo cual es útil en condiciones de iluminación variable. 2\. \*\*Filtrado de Contornos por Área\*\*: Asegura que solo se rastrean los objetos relevantes. 3\. \*\*Suavizado de Centroide\*\*: Suaviza el movimiento del centroide para evitar fluctuaciones rápidas. Estas configuraciones ayudan a mejorar la detección y el seguimiento de centroides en OpenCV, especialmente en situaciones de video en tiempo real o donde la iluminación puede variar.
La calidad de las clases ha ido disminuyendo, parece que me uní a un meet y el profesor iba explicando del tirón, a diferencia de las clases anteriores donde al menos se dedicaban tiempo de hacer visuales.