Inspiración

Vivimos actualmente en un mundo donde cada día encontramos días más calurosos, un mundo donde las concentraciones de dióxido de carbono aumentan significativamente cada día debido a la excesiva tala de árboles y la poca concienciación y educación ambiental que tiene nuestra sociedad actualmente.
Por esto mismo, vimos una oportunidad para poder unir el uso de tecnologías revolucionarias como lo es la inteligencia artificial junto con un conjunto de herramientas de bases de datos para facilitarle a cualquier persona el poder plantar su propio árbol. Sin embargo, no cualquiera es capaz de llevar a cabo esa tarea. El simple hecho de decidir qué árbol plantar en base al clima de tu localidad, la calidad del piso, la cantidad de sol o los precios de infraestructura ya lo vuelve una tarea colosal, eso sin hablar de los cuidados y mantenimientos que tienen que llevarse a cabo.
De ahí nace la idea de Evergreen, una herramienta que con uso de inteligencia artificial puede hacer varias recomendaciones en cuanto a que árbol plantar y como cuidarlo dependiendo del terreno que tienes a tu alcance, tus recursos y la localidad en la que vives. De esta manera, podemos democratizar la educación ambiental y lograr que cualquier persona con la suficiente emoción y determinación pueda plantar sus propios árboles de forma informada e inteligente.

¿Qué hace?

-Reconocimiento y distanciamiento entre árboles a partir de imágenes con el uso de inteligencia artificial.
-Análisis de tierra para poder medir la cantidad de tierra útil que hay en el terreno y hacer recomendaciones a partir de eso.
-Algoritmo de proximidad geográfica para identificar a qué bioma y clima de la república pertenece el usuario.
-Dataframes en pandas para la recolección de datos acerca de los distintos árboles así como sus datos generales y la popularidad de cada uno.
-Algoritmos lógicos para calcular el costo de plantación y de mano de obra a partir de información recabada del estado, y de los datos proporcionados por el usuario.
-Recolección de datos previamente analizados para presentarse de forma concisa y amistosa para el usuario.

¿Cómo lo hicimos?

-El reconocimiento de los árboles fue llevado a cabo con un modelo de uso libre de la librería Roboflow. Dicho modelo fue interpretado utilizando Inference, una librería de análisis de imágenes con IA de la misma Roboflow. El distanciamiento entre los árboles se modeló con algoritmos matemáticos como el uso de elipses cuyos radios dependen de una regresión cuadrática para compensar la deformación de la imagen donde los elementos lejanos se ven más chicos que los cercanos. El sistema de recomendación para el plantado de nuevos árboles se llevó a cabo con la librería Sympy, la cuál analiza en pares ordenados las distintas elipses de los árboles detectados y los compara para ver si se tocan en algún momento y en dónde utilizando un sistema de ecuaciones cuadráticas.
-Adicionalmente, el algoritmo de visión es capaz de determinar si la recomendación de plantado se encuentra en un parche de tierra o pasto. Esto lo logra con una máscara de color junto con filtros de dilatación y erosión que ignoran cualquier píxel que no sea tierra o pasto. Junto a esto, se contempla el tamaño de las masas para diferenciarlo del ruido.
-El algoritmo de ubicación geográfica utiliza la librería geopy, la cuál puede determinar las coordenadas exactas de la dirección ingresada. Una vez se conocen las coordenadas, se calcula la distancia que hay hacia los distintas regiones/biomas del país y regresa la distancia al bioma más cercano. Esta información se utiliza posteriormente para la recomendación de árboles basada en el clima y suelo de la región ingresada. En paralelo a esto, se corre un algoritmo capaz de detectar el Estado de la República en la dirección, el cual de igual forma se utilizará para calcular costes de mano de obra local.
-Para toda la recolección de datos se utilizan DataFrames de Pandas, las cuales se basan en bases de datos ya existentes acerca de avistamientos de árboles alrededor de toda la República Mexicana. Esta información luego se categoriza en función de Estado y de región/bioma, lo cual sirve para poder ofrecerle al usuario las recomendaciones de los cinco árboles más avistados en dicha región.
-Los cinco árboles recomendados van acompañados de otras cinco fotos para referencia del usuario al mismo tiempo que le da links a páginas de cuidados, datos generales y recomendaciones del árbol en específico que le haya gustado a partir de las fotografías. Estos son importados directamente del compendio de imágenes de google. Para poder obtener dicha información se utiliza request en conjunto a la API de JSON Custom Share de Google.
-Finalmente, el cálculo de costos de plantación y mantenimiento se calcula utilizando distintas reglas comparativas y pesajes basados en la ubicación geográfica del usuario, al mismo tiempo que se importa el precio común de los árboles cuando son retoños.

Retos que nos encontramos

