EstevezAlvarez
QGIS GeoAI Geoinformação Python

Classificação automática de imagens com GeoAI no QGIS

GeoAI traz modelos de deep learning diretamente para o QGIS. Este guia mostra como classificar uma imagem de satélite multiespectral em categorias de uso do solo, passo a passo, sem sair do SIG.

Imagem Sentinel-2 Landsat, drone Bandas RGB, NIR, SWIR, NDVI Modelo Random Forest CNN / SAM fine-tuned Mapa de classes Vegetação Água Urbano Análise área, mudança, exportar PostGIS
Fluxo de classificação: a imagem multiespectral alimenta um modelo treinado que gera um mapa de classes de uso do solo, pronto para análise quantitativa.

O que é GeoAI?

GeoAI é o campo que aplica técnicas de inteligência artificial — classificação, detecção de objetos e segmentação semântica — a dados geoespaciais: imagens de satélite, ortofotos, nuvens de pontos LiDAR ou camadas vetoriais. O objetivo é automatizar tarefas que antes exigiam interpretação manual, como mapear o uso do solo a partir de uma imagem Sentinel-2 ou detectar mudanças entre duas datas.

O plugin OpenGeoAI para QGIS (opengeoai.org/qgis_plugin) integra esses modelos diretamente no ambiente de trabalho, sem precisar abrir o Python ou um notebook externo.

Instalar o plugin

  1. Abra o QGIS e acesse Complementos → Gerenciar e instalar complementos.
  2. Na aba Todos, procure OpenGeoAI.
  3. Clique em Instalar complemento.
  4. Depois de instalado, ele aparece no menu Complementos → OpenGeoAI e na barra de ferramentas lateral.

O plugin requer QGIS 3.22+ e Python 3.9+. Instale as dependências Python pelo console do QGIS se o plugin solicitar:

# Consola Python de QGIS (Complementos → Consola de Python)
import subprocess, sys
subprocess.run([sys.executable, "-m", "pip", "install",
                "torch", "torchvision", "rasterio", "scikit-learn"])

Preparar a imagem

A qualidade da classificação depende diretamente da preparação. Antes de classificar:

Classificação supervisionada Requer: • Amostras de treinamento (ROIs) • Classes definidas pelo usuário • Validação com dados independentes Algoritmos comuns: Random Forest · SVM · CNN · SAM → Resultado: classes definidas previamente Classificação não supervisionada Requer: • Definir o número de clusters (k) • Interpretação posterior das classes • Conhecimento do território Algoritmos comuns: K-Means · ISODATA · K-Medoids → Resultado: grupos espectrais
A classificação supervisionada usa amostras rotuladas pelo usuário e gera classes predefinidas. A não supervisionada agrupa pixels por similaridade espectral, sem rótulos prévios.

Definir classes e amostras de treinamento

Para uma classificação supervisionada, você precisa criar Regiões de Interesse (ROIs): polígonos que representam exemplos conhecidos de cada classe. Quanto mais numerosas e variadas as amostras, melhor o modelo generaliza.

  1. Crie uma nova camada vetorial de polígonos (Camada → Criar camada → Nova camada GeoPackage) com um campo clase do tipo texto.
  2. Ative a edição e desenhe polígonos sobre áreas homogêneas: floresta densa, área urbana compacta, água e solo exposto.
  3. Atribua o rótulo da classe a cada polígono.
  4. Recomendação: no mínimo 20–50 polígonos por classe, distribuídos em diferentes áreas para capturar a variabilidade.

Executar a classificação

  1. Abra Complementos → OpenGeoAI → Image Classification.
  2. Selecione a imagem raster em Input raster.
  3. Selecione a camada de ROIs em Training samples e o campo de classe em Class field.
  4. Escolha o algoritmo (Random Forest é um bom ponto de partida: robusto e rápido).
  5. Configure o número de árvores (100–300) e a porcentagem de validação (20–30%).
  6. Defina o caminho de saída e clique em Run.

O plugin gera o mapa classificado como raster e apresenta métricas de precisão: Overall Accuracy, coeficiente Kappa e matriz de confusão por classe.

Interpretar os resultados

Uma Overall Accuracy acima de 85% é um resultado aceitável para uso do solo geral. A matriz de confusão é mais informativa: mostra onde o modelo confunde classes (por exemplo, arbustos classificados como floresta). Se a precisão de uma classe for baixa, você precisará de mais amostras de treinamento nessa categoria ou de uma melhor separação das ROIs.

Automatizar com PyQGIS

Se precisar processar várias imagens ou integrar a classificação em um pipeline, você pode chamar o algoritmo pelo console Python do QGIS:

from qgis.core import QgsApplication, QgsRasterLayer
import processing

# Cargar imagen
raster = QgsRasterLayer("/datos/imagen_sentinel.tif", "sentinel")

# Ejecutar clasificación supervisada con Random Forest
resultado = processing.run(
    "openGeoAI:randomForestClassification",
    {
        "INPUT_RASTER": "/datos/imagen_sentinel.tif",
        "TRAINING_SAMPLES": "/datos/rois_entrenamiento.gpkg",
        "CLASS_FIELD": "clase",
        "N_ESTIMATORS": 200,
        "TEST_SIZE": 0.25,
        "OUTPUT": "/resultados/clasificacion_uso_suelo.tif",
    }
)

print(f"Overall Accuracy: {resultado['OVERALL_ACCURACY']:.2%}")
print(f"Kappa: {resultado['KAPPA']:.3f}")

Exportar para PostGIS para análise territorial

# Convertir raster clasificado a polígonos vectoriales
processing.run("gdal:polygonize", {
    "INPUT":  "/resultados/clasificacion_uso_suelo.tif",
    "BAND":   1,
    "FIELD":  "clase_id",
    "OUTPUT": "/resultados/uso_suelo.gpkg",
})

# Cargar en PostGIS
processing.run("qgis:importintopostgis", {
    "INPUT":      "/resultados/uso_suelo.gpkg|layername=uso_suelo",
    "DATABASE":   "territorial_db",
    "SCHEMA":     "produccion",
    "TABLENAME":  "uso_suelo_clasificado",
    "OVERWRITE":  True,
    "CREATEINDEX": True,
})

Com os polígonos no PostGIS, é possível calcular áreas por classe, analisar mudanças temporais comparando duas datas, cruzar os resultados com camadas de infraestrutura ou exportar para formatos padrão para relatórios.