Pular para o conteúdo principal

API ReconstructFull

ReconstructFull é a interface de reconstrução completa mais simples e fácil de usar, adequada para início rápido de projetos e novos usuários. Ela gerencia automaticamente o fluxo completo de extração de metadados de imagem, cálculo de triangulação aérea e reconstrução 3D.

🎯 Características da Interface

  • Alto grau de automação: Lê automaticamente informações de GPS e câmera do EXIF das imagens
  • Configuração simples: O mínimo necessário é apenas fornecer o caminho das imagens
  • Tudo em um: Gera resultados finais diretamente das imagens
  • Otimização inteligente: Seleciona automaticamente os melhores parâmetros de processamento

📋 Detalhes dos Parâmetros

Parâmetros Obrigatórios

Nome do ParâmetroTipoDescriçãoValor de Exemplo
license_idintID da licença SDK9200
working_dirstringCaminho do diretório de trabalho"C:/Projects/MyProject"
gdal_folderstringDiretório de dados GDAL"C:/MipMap/SDK/data"
coordinate_systemobjectSistema de coordenadas de entradaVer descrição abaixo
image_meta_dataarrayLista de imagensVer descrição abaixo
input_image_typeintTipo de imagem1=RGB, 2=Multiespectral, 3=Infravermelho
resolution_levelintNível de precisão1=Alto, 2=Médio, 3=Baixo

Parâmetros Opcionais - Controle de Saída

Nome do ParâmetroTipoValor PadrãoDescrição
generate_objboolfalseGerar modelo formato OBJ
generate_plyboolfalseGerar modelo formato PLY
generate_osgbboolfalseGerar formato OSGB (fotografia oblíqua)
generate_3d_tilesboolfalseGerar 3D Tiles (Cesium)
generate_lasboolfalseGerar nuvem de pontos LAS
generate_pc_plyboolfalseGerar nuvem de pontos PLY
generate_pc_osgbboolfalseGerar nuvem de pontos OSGB (LOD)
generate_pc_pntsboolfalseGerar nuvem de pontos PNTS (3D Tiles)
generate_geotiffboolfalseGerar ortofoto
generate_tile_2DboolfalseGerar ladrilhos 2D
generate_2D_from_3D_modelboolfalseGerar ortofoto do modelo 3D

Parâmetros Opcionais - Sistema de Coordenadas

Nome do ParâmetroTipoValor PadrãoDescrição
coordinate_system_3dobjectLocal/LocalENUSistema de coordenadas 3D de saída
coordinate_system_2dobjectLocalENUSistema de coordenadas 2D de saída

Parâmetros Opcionais - Funções Avançadas

Nome do ParâmetroTipoValor PadrãoDescrição
gcp_pathstring-Caminho do arquivo de pontos de controle
gcp_coor_sysobject-Sistema de coordenadas dos pontos de controle
use_image_position_constraintbooltrueUsar restrição de posição da imagem
fast_modeboolfalseModo rápido (qualidade menor)
min_avali_memory_sizefloat16.0Tamanho mínimo de memória disponível (GB)
output_block_change_xmlboolfalseSaída Block Exchange XML

📝 Detalhes das Estruturas de Dados

Objeto coordinate_system

{
"type": 2, // 1=Projeção, 2=Geográfico, 3=Geocêntrico
"type_name": "Geographic",
"label": "WGS 84", // Nome do sistema de coordenadas
"epsg_code": 4326 // Código EPSG
}

Elementos do array image_meta_data

Formato básico (leitura automática de EXIF)

{
"id": 1, // Identificador único
"path": "C:/Images/DJI_0001.JPG", // Caminho da imagem
"group": "camera_1" // Opcional: agrupamento de câmera
}

Formato completo (metadados personalizados)

{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Nome do grupo da câmera
"meta_data": { // Metadados personalizados
"width": 6000, // Largura da imagem (pixels)
"height": 4000, // Altura da imagem (pixels)
"pos": [114.123456, 22.123456, 100.5], // [Longitude, Latitude, Elevação]
"pos_sigma": [0.05, 0.05, 0.10], // [Precisão X, Precisão Y, Precisão Z] (metros)
"focal_length": 24.0, // Distância focal (milímetros)
"pixel_size": 0.00391 // Tamanho do pixel (milímetros)
}
}

