API ReconstructFull
ReconstructFull est l'interface de reconstruction complète la plus simple et facile à utiliser, adaptée au démarrage rapide de projets et aux nouveaux utilisateurs. Elle gère automatiquement le flux complet d'extraction des métadonnées d'images, de calcul de triangulation aérienne et de reconstruction 3D.
🎯 Caractéristiques de l'Interface
- ✅ Haut degré d'automatisation : Lit automatiquement les informations GPS et caméra depuis l'EXIF des images
- ✅ Configuration simple : Le minimum requis est seulement de fournir le chemin des images
- ✅ Tout-en-un : Génère les résultats finaux directement depuis les images
- ✅ Optimisation intelligente : Sélectionne automatiquement les meilleurs paramètres de traitement
📋 Détails des Paramètres
Paramètres Requis
Nom du Paramètre | Type | Description | Valeur d'Exemple |
---|---|---|---|
license_id | int | ID de licence SDK | 9200 |
working_dir | string | Chemin du répertoire de travail | "C:/Projects/MyProject" |
gdal_folder | string | Répertoire de données GDAL | "C:/MipMap/SDK/data" |
coordinate_system | object | Système de coordonnées d'entrée | Voir description ci-dessous |
image_meta_data | array | Liste d'images | Voir description ci-dessous |
input_image_type | int | Type d'image | 1 =RGB, 2 =Multispectral, 3 =Infrarouge |
resolution_level | int | Niveau de précision | 1 =Élevé, 2 =Moyen, 3 =Faible |
Paramètres Optionnels - Contrôle de Sortie
Nom du Paramètre | Type | Valeur par Défaut | Description |
---|---|---|---|
generate_obj | bool | false | Générer modèle format OBJ |
generate_ply | bool | false | Générer modèle format PLY |
generate_osgb | bool | false | Générer format OSGB (photographie oblique) |
generate_3d_tiles | bool | false | Générer 3D Tiles (Cesium) |
generate_las | bool | false | Générer nuage de points LAS |
generate_pc_ply | bool | false | Générer nuage de points PLY |
generate_pc_osgb | bool | false | Générer nuage de points OSGB (LOD) |
generate_pc_pnts | bool | false | Générer nuage de points PNTS (3D Tiles) |
generate_geotiff | bool | false | Générer orthophoto |
generate_tile_2D | bool | false | Générer tuiles 2D |
generate_2D_from_3D_model | bool | false | Générer orthophoto depuis modèle 3D |
Paramètres Optionnels - Système de Coordonnées
Nom du Paramètre | Type | Valeur par Défaut | Description |
---|---|---|---|
coordinate_system_3d | object | Local/LocalENU | Système de coordonnées 3D de sortie |
coordinate_system_2d | object | LocalENU | Système de coordonnées 2D de sortie |
Paramètres Optionnels - Fonctions Avancées
Nom du Paramètre | Type | Valeur par Défaut | Description |
---|---|---|---|
gcp_path | string | - | Chemin du fichier de points de contrôle |
gcp_coor_sys | object | - | Système de coordonnées des points de contrôle |
use_image_position_constraint | bool | true | Utiliser contrainte de position d'image |
fast_mode | bool | false | Mode rapide (qualité moindre) |
min_avali_memory_size | float | 16.0 | Taille mémoire disponible minimale (GB) |
output_block_change_xml | bool | false | Générer Block Exchange XML |
📝 Détails des Structures de Données
Objet coordinate_system
{
"type": 2, // 1=Projection, 2=Géographique, 3=Géocentrique
"type_name": "Geographic",
"label": "WGS 84", // Nom du système de coordonnées
"epsg_code": 4326 // Code EPSG
}
Éléments du tableau image_meta_data
Format de base (lecture automatique EXIF)
{
"id": 1, // Identifiant unique
"path": "C:/Images/DJI_0001.JPG", // Chemin d'image
"group": "camera_1" // Optionnel : groupement de caméra
}
Format complet (métadonnées personnalisées)
{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Nom du groupe de caméra
"meta_data": { // Métadonnées personnalisées
"width": 6000, // Largeur d'image (pixels)
"height": 4000, // Hauteur d'image (pixels)
"pos": [114.123456, 22.123456, 100.5], // [Longitude, Latitude, Élévation]
"pos_sigma": [0.05, 0.05, 0.10], // [Précision X, Précision Y, Précision Z] (mètres)
"focal_length": 24.0, // Distance focale (millimètres)
"pixel_size": 0.00391 // Taille de pixel (millimètres)
}
}
Paramètre de groupement de caméra (group)
Utilisé pour systèmes multi-caméras, pour traiter les images de différentes caméras en groupes :
"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"}
]
Scénarios de groupement courants :
- Caméra oblique à cinq objectifs : nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
- Système de caméra double : wide_angle, telephoto
- Coopération multi-drone : drone_1, drone_2, drone_3
- Multi-temporel : morning, afternoon
Explication des paramètres pos et pos_sigma
Paramètre pos :
- Format :
[Longitude, Latitude, Élévation]
ou[X, Y, Z]
(selon le système de coordonnées) - Unité : Degrés et mètres pour système géographique, mètres pour système de projection
- Objectif : Remplacer les informations GPS dans EXIF ou fournir position pour images sans GPS
Paramètre pos_sigma :
- Format :
[σ_X, σ_Y, σ_Z]
- Unité : Mètres
- Signification : Écart-type de mesure de position dans chaque direction (1σ)
- Objectif : Utilisé comme poids dans l'optimisation de triangulation aérienne, plus de précision (σ plus petit) signifie plus de poids
Valeurs typiques :
Méthode de Positionnement | σ_X/σ_Y | σ_Z | Description |
---|---|---|---|
Solution fixe RTK | 0.02-0.05m | 0.05-0.10m | Précision maximale |
Post-traitement PPK | 0.03-0.08m | 0.08-0.15m | Haute précision |
GPS normal | 2-5m | 3-8m | Précision standard |
Estimation manuelle | 0.5-2m | 1-3m | Faible précision |
📝 Exemples de Configuration
Configuration Minimale
{
"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
}
Exemple de Configuration Groupes Multi-Caméra
{
"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
},
// Groupement d'images multi-caméra
"image_meta_data": [
// Caméra nadir
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
// Caméra oblique avant
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},
// Plus de groupes de caméras...
],
"generate_osgb": true,
"generate_3d_tiles": true
}
Exemple de Configuration POS Personnalisée
{
"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
},
// Utiliser données de position haute précision post-traitées PPK
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Position précise après traitement PPK
"pos_sigma": [0.03, 0.03, 0.05] // Précision 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]
}
}
// ... plus d'images
],
"generate_obj": true,
"generate_geotiff": true
}
Exemple de Configuration Complète (avec GCP)
{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
// Système de coordonnées d'entrée - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
// Système de coordonnées de sortie - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Points de contrôle
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Liste d'images
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... plus d'images
],
// Générer tous les formats
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}
💾 Structure de Sortie
Après achèvement du traitement, la structure suivante sera générée dans le répertoire de travail :
working_dir/
├── products/ # Résultats finaux
│ ├── models/ # Modèles 3D
│ │ ├── model.obj # Format OBJ
│ │ ├── model.mtl # Fichier matériau
│ │ ├── textures/ # Images de texture
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Données nuage de points
│ │ └── cloud.las # Nuage de points format LAS
│ └── orthophoto/ # Orthophoto
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Données de tuiles
├── milestones/ # Résultats intermédiaires
│ ├── at_result/ # Résultat triangulation aérienne
│ ├── roi.json # Plage ROI
│ └── report.html # Rapport de traitement
└── log/ # Fichiers de journal
└── log.txt # Journal détaillé
🎯 Suggestions d'Utilisation
Scénarios Appropriés
- ✅ Prototypage rapide et tests
- ✅ Projets standard de photographie aérienne
- ✅ Traitement automatisé par lots
- ✅ Apprentissage pour débutants
Scénarios Inappropriés
- ❌ Besoin de contrôle fin des paramètres de traitement
- ❌ Besoin d'utiliser des points de contrôle
- ❌ Besoin de vérifier les résultats intermédiaires
- ❌ Caméras spéciales ou capteurs
🔧 Techniques Avancées
1. Traitement par lots de multiples projets
import json
import subprocess
from pathlib import Path
def batch_process(project_list):
for project in project_list:
# Créer configuration
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
}
# Sauvegarder configuration
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
# Exécuter traitement
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])
2. Optimisation automatique des paramètres
def optimize_parameters(image_count, available_memory_gb):
"""Sélectionner paramètres automatiquement selon taille du projet"""
# Niveau de résolution
if image_count < 100:
resolution_level = 1 # Haute précision
elif image_count < 500:
resolution_level = 2 # Précision moyenne
else:
resolution_level = 3 # Faible précision (grands projets)
# Formats de sortie
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. Surveillance de progression
import re
import time
from threading import Thread
def monitor_progress(log_file):
"""Surveiller progression du traitement"""
def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Aller à la fin du fichier
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\rProgrès: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)
thread = Thread(target=read_progress, daemon=True)
thread.start()
❓ Questions Fréquemment Posées
Q : Pourquoi certaines images n'ont-elles pas été utilisées ?
R : ReconstructFull filtrera automatiquement les images de mauvaise qualité :
- Images floues
- Images sans informations GPS
- Images dupliquées ou très similaires
Vous pouvez consulter les images filtrées et leurs raisons dans le journal.
Q : Comment traiter les images sans GPS ?
R : Pour les images sans informations GPS, vous devez :
- Utiliser l'interface ReconstructAT (supporte traitement sans GPS)
- Ou ajouter manuellement les informations GPS à EXIF
- Ou utiliser un fichier POS externe
Q : Mémoire insuffisante lors du traitement de grand projet ?
R : Solutions :
- Réduire
resolution_level
à 2 ou 3 - Réduire les formats de sortie générés simultanément
- Utiliser traitement par blocs (nécessite autres interfaces)
🔗 Liens Connexes
- Détails des systèmes de coordonnées
- Description des métadonnées d'image
- Comparaison des formats de sortie
- Interface ReconstructAT (plus de contrôle)
ReconstructFull est le meilleur choix pour commencer à utiliser MipMapEngine SDK. Avec l'expérience croissante, vous pouvez explorer d'autres interfaces pour plus de contrôle.