📊 Codefest Ad Astra 2023
- Clonar el repositorio en la carpeta de su preferencia
git clone https://github.com/JulianP911/EagleAndes.git
- Abrir el proyecto en el editor de preferencia (recomendado Visual Studio Code).
- Abrir la consola e ingresar el comando
pip3 install .
opip install .
(dependiendo del sistema operativo) para instalar las dependencias asociadas a los recursos empleados definidos en el archivo
- Instalar la libreria mediante pip y el repositorio de github
pip install git+https://github.com/JulianP911/EagleAndes.git
(Este proceso de instalación puede tarda entre 5 a 10 min)
- Una vez instalada la librerÃa junto con las dependencias necesarias crear un archivo py en la cual se importe la libreria y las funciones requeridas que se quiere aceder. A continuación, se muestra un ejemplo correspondientemente:
from EagleAndes import detect_objects_in_video
detect_objects_in_video('./video_path', './output_path')
- Esta función recibe como parámetros de entrada la ruta de el video a analizar y la ruta de la carpeta donde se va a almacenar el archivo .csv de salida y las imágenes segmentadas.
- Esta función analiza el video tomando un fotograma cada 5 segundos. Cada fotograma se ve como una imagen y se le envÃa a un modelo preentrenado para que segmenete algún tipo de vÃa, construcción, vehÃculo, etc. En caso de que se detecte algo en el fotograma, la información de lo detectado será almacenada en un archivo llamado results.csv, y los fotogramas segmentados y clasificados se almacenaran en una carpeta de nombre IMG.
- Se puede ver un ejemplo de como utilizar la librerÃa en el archivo test_video.py.
- En primer lugar, de los videos que poseÃamos, se obtuvieron los fotogramas cada 1 segundo. De estos fotogramas se hizo una definición de cuadros delimitadores para la detección de objetos de interés (construcción, vÃa, vehÃculo, otros). Al rededor de 1.200 imágenes y 2500 objetos detectados fueron definidos. De esta manera pudimos asegurar una cantidad suficiente de datos para generar un modelo robusto que cumpla con los requerimientos del reto.
- Las imágenes fueron utilizadas como insumo para entrenar al modelo de detección de objetos YOLOv8. Inicialmente se cargó un modelo preentrenado y se realizó un reentrenamiento del modelo para acoplarlo a la detección de objetos de interés. Se realizaron 150 iteraciones durante el entrenamiento y el modelo resultante fue probado con 153 imágenes de validación. Las métricas resultantes indican que el modelo tiene una alta precisión al detectar y localizar los objetos de interés en la imagen.
- Para el análisis de coordenadas en las imágenes, se utilizó el modelo preentrenado de texto EasyOCR que permitÃa obtener de manera precisa y sencilla el texto que contenÃan los fotogramas. Cabe resaltar que para lograr un mejor reconocimiento de las coordenadas se hizo un preprocesamiento de las imágenes que permitió resaltar las carácteristicas de los textos presentes en ellas.
- Por último, tanto el modelo como el analizador de textos en imágenes fueron unificados en la librerÃa para resolver el reto 1.
Class | Images | Instances | Box(P) |
---|---|---|---|
all | 153 | 496 | 0.952 |
VEHICULO | 153 | 59 | 0.959 |
CONSTRUCCION | 153 | 250 | 0.981 |
VIA | 153 | 3 | 0.904 |
OTROS | 153 | 184 | 0.963 |
- Una vez instalada la liberÃa junto con las dependencias necesarias crear un archivo py en la cual se importe la libreria y las funciones requeridas que se quiere aceder. A continuación, se muestra un ejemplo correspondientemente:
from EagleAndes import ner_from_str
ner_from_str('Texto ejemplo', './output.json')
- Como se especificaba en la guÃa se desarrollaron tres metodos los cuales retornan json con el clasificación. del texto en base a las etiquetas y la identificación de entidades de nombre.
- def ner_from_str(text, output_path)
- def ner_from_file(text_path, output_path)
- def ner_from_url(url, output_path)
- En primer lugar empezamos por el problema de predición de categoria del textos en cuatro categorÃas: MINERIA, CONTAMINACION, DEFORESTACION, NINGUNA para esto empezamos por un proceso de limpieza de datos, re-clasificación de textos que tenÃan etiquetas distintas a las que estaban establecidas para la solución en base del contexto para mejorar la precisión de predición a la hora de entrenar el modelo, que en este caso nos centramos en un RandomForestClassifier que fue el que mejor nos proporcionó resultados por medio de búsqueda de hiperparámetros con un accuracy con los datos de entrenamiento del 99% y un accuracy con los datos de test de un 84%.
- Un punto intermedio entre el etiquetado de datos y el modelado de un RandomForest fue el preprocesamiento , en el cuál se realizó todo los tipos de procesos necesarios de limpieza para un modelo lo más óptimo posible cuando se trata de texto. Se realizaron procesos de convertir todos los carácteres a minÃsculas, convertir a lenguaje natural los números que aparecen en el texto, eliminar la puntuación de las palabras, eliminar los carácteres ASCII, eliminar palabras que no son relevantes en el contexto del problema como por ejemplo artÃculos personales, se aplicó un proceso de lematización de las palabras y finalmente se listaron las palabras de manera tokenizada. Todo lo anterior para poder tener un modelo de RandomForest de la mejor manera construida.
- En tercer lugar, continuamos con el procesamiento de lenguage aplicando NER (Identificación de entidades con nombre) para esto utilizamos la libreria de SpaCy con el modelo de es_core_news_md que tiene un f1 89.54 lo cual indica un buen porcentaje de prección en base al recall y accuracy. Teniendo en cuenta el modelo base, definimos dos nuevas reglas con el fin de cumplir el objetivo de detiección de entidades de tipo fecha y miselanio:
- Identificación de fechas: Con el fin de cumplir el objetivo se definió una nueva regla basada en una expresión regular que identifique la mayor cantidad de fechas en formatos variados que son utilizados en los textos.
- Identificación de palabras claves en base al contexto: Con el fin de cumplir el objetivo se definió un diccionario con diferentes palabras claves en base al contexto "Amenazas y peligros de la Amazonia".
- Por último, tanto el modelo de clasificación de impacto como el modelo NER fueron unificados en la librerÃa para resolver el reto 2.