Reconocimiento Geoespacial de Cultivos sobre Ortofotos de Drones con Python y HatariTools - Tutorial

El análisis espacial y el aprendizaje automático a veces requieren una gran cantidad de programación para lograr resultados decentes, como identificar plantas a partir de una ortofoto tomada con dron. Queríamos crear un flujo de trabajo sencillo para usuarios principiantes e intermedios de Python, que les permitiera trabajar con estas bibliotecas sin demasiadas complicaciones ni frustraciones. Este tutorial contiene el procedimiento completo para usar un nuevo paquete de Python llamado hatariTools, que reconoce plantas a partir de una ortofoto basándose en puntos de muestra, genera gráficos intermedios e identifica las plantas como archivos shapefile de puntos.

Para mejorar la precisión de la detección de cultivos debes:

  • Tomar la ortofoto con la mínima cantidad de sombras, es decir, al mediodía.

  • Seleccionar plantas regulares y dejar suficiente espacio libre alrededor para definir bien su forma completa.

  • Evitar plantas que se crucen entre sí.

Puedes instalar la última versión de hatariTools con:

pip install -U hatariTools

Tutorial

Código

from hatariTools.geospatialIA.cropRecognition import cropCounting ## Org
import matplotlib.pyplot as plt ## Org
# Create crop object
crop = cropCounting() ## Org
Hatarilabs

build faster, analyze more

Follow us:

Hatarilabs Hatarilabs Hatarilabs Hatarilabs Hatarilabs Hatarilabs
/-------------------------------------------/

The crop recognition engine has been started

/-------------------------------------------/
# Define raster and sample plants
crop.defineRaster('../odm_orthophoto/agaveCropCoarseClip.tif') ## Org
/-------------------------------------------/

CRS of Raster Data: EPSG:4326
Number of Raster Bands: 3
Interpretation of Raster Bands: (<ColorInterp.red: 3>, <ColorInterp.green: 4>, <ColorInterp.blue: 5>)
Raster unit is unknown and resolution is 0.00 

/-------------------------------------------/
crop.definePoints('../shp/agavePoints_7p.shp') ## Org
CRS of Point Data:EPSG:4326
# get point coordinates
crop.pointCoords ## Org
[(-104.6026805707282, 21.488557889609346),
 (-104.60290182768277, 21.488567022907),
 (-104.60275177934567, 21.488441340921597),
 (-104.60272718507797, 21.488446712083505),
 (-104.60284817756734, 21.488475377126544),
 (-104.6029300358111, 21.488499605292862),
 (-104.60288397972741, 21.488506464709577),
 (-104.60267744841107, 21.4884550248774),
 (-104.60267523760433, 21.48846104318461),
 (-104.6026923713565, 21.488474000968505),
 (-104.60271024204422, 21.488489476615623),
 (-104.6026697105875, 21.4884743694363)]