Parâmetro agrupamento de câmera (group)

Usado para sistemas multi-câmera, para processar imagens de diferentes câmeras em grupos:

"image_meta_data": [
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
{"id": 3, "path": "oblique_f/IMG_001.jpg", "group": "oblique_forward"},
{"id": 4, "path": "oblique_b/IMG_001.jpg", "group": "oblique_backward"},
{"id": 5, "path": "oblique_l/IMG_001.jpg", "group": "oblique_left"},
{"id": 6, "path": "oblique_r/IMG_001.jpg", "group": "oblique_right"}
]

Cenários comuns de agrupamento:

  • Câmera oblíqua de cinco lentes: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
  • Sistema de câmera dupla: wide_angle, telephoto
  • Cooperação multi-drone: drone_1, drone_2, drone_3
  • Multi-temporal: morning, afternoon

Explicação dos parâmetros pos e pos_sigma

Parâmetro pos:

  • Formato: [Longitude, Latitude, Elevação] ou [X, Y, Z] (depende do sistema de coordenadas)
  • Unidade: Graus e metros para sistema geográfico, metros para sistema de projeção
  • Propósito: Sobrescrever informações GPS no EXIF ou fornecer posição para imagens sem GPS

Parâmetro pos_sigma:

  • Formato: [σ_X, σ_Y, σ_Z]
  • Unidade: Metros
  • Significado: Desvio padrão da medição de posição em cada direção (1σ)
  • Propósito: Usado como peso na otimização de triangulação aérea, maior precisão (σ menor) significa maior peso

Valores típicos:

Método de Posicionamentoσ_X/σ_Yσ_ZDescrição
Solução fixa RTK0.02-0.05m0.05-0.10mMáxima precisão
Pós-processamento PPK0.03-0.08m0.08-0.15mAlta precisão
GPS normal2-5m3-8mPrecisão padrão
Estimativa manual0.5-2m1-3mBaixa precisão

📝 Exemplos de Configuração

Configuração Mínima

{
"license_id": 9200,
"working_dir": "C:/Projects/QuickStart",
"gdal_folder": "C:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 2,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
"image_meta_data": [
{"id": 1, "path": "C:/Images/DJI_0001.JPG"},
{"id": 2, "path": "C:/Images/DJI_0002.JPG"},
{"id": 3, "path": "C:/Images/DJI_0003.JPG"},
{"id": 4, "path": "C:/Images/DJI_0004.JPG"},
{"id": 5, "path": "C:/Images/DJI_0005.JPG"}
],
"generate_obj": true,
"generate_geotiff": true
}

Exemplo de Configuração de Grupos Multi-Câmera

{
"license_id": 9200,
"working_dir": "D:/Projects/MultiCamera",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Agrupamento de imagens multi-câmera
"image_meta_data": [
// Câmera nadir
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},

// Câmera oblíqua frontal
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},

// Mais grupos de câmeras...
],

"generate_osgb": true,
"generate_3d_tiles": true
}

Exemplo de Configuração POS Personalizada

{
"license_id": 9200,
"working_dir": "D:/Projects/PPK_Project",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Usar dados de posição de alta precisão pós-processados PPK
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Posição precisa após processamento PPK
"pos_sigma": [0.03, 0.03, 0.05] // Precisão PPK
}
},
{
"id": 2,
"path": "images/DJI_0002.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305512, 22.596089, 120.621],
"pos_sigma": [0.03, 0.03, 0.05]
}
}
// ... mais imagens
],

"generate_obj": true,
"generate_geotiff": true
}

Exemplo de Configuração Completa (com GCP)

{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,

// Sistema de coordenadas de entrada - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},

// Sistema de coordenadas de saída - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},

// Pontos de controle
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},

// Lista de imagens
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... mais imagens
],

// Gerar todos os formatos
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}

💾 Estrutura de Saída

