API ReconstructFull
ReconstructFull è l'interfaccia di ricostruzione completa più semplice e facile da usare, adatta per l'avvio rapido di progetti e nuovi utenti. Gestisce automaticamente il flusso completo di estrazione metadati immagine, calcolo triangolazione aerea e ricostruzione 3D.
🎯 Caratteristiche dell'Interfaccia
- ✅ Alto grado di automazione: Legge automaticamente informazioni GPS e camera dall'EXIF delle immagini
- ✅ Configurazione semplice: Il minimo richiesto è solo fornire il percorso delle immagini
- ✅ Tutto in uno: Genera risultati finali direttamente dalle immagini
- ✅ Ottimizzazione intelligente: Seleziona automaticamente i migliori parametri di elaborazione
📋 Dettagli Parametri
Parametri Richiesti
Nome Parametro | Tipo | Descrizione | Valore Esempio |
---|---|---|---|
license_id | int | ID licenza SDK | 9200 |
working_dir | string | Percorso directory di lavoro | "C:/Projects/MyProject" |
gdal_folder | string | Directory dati GDAL | "C:/MipMap/SDK/data" |
coordinate_system | object | Sistema coordinate input | Vedi descrizione sotto |
image_meta_data | array | Lista immagini | Vedi descrizione sotto |
input_image_type | int | Tipo immagine | 1 =RGB, 2 =Multispettrale, 3 =Infrarosso |
resolution_level | int | Livello precisione | 1 =Alto, 2 =Medio, 3 =Basso |
Parametri Opzionali - Controllo Output
Nome Parametro | Tipo | Valore Predefinito | Descrizione |
---|---|---|---|
generate_obj | bool | false | Genera modello formato OBJ |
generate_ply | bool | false | Genera modello formato PLY |
generate_osgb | bool | false | Genera formato OSGB (fotografia obliqua) |
generate_3d_tiles | bool | false | Genera 3D Tiles (Cesium) |
generate_las | bool | false | Genera nuvola punti LAS |
generate_pc_ply | bool | false | Genera nuvola punti PLY |
generate_pc_osgb | bool | false | Genera nuvola punti OSGB (LOD) |
generate_pc_pnts | bool | false | Genera nuvola punti PNTS (3D Tiles) |
generate_geotiff | bool | false | Genera ortofoto |
generate_tile_2D | bool | false | Genera tessere 2D |
generate_2D_from_3D_model | bool | false | Genera ortofoto da modello 3D |
Parametri Opzionali - Sistema Coordinate
Nome Parametro | Tipo | Valore Predefinito | Descrizione |
---|---|---|---|
coordinate_system_3d | object | Local/LocalENU | Sistema coordinate 3D output |
coordinate_system_2d | object | LocalENU | Sistema coordinate 2D output |
Parametri Opzionali - Funzioni Avanzate
Nome Parametro | Tipo | Valore Predefinito | Descrizione |
---|---|---|---|
gcp_path | string | - | Percorso file punti controllo |
gcp_coor_sys | object | - | Sistema coordinate punti controllo |
use_image_position_constraint | bool | true | Usa vincolo posizione immagine |
fast_mode | bool | false | Modalità veloce (qualità inferiore) |
min_avali_memory_size | float | 16.0 | Dimensione minima memoria disponibile (GB) |
output_block_change_xml | bool | false | Output Block Exchange XML |
📝 Dettagli Strutture Dati
Oggetto coordinate_system
{
"type": 2, // 1=Proiezione, 2=Geografico, 3=Geocentrico
"type_name": "Geographic",
"label": "WGS 84", // Nome sistema coordinate
"epsg_code": 4326 // Codice EPSG
}
Elementi array image_meta_data
Formato base (lettura automatica EXIF)
{
"id": 1, // Identificatore unico
"path": "C:/Images/DJI_0001.JPG", // Percorso immagine
"group": "camera_1" // Opzionale: raggruppamento camera
}
Formato completo (metadati personalizzati)
{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Nome gruppo camera
"meta_data": { // Metadati personalizzati
"width": 6000, // Larghezza immagine (pixel)
"height": 4000, // Altezza immagine (pixel)
"pos": [114.123456, 22.123456, 100.5], // [Longitudine, Latitudine, Elevazione]
"pos_sigma": [0.05, 0.05, 0.10], // [Precisione X, Precisione Y, Precisione Z] (metri)
"focal_length": 24.0, // Lunghezza focale (millimetri)
"pixel_size": 0.00391 // Dimensione pixel (millimetri)
}
}
Parametro raggruppamento camera (group)
Usato per sistemi multi-camera, per elaborare immagini di diverse camere in gruppi:
"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"}
]
Scenari di raggruppamento comuni:
- Camera obliqua a cinque obiettivi: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
- Sistema camera doppia: wide_angle, telephoto
- Cooperazione multi-drone: drone_1, drone_2, drone_3
- Multi-temporale: morning, afternoon
Spiegazione parametri pos e pos_sigma
Parametro pos:
- Formato:
[Longitudine, Latitudine, Elevazione]
o[X, Y, Z]
(dipende dal sistema coordinate) - Unità: Gradi e metri per sistema geografico, metri per sistema proiezione
- Scopo: Sovrascrivere informazioni GPS in EXIF o fornire posizione per immagini senza GPS
Parametro pos_sigma:
- Formato:
[σ_X, σ_Y, σ_Z]
- Unità: Metri
- Significato: Deviazione standard misurazione posizione in ogni direzione (1σ)
- Scopo: Usato come peso nell'ottimizzazione triangolazione aerea, maggiore precisione (σ più piccolo) significa maggiore peso
Valori tipici:
Metodo Posizionamento | σ_X/σ_Y | σ_Z | Descrizione |
---|---|---|---|
Soluzione fissa RTK | 0.02-0.05m | 0.05-0.10m | Massima precisione |
Post-elaborazione PPK | 0.03-0.08m | 0.08-0.15m | Alta precisione |
GPS normale | 2-5m | 3-8m | Precisione standard |
Stima manuale | 0.5-2m | 1-3m | Bassa precisione |
📝 Esempi Configurazione
Configurazione Minima
{
"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
}
Esempio Configurazione Gruppi Multi-Camera
{
"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
},
// Raggruppamento immagini multi-camera
"image_meta_data": [
// Camera nadir
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
// Camera obliqua anteriore
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},
// Altri gruppi camera...
],
"generate_osgb": true,
"generate_3d_tiles": true
}
Esempio Configurazione POS Personalizzata
{
"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
},
// Usa dati posizione alta precisione post-elaborati PPK
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Posizione precisa dopo elaborazione PPK
"pos_sigma": [0.03, 0.03, 0.05] // Precisione 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]
}
}
// ... altre immagini
],
"generate_obj": true,
"generate_geotiff": true
}
Esempio Configurazione Completa (con GCP)
{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
// Sistema coordinate input - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
// Sistema coordinate output - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Punti controllo
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Lista immagini
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... altre immagini
],
// Genera tutti i formati
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}
💾 Struttura Output
Dopo completamento elaborazione, verrà generata la seguente struttura nella directory di lavoro:
working_dir/
├── products/ # Risultati finali
│ ├── models/ # Modelli 3D
│ │ ├── model.obj # Formato OBJ
│ │ ├── model.mtl # File materiale
│ │ ├── textures/ # Immagini texture
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Dati nuvola punti
│ │ └── cloud.las # Nuvola punti formato LAS
│ └── orthophoto/ # Ortofoto
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Dati tessere
├── milestones/ # Risultati intermedi
│ ├── at_result/ # Risultato triangolazione aerea
│ ├── roi.json # Range ROI
│ └── report.html # Report elaborazione
└── log/ # File log
└── log.txt # Log dettagliato
🎯 Suggerimenti Uso
Scenari Appropriati
- ✅ Prototipazione rapida e test
- ✅ Progetti standard fotografia aerea
- ✅ Elaborazione automatizzata batch
- ✅ Apprendimento principianti
Scenari Inappropriati
- ❌ Necessità controllo fine parametri elaborazione
- ❌ Necessità uso punti controllo
- ❌ Necessità verifica risultati intermedi
- ❌ Camere speciali o sensori
🔧 Tecniche Avanzate
1. Elaborazione batch progetti multipli
import json
import subprocess
from pathlib import Path
def batch_process(project_list):
for project in project_list:
# Crea configurazione
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
}
# Salva configurazione
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
# Esegui elaborazione
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])
2. Ottimizzazione automatica parametri
def optimize_parameters(image_count, available_memory_gb):
"""Seleziona parametri automaticamente basandosi su dimensione progetto"""
# Livello risoluzione
if image_count < 100:
resolution_level = 1 # Alta precisione
elif image_count < 500:
resolution_level = 2 # Precisione media
else:
resolution_level = 3 # Bassa precisione (progetti grandi)
# Formati output
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. Monitoraggio progresso
import re
import time
from threading import Thread
def monitor_progress(log_file):
"""Monitora progresso elaborazione"""
def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Vai alla fine file
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()
❓ Domande Frequenti
D: Perché alcune immagini non sono state usate?
R: ReconstructFull filtrerà automaticamente immagini di bassa qualità:
- Immagini sfocate
- Immagini senza informazioni GPS
- Immagini duplicate o molto simili
Puoi controllare le immagini filtrate e i loro motivi nel log.
D: Come elaborare immagini senza GPS?
R: Per immagini senza informazioni GPS, devi:
- Usare interfaccia ReconstructAT (supporta elaborazione senza GPS)
- O aggiungere manualmente informazioni GPS a EXIF
- O usare file POS esterno
D: Memoria insufficiente durante elaborazione progetto grande?
R: Soluzioni:
- Riduci
resolution_level
a 2 o 3 - Riduci formati output generati simultaneamente
- Usa elaborazione a blocchi (richiede altre interfacce)
🔗 Collegamenti Correlati
- Dettagli sistemi coordinate
- Descrizione metadati immagine
- Confronto formati output
- Interfaccia ReconstructAT (più controllo)
ReconstructFull è la scelta migliore per iniziare a usare MipMapEngine SDK. Con l'esperienza crescente, puoi esplorare altre interfacce per più controllo.