API ReconstructFull
ReconstructFull — это самый простой и удобный интерфейс полной реконструкции, подходящий для быстрого запуска проектов и новых пользователей. Он автоматически обрабатывает полный рабочий процесс извлечения метаданных изображений, вычисления воздушной триангуляции и 3D-реконструкции.
🎯 Особенности Интерфейса
- ✅ Высокая степень автоматизации: Автоматически читает GPS и информацию о камере из EXIF изображений
- ✅ Простая конфигурация: Минимально необходимо только указать путь к изображениям
- ✅ Всё в одном: Генерирует финальные результаты непосредственно из изображений
- ✅ Интеллектуальная оптимизация: Автоматически выбирает оптимальные параметры обработки
📋 Детали Параметров
Обязательные Параметры
Имя Параметра | Тип | Описание | Пример Значения |
---|---|---|---|
license_id | int | ID лицензии SDK | 9200 |
working_dir | string | Путь к рабочему каталогу | "C:/Projects/MyProject" |
gdal_folder | string | Каталог данных GDAL | "C:/MipMap/SDK/data" |
coordinate_system | object | Входная система координат | См. описание ниже |
image_meta_data | array | Список изображений | См. описание ниже |
input_image_type | int | Тип изображения | 1 =RGB, 2 =Мультиспектральный, 3 =Инфракрасный |
resolution_level | int | Уровень точности | 1 =Высокий, 2 =Средний, 3 =Низкий |
Опциональные Параметры - Управление Выводом
Имя Параметра | Тип | Значение по Умолчанию | Описание |
---|---|---|---|
generate_obj | bool | false | Генерировать модель формата OBJ |
generate_ply | bool | false | Генерировать модель формата PLY |
generate_osgb | bool | false | Генерировать формат OSGB (косая фотография) |
generate_3d_tiles | bool | false | Генерировать 3D Tiles (Cesium) |
generate_las | bool | false | Генерировать облако точек LAS |
generate_pc_ply | bool | false | Генерировать облако точек PLY |
generate_pc_osgb | bool | false | Генерировать облако точек OSGB (LOD) |
generate_pc_pnts | bool | false | Генерировать облако точек PNTS (3D Tiles) |
generate_geotiff | bool | false | Генерировать ортофото |
generate_tile_2D | bool | false | Генерировать 2D тайлы |
generate_2D_from_3D_model | bool | false | Генерировать ортофото из 3D модели |
Опциональные Параметры - Система Координат
Имя Параметра | Тип | Значение по Умолчанию | Описание |
---|---|---|---|
coordinate_system_3d | object | Local/LocalENU | Выходная 3D система координат |
coordinate_system_2d | object | LocalENU | Выходная 2D система координат |
Опциональные Параметры - Расширенные Функции
Имя Параметра | Тип | Значение по Умолчанию | Описание |
---|---|---|---|
gcp_path | string | - | Путь к файлу контрольных точек |
gcp_coor_sys | object | - | Система координат контрольных точек |
use_image_position_constraint | bool | true | Использовать ограничение позиции изображения |
fast_mode | bool | false | Быстрый режим (пониженное качество) |
min_avali_memory_size | float | 16.0 | Минимальный размер доступной памяти (ГБ) |
output_block_change_xml | bool | false | Вывод Block Exchange XML |
📝 Детали Структур Данных
Объект coordinate_system
{
"type": 2, // 1=Проекция, 2=Географическая, 3=Геоцентрическая
"type_name": "Geographic",
"label": "WGS 84", // Название системы координат
"epsg_code": 4326 // Код EPSG
}
Элементы массива image_meta_data
Базовый формат (автоматическое чтение EXIF)
{
"id": 1, // Уникальный идентификатор
"path": "C:/Images/DJI_0001.JPG", // Путь к изображению
"group": "camera_1" // Опционально: группировка камеры
}
Полный формат (пользовательские метаданные)
{
"id": 1,
"path": "C:/Images/IMG_0001.JPG",
"group": "nadir", // Имя группы камеры
"meta_data": { // Пользовательские метаданные
"width": 6000, // Ширина изображения (пиксели)
"height": 4000, // Высота изображения (пиксели)
"pos": [114.123456, 22.123456, 100.5], // [Долгота, Широта, Высота]
"pos_sigma": [0.05, 0.05, 0.10], // [Точность X, Точность Y, Точность Z] (метры)
"focal_length": 24.0, // Фокусное расстояние (миллиметры)
"pixel_size": 0.00391 // Размер пикселя (миллиметры)
}
}
Параметр группировки камеры (group)
Используется для мультикамерных систем, для обработки изображений с разных камер в группах:
"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"}
]
Распространенные сценарии группировки:
- Пятиобъективная косая камера: nadir, oblique_forward, oblique_backward, oblique_left, oblique_right
- Двухкамерная система: wide_angle, telephoto
- Многодроновое сотрудничество: drone_1, drone_2, drone_3
- Многовременная: morning, afternoon
Объяснение параметров pos и pos_sigma
Параметр pos:
- Формат:
[Долгота, Широта, Высота]
или[X, Y, Z]
(в зависимости от системы координат) - Единица: Градусы и метры для географической системы, метры для проекционной системы
- Назначение: Переопределить GPS информацию в EXIF или предоставить позицию для изображений без GPS
Параметр pos_sigma:
- Формат:
[σ_X, σ_Y, σ_Z]
- Единица: Метры
- Значение: Стандартное отклонение измерения позиции в каждом направлении (1σ)
- Назначение: Используется как вес в оптимизации воздушной триангуляции, более высокая точность (меньше σ) означает больший вес
Типичные значения:
Метод Позиционирования | σ_X/σ_Y | σ_Z | Описание |
---|---|---|---|
RTK фиксированное решение | 0.02-0.05m | 0.05-0.10m | Максимальная точность |
PPK постобработка | 0.03-0.08m | 0.08-0.15m | Высокая точность |
Обычный GPS | 2-5m | 3-8m | Стандартная точность |
Ручная оценка | 0.5-2m | 1-3m | Низкая точность |
📝 Примеры Конфигурации
Минимальная Конфигурация
{
"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
}
Пример Конфигурации Мультикамерных Групп
{
"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
},
// Мультикамерная группировка изображений
"image_meta_data": [
// Надирная камера
{"id": 1, "path": "nadir/IMG_001.jpg", "group": "nadir"},
{"id": 2, "path": "nadir/IMG_002.jpg", "group": "nadir"},
// Передняя косая камера
{"id": 3, "path": "forward/IMG_001.jpg", "group": "oblique_f"},
{"id": 4, "path": "forward/IMG_002.jpg", "group": "oblique_f"},
// Больше групп камер...
],
"generate_osgb": true,
"generate_3d_tiles": true
}
Пример Пользовательской POS Конфигурации
{
"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
},
// Использование высокоточных PPK постобработанных данных позиции
"image_meta_data": [
{
"id": 1,
"path": "images/DJI_0001.JPG",
"meta_data": {
"width": 5472,
"height": 3648,
"pos": [114.305421, 22.596013, 120.543], // Точная позиция после PPK обработки
"pos_sigma": [0.03, 0.03, 0.05] // 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]
}
}
// ... больше изображений
],
"generate_obj": true,
"generate_geotiff": true
}
Пример Полной Конфигурации (с GCP)
{
"license_id": 9200,
"working_dir": "D:/Projects/HighPrecision",
"gdal_folder": "D:/MipMap/SDK/data",
"input_image_type": 1,
"resolution_level": 1,
// Входная система координат - WGS84
"coordinate_system": {
"type": 2,
"label": "WGS 84",
"epsg_code": 4326
},
// Выходная система координат - UTM
"coordinate_system_3d": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Контрольные точки
"gcp_path": "D:/Projects/HighPrecision/gcps.txt",
"gcp_coor_sys": {
"type": 3,
"label": "WGS 84 / UTM zone 50N",
"epsg_code": 32650
},
// Список изображений
"image_meta_data": [
{"id": 1, "path": "D:/Data/flight1/IMG_001.JPG"},
{"id": 2, "path": "D:/Data/flight1/IMG_002.JPG"},
// ... больше изображений
],
// Генерировать все форматы
"generate_obj": true,
"generate_osgb": true,
"generate_3d_tiles": true,
"generate_las": true,
"generate_geotiff": true,
"generate_tile_2D": true
}
💾 Структура Вывода
После завершения обработки в рабочем каталоге будет создана следующая структура:
working_dir/
├── products/ # Финальные результаты
│ ├── models/ # 3D модели
│ │ ├── model.obj # Формат OBJ
│ │ ├── model.mtl # Файл материала
│ │ ├── textures/ # Изображения текстур
│ │ └── tileset.json # 3D Tiles
│ ├── pointcloud/ # Данные облака точек
│ │ └── cloud.las # Облако точек формата LAS
│ └── orthophoto/ # Ортофото
│ ├── ortho.tif # GeoTIFF
│ └── tiles/ # Данные тайлов
├── milestones/ # Промежуточные результаты
│ ├── at_result/ # Результат воздушной триангуляции
│ ├── roi.json # Диапазон ROI
│ └── report.html # Отчет об обработке
└── log/ # Файлы журнала
└── log.txt # Подробный журнал
🎯 Рекомендации по Использованию
Подходящие Сценарии
- ✅ Быстрое прототипирование и тестирование
- ✅ Стандартные проекты аэрофотосъемки
- ✅ Автоматизированная пакетная обработка
- ✅ Обучение для начинающих
Неподходящие Сценарии
- ❌ Необходимость тонкого контроля параметров обработки
- ❌ Необходимость использования контрольных точек
- ❌ Необходимость проверки промежуточных результатов
- ❌ Специальные камеры или датчики
🔧 Продвинутые Техники
1. Пакетная обработка нескольких проектов
import json
import subprocess
from pathlib import Path
def batch_process(project_list):
for project in project_list:
# Создать конфигурацию
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
}
# Сохранить конфигурацию
config_path = f"./config_{project['name']}.json"
with open(config_path, 'w') as f:
json.dump(config, f, indent=2)
# Выполнить обработку
subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "0",
"-task_json", config_path
])
2. Автоматическая оптимизация параметров
def optimize_parameters(image_count, available_memory_gb):
"""Автоматически выбирать параметры на основе размера проекта"""
# Уровень разрешения
if image_count < 100:
resolution_level = 1 # Высокая точность
elif image_count < 500:
resolution_level = 2 # Средняя точность
else:
resolution_level = 3 # Низкая точность (большие проекты)
# Форматы вывода
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. Мониторинг прогресса
import re
import time
from threading import Thread
def monitor_progress(log_file):
"""Мониторинг прогресса обработки"""
def read_progress():
with open(log_file, 'r') as f:
f.seek(0, 2) # Перейти в конец файла
while True:
line = f.readline()
if line:
match = re.search(r'\[PROGRESS\] (\d+)%', line)
if match:
progress = int(match.group(1))
print(f"\rПрогресс: {'█' * (progress//2)}{'░' * (50-progress//2)} {progress}%", end='')
time.sleep(0.1)
thread = Thread(target=read_progress, daemon=True)
thread.start()
❓ Часто Задаваемые Вопросы
В: Почему некоторые изображения не были использованы?
О: ReconstructFull автоматически отфильтрует изображения плохого качества:
- Размытые изображения
- Изображения без GPS информации
- Дублированные или очень похожие изображения
Вы можете проверить отфильтрованные изображения и их причины в журнале.
В: Как обрабатывать изображения без GPS?
О: Для изображений без GPS информации вам нужно:
- Использовать интерфейс ReconstructAT (поддерживает обработку без GPS)
- Или вручную добавить GPS информацию в EXIF
- Или использовать внешний POS файл
В: Недостаточно памяти при обработке большого проекта?
О: Решения:
- Уменьшить
resolution_level
до 2 или 3 - Уменьшить количество одновременно генерируемых форматов вывода
- Использовать блочную обработку (требует других интерфейсов)
🔗 Связанные Ссылки
- Детали систем координат
- Описание метаданных изображений
- Сравнение форматов вывода
- Интерфейс ReconstructAT (больше контроля)
ReconstructFull — лучший выбор для начала использования MipMapEngine SDK. По мере накопления опыта вы можете исследовать другие интерфейсы для большего контроля.