-Muchas de las librerías que se utilizan para la visión del programa son extremadamente pesadas, lo cual al inicio ocasionó un atraso debido a su instalación y en otros momentos generaban bajos rendimientos en algunos de los equipos de desarrollo que estábamos utilizando. Sin embargo, logramos aprovechar de forma eficiente los recursos haciendo que las máquinas de desarrollo más potentes fueran las que trabajaran en las tareas de visión, mientras que los otros podían enfocar sus esfuerzos en otras tareas de forma inteligente.
-Acompañando este inconveniente, el uso de sympy al inicio resultaba increíblemente tardado debido a que tenía que realizar nCr(n, 2) comparaciones de ecuaciones cuadráticas bastante pesadas, llegando a tardar varios minutos para compilar un programa. Esto se solucionó al incorporar una condicional que cuestionara si la distancia entre los centros de las elipses estaban al rango de sus radios, de otra forma era imposible que se tocaran y no tendría sentido analizarlo con Sympy.
-El último y mayor reto fue los tokens que teníamos a nuestra dispocisión para el uso de las APIs de Google. Estas constantemente se acababan debido a que cada prueba mínimo necesitaba utilizar 5 tokens y solo disponíamos de 100 cada dia. Esto se sobrellevó haciendo varias cuentas y rotando las distintas llaves para sobrellevar el limitante, no obstante atrasó bastante las tareas del equipo.

Logros de los que estamos orgullosos

-Uno de los algoritmos más complicados de hacer funcionar fue el de visión, ya que era el que menos recursos y documentación tenía al respecto, por esto mismo, problemas como el encontrar las intersecciones entre las elipses se tuvieron que resolver desde cero, proponiendo soluciones creativas y totalmente nuevas a problemas auténticos de un proyecto formal. El hecho de que todas las implementaciones que nos propusimos al respecto lograron ser integradas de forma eficiente es un gran orgullo para el equipo.
-Otro gran logro fue la integración que tuvimos al unir las distintas tareas de cada integrante del equipo. El haber trabajado cada fragmento del proyecto en clases hizo que el integrarlo todo fuera extremadamente rápido gracias al uso de objetos. Al mismo tiempo, nuestro uso de plataformas como GitHub demostró ser eficiente y útil.
-Todos los integrantes del equipo en algún momento tuvieron que sumergirse de lleno en alguna herramienta que nunca habían experimentado, por esto mismo, tuvimos que aprender de forma eficiente y eficaz nuevos conocimientos, logrando implementar soluciones que previamente nunca habíamos imaginado. Estamos orgullosos de haber aprendido tanto en un tiempo tan corto.

¿Qué aprendimos?

Aprendimos a utilizar muchas librerías que anteriormente no habíamos utilizado. Ejemplos de esto es el uso de APIs como medio de consulta para imágenes o información, así como la implementación de bases de datos con Pandas casi desde cero con menos de una semana para poder preparar estas infraestructuras.
Junto a esto, este proyecto nos demostró la gran sinergia que tenemos cada uno de nosotros con nuestros compañeros, logrando una comunicación eficiente, respetuosa y ante todo, de mucha admiración de los unos por los otros. Esta experiencia fue la primera para todos nosotros, y definitivamente nos vamos con muchas enseñanzas no solo del trabajo técnico sino también de nuestras habilidades sociales como líderes.

El futuro de Evergreen

Evergreen aún tiene muchos ámbitos en los cuales crecer.
-Queremos poder implementar un algoritmo de creación espontánea para las recomendaciones de árboles. Actualmente, el programa solo puede recomendar árboles en los puntos donde las elipses que delimitan la zona de plantación se intersectan, sin embargo, nada pasa cuando un árbol está solo y tiene mucho terreno a su alrededor. Este algoritmo consistiría de plantear varios puntos hipotéticos en la superficie de la elipse y simular como las intersecciones y otras generaciones espontáneas interactuarían entre ellas y así calcular de forma práctica el número máximo de árboles que se puede plantar de forma que no se hagan daño los unos a los otros.
-En paralelo a esto, el modelo que obtuvimos de acceso libre no estaba tan bien entrenado y por lo general pasada por alto varios árboles a la hora de analizar las fotografías, sin embargo, se nos imposibilitaba entrenar un modelo desde cero por la cantidad de tiempo que tardaríamos en recolectar el dataset y entrenar el modelo hasta obtener un índice de accuracy lo suficientemente grande. Por esto mismo, creemos que con el suficiente tiempo puede ser una gran oportunidad para el proyecto.
-Actualmente, solo las fotografías tomadas por “arriba” de los árboles sirven de forma óptima, por lo que tomar la foto de frente a los árboles regresa datos extraños que se vuelven difíciles de interpretar. Por esto mismo, una futura versión de Evergreen podría funcionar para cualquier ángulo desde donde se tome la fotografía.
-En la propuesta inicial, el equipo quería incluir datos acerca de los árboles como lo fuera el tiempo que se toman en crecer y a partir de eso hacer simulaciones como “así se verá tu árbol cuando tengas x años” o también poder hacer una simulación a partir del árbol seleccionado y las intersecciones de la fotografía para poder presentarle una fotografía al usuario de “así se vería tu jardín si plantas estos árboles en estos lugares”. Sin embargo, muchas de estas implementaciones ocupan el uso de LLMs de paga como lo es ChatGPT 4o, recurso el cual no podía obtener actualmente el equipo, sin embargo, con suficiente inversión estas ideas podrían volverse realistas y realizables.
-Finalmente, el proyecto actualmente está construido totalmente en Python, un programa que destaca por su velocidad de desarrollo pero no por su velocidad de ejecución, por lo cual nuestra aplicación es lenta y los elementos visuales de la misma son relativamente básicos. Por esto mismo, buscaríamos el poder migrar la aplicación a otros idiomas y ambientes como lo son C++, HTML, y CSS.

Built With

Share this project:

Updates