Após a conclusão do processamento, a seguinte estrutura será gerada no diretório de trabalho:

working_dir/
├── products/ # Resultados finais
│ ├── models/ # Modelos 3D
│ │ ├── model.obj # Formato OBJ
│ │ ├── model.mtl # Arquivo de material
│ │ ├── textures/ # Imagens de textura
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Dados de nuvem de pontos
│ │ └── cloud.las # Nuvem de pontos formato LAS
│ └── orthophoto/ # Ortofoto
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Dados de ladrilhos
├── milestones/ # Resultados intermediários
│ ├── at_result/ # Resultado da triangulação aérea
│ ├── roi.json # Intervalo ROI
│ └── report.html # Relatório de processamento
└── log/ # Arquivos de log
└── log.txt # Log detalhado

🎯 Sugestões de Uso

Cenários Apropriados

  • ✅ Prototipagem rápida e testes
  • ✅ Projetos padrão de fotografia aérea
  • ✅ Processamento automatizado em lote
  • ✅ Aprendizado para iniciantes

Cenários Inapropriados

  • ❌ Necessidade de controle fino dos parâmetros de processamento
  • ❌ Necessidade de usar pontos de controle
  • ❌ Necessidade de verificar resultados intermediários
  • ❌ Câmeras especiais ou sensores

🔧 Técnicas Avançadas

1. Processamento em lote de múltiplos projetos

import json
import subprocess
from pathlib import Path

def batch_process(project_list):
for project in project_list:
# Criar configuração
config = {
"license_id": 9200,
"working_dir": f"./output/{project['name']}",
"gdal_folder": "./data",
"coordinate_system": {"type": 2, "epsg_code": 4326},
"image_meta_data": [
{"id": i+1, "path": str(img)}
for i, img in enumerate(project['images'])
],
"input_image_type": 1,
"resolution_level": 2,
"generate_obj": True,
"generate_geotiff": True
}

# Salvar configuração
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)

# Executar processamento
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])

2. Otimização automática de parâmetros

def optimize_parameters(image_count, available_memory_gb):
"""Selecionar parâmetros automaticamente com base no tamanho do projeto"""

# Nível de resolução
if image_count < 100:
resolution_level = 1 # Alta precisão
elif image_count < 500:
resolution_level = 2 # Precisão média
else:
resolution_level = 3 # Baixa precisão (projetos grandes)

# Formatos de saída
if available_memory_gb > 32:
formats = {
"generate_obj": True,
"generate_osgb": True,
"generate_3d_tiles": True,
"generate_las": True
}
else:
formats = {
"generate_obj": True,
"generate_las": False
}

return resolution_level, formats

3. Monitoramento de progresso

import re
import time
from threading import Thread

def monitor_progress(log_file):
"""Monitorar progresso do processamento"""

def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Ir para o final do arquivo
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\rProgresso: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)

thread = Thread(target=read_progress, daemon=True)
thread.start()

❓ Perguntas Frequentes

P: Por que algumas imagens não foram usadas?

R: ReconstructFull filtrará automaticamente imagens de baixa qualidade:

  • Imagens desfocadas
  • Imagens sem informações GPS
  • Imagens duplicadas ou com alta similaridade

Você pode consultar as imagens filtradas e suas razões no log.

P: Como processar imagens sem GPS?

R: Para imagens sem informações GPS, você precisa:

  1. Usar a interface ReconstructAT (suporta processamento sem GPS)
  2. Ou adicionar informações GPS manualmente ao EXIF
  3. Ou usar arquivo POS externo
P: Memória insuficiente ao processar projeto grande?

R: Soluções:

  1. Reduzir resolution_level para 2 ou 3
  2. Reduzir formatos de saída gerados simultaneamente
  3. Usar processamento em blocos (requer outras interfaces)
  • Detalhes dos sistemas de coordenadas
  • Descrição dos metadados de imagem
  • Comparação dos formatos de saída
  • Interface ReconstructAT (mais controle)

ReconstructFull é a melhor escolha para começar a usar o MipMapEngine SDK. Com o crescimento da experiência, você pode explorar outras interfaces para obter mais controle.