Sentinel-2 Inteligencia Artificial Tala ilegal GeoTIFF
1. ¿Qué es SEN2SR y para qué sirve?
SEN2SR es una herramienta de super-resolución que utiliza inteligencia artificial (modelo SEN2SRLite de ESA OpenSR) para transformar imágenes del satélite Sentinel-2 de 10 m a 2.5 m por píxel. El resultado: imágenes con un detalle visual equivalente a una resolución 4 veces mayor, sin necesidad de comprar imágenes comerciales.
Es ideal para detectar y delinear detalle fino en zonas puntuales de hasta ~5 km:
- 🌳 Claros de tala (cortas recientes en bosque)
- 🛻 Vías de saca (trochas de extracción de madera)
- 🍃 Aperturas de dosel y perturbaciones incipientes
- Sirve para detección y delineado visual, NO para medir áreas ni inventarios cuantitativos. Los 2.5 m son estimados por IA, no medidos.
- Solo para áreas de ≤ 512 px (~5 km). Para concesiones enteras usa GEE/MegaTool a 10 m.
- La app corre en tu PC (modo local; solo necesita internet para descargar las imágenes de Copernicus).
2. Requisitos
| Elemento | Detalle |
|---|---|
| Python | 3.11+ con torch (CPU), cubo, sen2sr, mlstac, rasterio, streamlit, pyproj, pillow (ver requirements.txt) |
| Credenciales | Cuenta gratuita de Copernicus Data Space para descargar imágenes |
| Paquete | La app empaquetada (INICIAR_SEN2SR.bat, app_sen2sr.py, sen2sr_core.py, sen2sr_loreto.py, carpeta resultados/) |
3. Instalación (solo la primera vez)
En una PC nueva, desde CMD/PowerShell:
python -m pip install --upgrade pip python -m pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu python -m pip install "git+https://github.com/ESDS-Leipzig/cubo.git" sen2sr mlstac rasterio rioxarray xarray matplotlib numpy pandas streamlit pyproj pillow
rasterio falla buscando GDAL, usa los wheels de https://github.com/cgohlke/geospatial-wheels.4. Cómo ejecutar la aplicación
Opción A — doble clic (recomendada):
- Abre el Explorador de archivos en la carpeta del paquete y haz doble clic en
INICIAR_SEN2SR.bat. - Se abre una ventana negra que dice "Abriendo en http://localhost:8501".
- Abre tu navegador en http://localhost:8501 (o la URL que indique si el puerto está ocupado).
Opción B — línea de comandos:
cd ruta\a\SEN2SR_Loreto_Paquete streamlit run app_sen2sr.py --server.headless true --browser.gatherUsageStats false
Para detener: cierra la ventana negra o pulsa Ctrl+C.
5. Guía paso a paso
5.1 Credenciales de Copernicus
En la barra lateral (izquierda) escribe tu usuario y password de Copernicus Data Space. Marca "Guardar en este equipo" para no volver a escribirlos: quedan en un archivo .creds.json local (texto plano, no se sube a internet). Usa "🗑️ Olvidar credenciales" para borrarlo.
.creds.json queda en texto plano en tu disco. No lo compartas ni lo subas a repositorios.5.2 Las 4 pestañas para definir qué y dónde procesar
| Pestaña | Cuándo usarla | Qué hace |
|---|---|---|
| 🗓️ Por fecha | Lo normal | Busca todas las escenas en el rango de fechas y % de nubes. |
| 🆔 Por escena | Quieres una fecha exacta | Pegas el ID de una escena (p. ej. de GEE/MegaTool) y fuerza esa fecha. |
| 📂 Por área (GeoJSON) | Tienes polígonos de ArcGIS Pro | Importa un .geojson y calcula el parche + buffer anti-sierra. |
| 📍 Por coordenadas | Un punto concreto | Lat/Lon (WGS84) o UTM 18S (Easting/Northing). |
- Por fecha: elige Fecha inicio y Fecha fin. El rango por defecto es el último año completo.
- Por escena: pega un ID como
20250119T151921_20250119T151917_T18MXV. La app lee la fecha (primeros 8 dígitos) y fuerza la descarga de ESA de esa escena exacta (ventana ±1 día). Déjalo vacío para usar el rango de fechas. - Por área (GeoJSON): en ArcGIS Pro exporta tus polígonos como GeoJSON (Capa → Datos → Exportar → GeoJSON), súbelo con Browse/Examinar, define el Buffer exterior (metros, por defecto 50) para evitar bordes tipo "sierra" y pulsa "📥 Importar áreas". La app calcula el tamaño de parche óptimo según el tamaño de tus polígonos.
- Por coordenadas: elige el formato (Lat/Lon WGS84 o UTM 18S Easting/Northing), pon un nombre y pulsa "Agregar punto". Queda guardado y autoseleccionado en la lista de zonas.
💡 Consejo: usa el Visor GEE de Sentinel-2 (gratuito) para explorar escenas de Loreto — fecha, % de nubes, granulo MGRS e ID — y copia el ID directo a la pestaña Por escena.
5.3 Configuración de procesado
- Máx % de nubes (SCL 8/9/10): solo se procesan escenas con nubes ≤ ese valor (por defecto 20%).
- Tamaño de parche (px a 10 m): 128 = 1.28 km · 256 = 2.56 km · 512 = 5.12 km. El modelo siempre entrega 2.5 m; el área se tesela internamente a 128 px.
- "☀️ Solo la mejor escena (menos nubes)": marcado por defecto → 1 imagen por zona (la de menos nubes). Desmárcalo para procesar TODAS las escenas que cumplan el umbral.
- Carpeta de salida: por defecto
resultados.
5.4 Seleccionar y procesar
- En "Zonas a procesar" marca las que quieras (las de Loreto, tus puntos agregados y los GeoJSON importados).
- Pulsa "🚀 Procesar" (botón verde).
- Observa la barra de progreso y el log en vivo (cada escena muestra fecha, % nubes y archivo generado).
- Al terminar aparece la tabla de resultados y los botones de descarga.
6. Entendiendo los resultados
Por cada escena se generan dos archivos en la carpeta de salida:
- 🗺️ GeoTIFF: 10 bandas (B02, B03, B04, B05, B06, B07, B08, B8A, B11, B12) a 2.5 m de resolución.
- 🖼️ PNG: imagen de comparación (antes/después) para revisión rápida.
| Parche (px @10 m) | Km de lado | Salida SR (px @2.5 m) |
|---|---|---|
| 128 | 1.28 km | 512 × 512 |
| 256 | 2.56 km | 1024 × 1024 |
| 512 | 5.12 km | 2048 × 2048 |
El nombre de archivo lleva un contador (ej. centro arenal_2026-08-12_01.tif) para que dos escenas del mismo día no se sobrescriban.
6.1 Cómo abrir el GeoTIFF en QGIS / ArcGIS Pro
- Arrastra el
.tifdirecto al lienzo, o usa "Añadir capa ráster". - El CRS de salida es EPSG:4326 (WGS84). Para trabajar en UTM 18S (Loreto), reproyecta la capa a EPSG:32718.
- Las bandas están en orden canónico; compón RGB con B04 (rojo), B03 (verde), B02 (azul).
7. Solución de problemas
| Síntoma | Causa probable | Solución |
|---|---|---|
| "Falta usuario/password de Copernicus" | Campos de credenciales vacíos | Escribe usuario y password en la barra lateral. |
| "Ninguna escena cumple el umbral de nubes" | Todas las imágenes del rango tienen más nubes que el slider | Sube el % de nubes o amplía el rango de fechas. |
| Error de tensor / dimensiones | Se ejecutó una versión vieja de la app | Cierra la ventana de Streamlit y relanza con el .bat. |
| "StreamlitDuplicateElementId" | Dos escenas el mismo día sin nombre único (bug ya corregido) | Usa la versión actualizada; los nombres llevan contador y claves únicas. |
| La app no recarga mis cambios | Streamlit sirve el código de cuando arrancó | Cierra y relanza (Ctrl+C y doble clic en .bat). |
| Parche DEMASIADO GRANDE | Zona/GeoJSON > 512 px | Reduce el buffer o recorta el polígono a ≤ 5 km. |
8. Referencia técnica (para soporte)
- Modelo: SEN2SRLite (ESA OpenSR) vía
mlstac.load('model/SEN2SRLite').compiled_model(device). - Entrada fija 128×128 px (10 m) → salida 512×512 px (2.5 m). AOIs mayores se teselan (
sr_tiled). - Orden canónico de bandas: B02, B03, B04, B05, B06, B07, B08, B8A, B11, B12.
- Filtro de nubes por banda SCL: valores 8, 9 y 10 = nubes.
- GeoTIFF con el bbox real del cubo, CRS EPSG:4326.
- Empaquetado Docker disponible para replicar en otras PCs sin reinstalar.
¿Quieres el paquete SEN2SR listo para tu PC?
Te lo dejamos instalado y configurado, con capacitación incluida.