#aprox cell diameter = 2.5m, get cell radius in meters
cellRad = int(0.00001/2//crop.rasterRes) ## Org
print(cellRad) ## Org
19
# ratio of analysis
crop.pointRatio = 35 ## Org
# raster band for the match template analysis
crop.selectedBand = 0.2125 * crop.redBand + 0.7154 * crop.greenBand \
                + 0.0721 * crop.blueBand ## Org
# sample row, col and array for each point
crop.getPointRowCol() ## Org
Point N°:0 corresponds to row, col: 368, 1116
Point N°:1 corresponds to row, col: 331, 231
Point N°:2 corresponds to row, col: 834, 832
Point N°:3 corresponds to row, col: 812, 930
Point N°:4 corresponds to row, col: 698, 446
Point N°:5 corresponds to row, col: 601, 119
Point N°:6 corresponds to row, col: 573, 303
Point N°:7 corresponds to row, col: 779, 1129
Point N°:8 corresponds to row, col: 755, 1138
Point N°:9 corresponds to row, col: 703, 1069
Point N°:10 corresponds to row, col: 641, 998
Point N°:11 corresponds to row, col: 702, 1160
# plant arrays
crop.plotReferenceImages() ## Org
# define object order and output raster path
#matchTemplate = crop.singleMatchTemplate(1,'../rst/matchTemplate.tif')
# plot match template
#plt.imshow(matchTemplate)
#plot histogram to check theshold values
crop.singleMatchHistogram(1, interval=[0.20,0.30]) ## Org
# define method (quantile or threshold) and value
crop.pointsMatchTemplate('threshold',0.25) ## Org
Processing image Nº 0
Processing image Nº 1
Processing image Nº 2
Processing image Nº 3
Processing image Nº 4
Processing image Nº 5
Processing image Nº 6
Processing image Nº 7
Processing image Nº 8
Processing image Nº 9
Processing image Nº 10
Processing image Nº 11
#working with all points => takes time
# plot all templates 
# crop.plotAllTemp/lates()

# save match template to a shapefile
#crop.saveMatchShp('../outShp/matchCrop.shp', limit=10000)
# Birch clustering
crop.birchFilter() ## Org
# plot birch points
crop.plotBirchPoints() ## Org
# save cluster points as shapefile
crop.saveBirchShp('../outShp/birchCrop.shp') ## Org

Datos de entrada

Puedes descargar los datos de entrada desde este enlace.

Posted on June 12, 2025 .

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Representación de vectores de dirección de flujo de un modelo de Model Muse / MODFLOW6 con mf6Voronoi - Tutorial

Este tutorial muestra el flujo de trabajo completo para determinar las direcciones de flujo a partir de un modelo MODFLOW realizado con Model Muse, utilizando la herramienta Mf6Voronoi FlowVectorGenerator, que representa los vectores de dirección de flujo en una figura de Matplotlib. La función no solo funciona con modelos Dis de Modflow6 normales, como los generados por Model Muse, sino también con modelos Disv de Modflow6 basados en Voronoi. Existe la posibilidad de insertar imágenes de fondo y otras funcionalidades; sin embargo, las opciones de estilo están limitadas para preservar el estilo artístico de la gráfica.

Posted on June 6, 2025 and filed under TutorialModflow, Popular, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Análisis Dinámico de Cobertura de Suelo para Evaluación del Cambio Climático con Python y Rasterio

Este es un análisis aplicado de la dinámica de la cobertura del suelo en algunas regiones de Turquía para la evaluación de la aridificación del suelo y el abandono de tierras debido al cambio climático en la última década. El caso cubre todos los pasos en Python con las bibliotecas geoespaciales relacionadas para procesar imágenes de Sentinel 2 en un área de estudio, considerando condiciones hidrológicas y la reducción de valores atípicos.

Posted on May 29, 2025 .

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Parametrización múltiple de simulaciones de Phreeqc con Python y hatariTools - Tutorial

Ejemplo aplicado de simulación en Phreeqc con múltiples valores de parámetros usando Python y su nueva biblioteca hatariTools. Este ejemplo explora la simulación y el análisis de calcita a partir de diferentes valores de PCO₂(g) en un Jupyter notebook, y crea una representación gráfica de la molalidad de la calcita vs PCO₂(g) utilizando Matplotlib.

Posted on May 29, 2025 and filed under TutorialPython, TutorialModflow, Tutorial.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Crear objetos 3D (VTKs) de un modelo de agua subterránea en Model Muse con mf6Voronoi - Tutorial

Model Muse es una herramienta excelente para la construcción de modelos de agua subterránea y la visualización de resultados, sin embargo, sus capacidades gráficas son bastante limitadas. Dado que siempre estamos en la búsqueda de acercar los modelos de agua subterránea a los interesados, al público general y a las nuevas generaciones, existe un interés especial en proporcionar herramientas complementarias al flujo de trabajo habitual con Model Muse y Modflow6.

Posted on May 26, 2025 .

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Simulación de ingresos a tajo abierto con MODFLOW 6 y mv6Voronoi - Tutorial

En este tutorial se presenta una metodología paso a paso para simular el ingreso de agua subterránea a un tajo abierto utilizando MODFLOW 6, el motor de modelado de flujo subterráneo desarrollado por el USGS, en combinación con mv6Voronoi, una herramienta que permite la generación de mallas Voronoi.

Posted on May 6, 2025 and filed under Tutorial, TutorialModflow.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Como instalar Rust en Windows bajo WSL - Tutorial

En este tutorial, te guiaremos paso a paso para instalar Rust dentro de tu entorno WSL. Ya sea que seas completamente nuevo en WSL o simplemente quieras una instalación limpia de Rust, esta guía te pondrá en marcha en muy poco tiempo. Cubriremos la instalación de WSL, la configuración de tu distribución de Linux (Ubuntu) y la instalación de Rust.

Posted on April 30, 2025 and filed under TutorialPython, Tutorial.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Paraview y mf6Voronoi para la visualización 3D de modelos en Modflow 6 - Tutorial

Porque una imagen vale más que mil palabras, y la visualización 3D es clave para explicar, compartir y analizar los parámetros, condiciones de borde y resultados de un modelo de aguas subterráneas. El paquete de Python mf6Voronoi ofrece herramientas estructuradas para generar archivos espaciales 3D en formato VTK, que permiten representar los parámetros del modelo, el nivel freático, la distribución de cargas y otros elementos que pueden ser visualizados en Paraview. Este es un caso aplicado de representación 3D para un modelo de flujo de aguas subterráneas en una cuenca andina, en el cual exploraremos las herramientas y opciones relevantes de mf6Voronoi y Paraview.

Posted on April 25, 2025 and filed under TutorialModflow, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Complemento de MODFLOW 6 Syntax para Visual Studio Code - Tutorial

Existe un complemento para Visual Studio Code que mejora la lectura de modelos en MODFLOW 6. El proceso de instalación es bastante sencillo y funciona con cualquier modelo sin necesidad de configuraciones o comandos adicionales. Este es un caso aplicado de la instalación del complemento y la exploración de un modelo en MODFLOW 6 para una cuenca andina.

Posted on April 24, 2025 and filed under Tutorial, TutorialHidrologia, TutorialModflow.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Acelera la creación de modelos MF6 Disv con plantillas de mf6Voronoi - Tutorial

Puedes trabajar más rápido y tener más tiempo para analizar los resultados del modelo si el proceso de creación del modelo toma menos tiempo. El diseño del paquete mf6Voronoi está orientado a mejorar la experiencia del usuario optimizando las opciones de creación de mallas y mediante la implementación de plantillas de scripts en Python para mallado, construcción de modelos y más.

Posted on March 21, 2025 and filed under TutorialModflow, Modelamiento, TutorialPython.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Modelamiento de flujo subterráneo regional con malla de Voronoi en MODFLOW6 DISV y Flopy - Tutorial

Este ejemplo desarrolla un modelo de aguas subterráneas en MODFLOW6 DISV que implementa una malla de Voronoi generada a partir del límite de la cuenca y la red fluvial con los paquetes mf6Voronoi, los cuales permiten una malla de alto rendimiento completamente acoplada con datos geoespaciales. En la malla de Voronoi, los niveles de refinamiento se definen mediante un tamaño mínimo de celda, un tamaño máximo de celda y un multiplicador. El caso aplicado cubre todos los pasos en la discretización del modelo, construcción, simulación y visualización 2D.

Posted on February 10, 2025 and filed under TutorialModflow, Modelamiento, Hidrogeología.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Presentamos mf6Voronoi: Un paquete de Python para generar mallas de Voronoi en MODFLOW6 DISV

El modelamiento de aguas subterráneas con varias condiciones de contorno y configuraciones hidrogeológicas complejas requiere herramientas avanzadas para la discretización de mallas. Estas deben garantizar un refinamiento adecuado en la zona de interés mientras se preserva un mínimo de celdas. El tipo de malla debe diseñarse de manera que conserve los recursos computacionales y represente adecuadamente el régimen de flujo de aguas subterráneas.

Posted on January 15, 2025 and filed under TutorialModflow, Modelamiento, Hidrogeología.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Generación de elevaciones topobatimétricas para modelamiento de inundaciones con Python geoespacial

Los mapas de elevación que representan la superficie y la batimetría de los ríos son una entrada esencial para el modelamiento de inundaciones en software como HEC-RAS. Incluso con las últimas versiones de software GIS de código abierto de alto perfil, como QGIS, la combinación de un mapa de elevación de la superficie y un mapa de elevación del fondo del río es un desafío que requiere muchos ajustes, conversiones y trabajo manual. Hemos desarrollado un script útil que trabaja con las elevaciones de la superficie y el fondo del río de manera "inteligente" y crea un ráster geoespacial con la elevación topobatimétrica utilizando bibliotecas de Python geoespacial como Shapely y Rasterio. El script también incluye algunos pasos clave para identificar el cuerpo del río y tratar los valores faltantes en el mapa de batimetría.

Posted on January 9, 2025 and filed under Hidroinformática, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Modelamiento de Unidades Hidrogeológicas a partir de Raster con Aquifer App y Gempy - Tutorial

La construcción de modelos de aguas subterráneas complejos y de alto rendimiento requiere una distribución adecuada de las unidades hidrogeológicas en profundidad. Hemos desarrollado un caso aplicado de modelado 3D de unidades hidrogeológicas utilizando datos proporcionados en formato raster (*.tiff).

El tutorial cubre todos los pasos, desde el muestreo de orientación y elevación a partir de datos raster, la conceptualización y configuración del modelo de Gempy en Aquifer App, y finalmente, el posprocesamiento de la litología 3D basada en la elevación superficial.

Los datos de entrada provienen de investigaciones del USGS sobre los sistemas acuíferos en las Cuencas de Williston y Powder River, en Estados Unidos y Canadá.

Posted on December 4, 2024 and filed under TutorialPython, Tutorial, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Modelamiento Geológico de Capas Sedimentarias desde Datos Geospaciales con Python y Aquifer App - Tutorial

Ejemplo práctico para la construcción de un modelo geológico con Python y Aquifer App realizado desde información geospacial en formato de ESRI Shapefiles y raster en formato Tiff. El tutorial muestra el procedimiento completo de procesamiento de datos espaciales usando librerias como Geopandas, Rasterio y Pyvista para la construcción de archivos de superficies y orientaciones que son ingresadas en Aquifer App. Por último, el proyecto en Gempy es corrido en modo local generando la geometría de la litología y contactos.

Posted on September 24, 2024 and filed under Tutorial, Modelamiento, Tecnologia Web.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Acoplamiento de datos geológicos locales en Model Muse con Python y Aquifer App - Tutorial

Hay muchos temas a tener en cuenta cuando creamos un modelo de flujo de agua subterránea. Uno de los más importantes es representar la información geológica disponible en la distribución de los parámetros hidráulicos. Hemos investigado un flujo de trabajo simple y reproducible para crear un modelo geológico a partir de un shapefile de puntos e insertar las unidades geológicas modeladas en Model Muse con los valores K correspondientes. Este tutorial cubre todo el procedimiento para crear un modelo geológico con Gempy y Aquifer App y los códigos necesarios para crear un archivo de forma xyz que luego se importa en Model Muse con el valor Kx extraído de la tabla de atributos.

Posted on August 28, 2024 and filed under TutorialPython, TutorialModflow, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Como crear un modelo geológico de un shapefile de puntos con Gemgis, Gempy y AquiferApp - Tutorial

Este es un caso aplicado en el que construimos un modelo geológico solo con información litológica almacenada como un archivo shapefile de puntos. El tutorial cubre todos los pasos desde la generación de ráster (como array de Numpy) para todas las superficies junto con el muestreo de orientación y el formateo de las superficies/orientaciones como archivos de entrada de Gempy. Los datos generados se insertaron en la aplicación Aquifer App que implementa una interfaz para crear modelos de Gempy. Finalmente, la litología y la geometría de la superficie de la capa se exportaron como Vtk para ser representadas en Paraview con los datos iniciales para evaluar la precisión de la simulación.

Posted on August 15, 2024 and filed under TutorialPython, Tecnologia Web, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Modelamiento geológico de sistemas petroleros con Gempy, Gemgis y Aquifer App - Tutorial

La aplicación Aquifer App ofrece una forma amigable, limpia y poderosa de crear scripts de Gempy para el modelamiento geológico. Hemos desarrollado un caso aplicado de un modelo de sistemas petroleros 3D para una parte de la Cuenca Williston, EE. UU., que contiene el Anticlinal de Nesson. La información de la capa superior se proporcionó en formato ráster donde la elevación y la orientación de puntos aleatorios se extrajeron con códigos Python utilizando el paquete Gemgis y se exportaron en formato de archivo de entrada Gempy. En la aplicación Aquifer App se insertaron los archivos CSV procesados ​​y se configuró el modelo geológico con la secuencia geológica correspondiente.

Posted on July 30, 2024 and filed under TutorialPython, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Exportar unidades geológicas 3D como formato Vtk con Gempy y Aquifer App - Tutorial

La aplicación Aquifer ofrece una forma amigable, limpia y poderosa de crear scripts Gempy para modelado geológico. La plataforma también permite a los usuarios ejecutar los scripts y descargar todo el proyecto de modelado que tiene la geometría 3D de las unidades geológicas y fallas en formato Vtk. Este tutorial muestra un caso aplicado de visualización de datos geológicos, creación de modelos, ejecución de modelos, exportación y representación de archivos Vtk en Paraview.

Posted on July 17, 2024 and filed under TutorialPython, Tutorial, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Modelamiento geológico regional con topografía de superficie con Gempy y Aquifer App - Tutorial

El acoplamiento de scripts Python con la plataforma Aquifer App nos permite generar modelos geológicos con una versatilidad nunca antes vista. Este es un ejemplo básico de modelado geológico regional en Aquifer App con topografía de superficie a partir de un modelo de elevación digital en formato TIF. El tutorial también realiza una representación 3D de los contactos y orientaciones de la geología de una capa en un cuaderno Jupyter para un mejor análisis de la secuencia geológica.

Posted on July 12, 2024 and filed under TutorialPython, Tutorial, Modelamiento.

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.