Este proyecto está diseñado para detectar y analizar baches en carreteras utilizando datos capturados por cámaras Intel RealSense almacenados en archivos .bag
. El sistema procesa estos archivos para extraer imágenes RGB y de profundidad, aplica un modelo de segmentación para identificar baches, estima sus dimensiones y profundidades utilizando datos de nube de puntos, y genera un informe detallado en formato CSV.
- Python 3.x: Lenguaje de programación principal del proyecto.
- PyRealSense2: Librería para interactuar con cámaras Intel RealSense y procesar archivos
.bag
. - OpenCV (cv2): Utilizada para procesamiento y manipulación de imágenes.
- NumPy: Para operaciones numéricas y manejo de arreglos.
- Open3D: Librería para procesamiento de datos 3D y nubes de puntos.
- PyTorch: Framework de aprendizaje profundo utilizado para cargar y ejecutar el modelo de segmentación.
- scikit-image: Para procesamiento de imágenes, como redimensionamiento y etiquetado de regiones.
- Shapely: Para operaciones geométricas, como manejar puntos y polígonos.
- Pillow (PIL): Para operaciones adicionales con imágenes.
- Tkinter: Interfaz gráfica de usuario para seleccionar carpetas de entrada y salida.
- Logging: Para registrar información y errores durante la ejecución.
- Concurrent Futures: Para procesamiento concurrente y mejorar el rendimiento.
- ProcesadorBags y BagFile: Estas clases se encargan de procesar los archivos
.bag
. Extraen imágenes RGB y de profundidad, y opcionalmente nubes de puntos en formato.ply
.
- Configuran una tubería (pipeline) para leer los datos de los archivos
.bag
. - Extraen y guardan cada cuadro (frame) como imágenes en carpetas organizadas.
- CargarModelo y ModeloSegmentacion: Se encargan de cargar el modelo de segmentación entrenado y aplicarlo a las imágenes extraídas.
- Cargan un modelo de segmentación (por ejemplo, un Segformer entrenado con PyTorch).
- Procesan las imágenes para identificar áreas que corresponden a baches.
- Generan máscaras de segmentación para localizar los baches en las imágenes.
- Bache: Clase que representa un bache detectado y contiene métodos para calcular sus propiedades.
- Calcula el contorno del bache a partir de las coordenadas de la máscara de segmentación.
- Estima el tamaño (radio y diámetro) y la profundidad del bache utilizando datos de nube de puntos.
- Genera imágenes con los contornos y anotaciones superpuestas.
- AdministradorDeArchivos: Maneja las operaciones de archivos y directorios, como crear carpetas, guardar imágenes y limpiar datos temporales.
- Genera listas de archivos e imágenes para procesar.
- Crea las estructuras de directorios necesarias para guardar resultados.
- Elimina archivos temporales si es necesario.
- SeguimientoBaches: Rastrea los baches detectados a través de múltiples frames para agrupar detecciones que corresponden al mismo bache físico.
- Usa criterios espaciales y temporales para determinar si los baches en diferentes frames son el mismo.
- Agrupa baches y calcula promedios de sus dimensiones y profundidades.
- Mantiene un historial para mejorar la precisión del seguimiento.
- Funciones
select_folder
ymain
: Proporcionan una interfaz gráfica simple para que el usuario seleccione las carpetas de entrada y salida.
- Utilizan Tkinter para abrir cuadros de diálogo de selección de carpetas.
- Inician el proceso principal una vez que se han seleccionado las rutas.
- Método
generar_documento_de_deterioros
en la claseMain
:- Compila los datos procesados de los baches y genera un archivo CSV llamado
deterioros.csv
. - El informe incluye información como ID del bache, radio máximo promedio, profundidad promedio, ruta de la imagen y los frames agrupados.
- Compila los datos procesados de los baches y genera un archivo CSV llamado
Al ejecutar el script principal, se abre una interfaz para seleccionar la carpeta que contiene los archivos .bag
y la carpeta de salida.
- Los archivos
.bag
seleccionados son procesados para extraer imágenes RGB y de profundidad. - Las imágenes son guardadas en una estructura de directorios organizada.
- El modelo pre-entrenado de segmentación es cargado en memoria.
- Se verifica si hay una GPU disponible para acelerar el procesamiento.
- El modelo de segmentación es aplicado a cada imagen extraída.
- Se identifican las regiones que corresponden a baches.
Para cada bache detectado:
- Se calcula su contorno y se estima su tamaño en píxeles.
- Se convierte el tamaño de píxeles a metros utilizando la escala calculada a partir de la altura de captura.
- Se utiliza la nube de puntos para estimar la profundidad del bache.
- Se generan imágenes con los contornos y medidas anotadas.
- Los baches son rastreados a través de diferentes frames para identificar si corresponden al mismo bache físico.
- Se agrupan las detecciones y se calculan promedios de sus dimensiones.
- Se crea un archivo CSV que contiene todos los baches detectados y sus propiedades.
- El informe facilita el análisis posterior y la toma de decisiones.
- Opcionalmente, se pueden eliminar los archivos extraídos para ahorrar espacio en disco.
- Python 3.8 instalado en el sistema.
pip install numpy opencv-python open3d pyrealsense2 torch torchvision scikit-image shapely pillow tkinter
Nota: Algunas librerías como pyrealsense2
y open3d
pueden requerir dependencias adicionales o instrucciones específicas de instalación.
- Clona o descarga el repositorio del proyecto en tu máquina local.
- Asegúrate de que todos los archivos Python están en el directorio correcto o ajusta las importaciones según sea necesario.
- Verifica que el archivo del modelo de segmentación (
model_state_dictV18-este_ya_trae_ruido.pth
) está en la ruta correcta o modifica el código para apuntar a su ubicación.
- Ejecuta el script que contiene la función
main()
, generalmente es el archivomain.py
. - Usa el siguiente comando en la terminal:
python main.py
- Se abrirán cuadros de diálogo para seleccionar:
- La carpeta que contiene los archivos
.bag
. - La carpeta donde deseas que se guarden los resultados.
- La carpeta que contiene los archivos
- El programa comenzará a procesar los archivos.
- Se mostrará información en la terminal o en el registro (
logging
) sobre el progreso.
- Una vez finalizado, encontrarás el archivo
deterioros.csv
en la carpeta de salida seleccionada. - También habrá imágenes y otros datos generados durante el procesamiento.