انتقل إلى المحتوى الرئيسي

واجهة ReconstructFull API

ReconstructFull هي واجهة إعادة البناء الشاملة الأبسط والأسهل استخداماً، مناسبة لبدء تشغيل المشاريع السريع والمستخدمين الجدد. تتعامل تلقائياً مع العملية الكاملة لاستخراج البيانات الوصفية للصور، وحساب التثليث الجوي، وإعادة البناء ثلاثي الأبعاد.

🎯 ميزات الواجهة

  • مستوى أتمتة عالي: يقرأ تلقائياً معلومات GPS والكاميرا من EXIF للصور
  • إعداد بسيط: الحد الأدنى المطلوب هو توفير مسار الصور فقط
  • حل شامل: ينتج النتائج النهائية مباشرة من الصور
  • تحسين ذكي: يختار تلقائياً أفضل معاملات المعالجة

📋 تفصيل المعاملات

المعاملات المطلوبة

اسم المعاملالنوعالوصفقيمة المثال
license_idintمعرف ترخيص SDK9200
working_dirstringمسار دليل العمل"C:/Projects/MyProject"
gdal_folderstringدليل بيانات GDAL"C:/MipMap/SDK/data"
coordinate_systemobjectنظام الإحداثيات الدخلانظر الوصف أدناه
image_meta_dataarrayقائمة الصورانظر الوصف أدناه
input_image_typeintنوع الصورة1=RGB, 2=متعدد الأطياف, 3=الأشعة تحت الحمراء
resolution_levelintمستوى الدقة1=عالي, 2=متوسط, 3=منخفض

المعاملات الاختيارية - التحكم في الإخراج

اسم المعاملالنوعالقيمة الافتراضيةالوصف
generate_objboolfalseإنتاج نموذج بتنسيق OBJ
generate_plyboolfalseإنتاج نموذج بتنسيق PLY
generate_osgbboolfalseإنتاج تنسيق OSGB (التصوير المائل)
generate_3d_tilesboolfalseإنتاج 3D Tiles (Cesium)
generate_lasboolfalseإنتاج سحابة نقاط LAS
generate_pc_plyboolfalseإنتاج سحابة نقاط PLY
generate_pc_osgbboolfalseإنتاج سحابة نقاط OSGB (LOD)
generate_pc_pntsboolfalseإنتاج سحابة نقاط PNTS (3D Tiles)
generate_geotiffboolfalseإنتاج صورة تقويمية
generate_tile_2Dboolfalseإنتاج بلاطات 2D
generate_2D_from_3D_modelboolfalseإنتاج تقويمية من النموذج ثلاثي الأبعاد

المعاملات الاختيارية - نظام الإحداثيات

اسم المعاملالنوعالقيمة الافتراضيةالوصف
coordinate_system_3dobjectLocal/LocalENUنظام الإحداثيات ثلاثي الأبعاد للإخراج
coordinate_system_2dobjectLocalENUنظام الإحداثيات ثنائي الأبعاد للإخراج

المعاملات الاختيارية - الوظائف المتقدمة

اسم المعاملالنوعالقيمة الافتراضيةالوصف
gcp_pathstring-مسار ملف نقاط التحكم
gcp_coor_sysobject-نظام إحداثيات نقاط التحكم
use_image_position_constraintbooltrueاستخدام قيد موضع الصورة
fast_modeboolfalseالوضع السريع (جودة أقل)
min_avali_memory_sizefloat16.0الحد الأدنى للذاكرة المتاحة (GB)
output_block_change_xmlboolfalseإخراج 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.05m0.05-0.10mأعلى دقة
معالجة PPK اللاحقة0.03-0.08m0.08-0.15mدقة عالية
GPS عادي2-5m3-8mدقة قياسية
تقدير يدوي0.5-2m1-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/ # النماذج ثلاثية الأبعاد
│ │ ├── 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، تحتاج إلى:

  1. استخدام واجهة ReconstructAT (تدعم المعالجة بدون GPS)
  2. أو إضافة معلومات GPS يدوياً إلى EXIF
  3. أو استخدام ملف POS خارجي
س: نفدت الذاكرة أثناء معالجة مشروع كبير؟

ج: الحلول:

  1. تقليل resolution_level إلى 2 أو 3
  2. تقليل تنسيقات الإخراج المولدة في نفس الوقت
  3. استخدام معالجة مجزأة (يتطلب استخدام واجهات أخرى)

🔗 روابط ذات صلة

  • تفصيل أنظمة الإحداثيات
  • شرح البيانات الوصفية للصور
  • مقارنة تنسيقات الإخراج
  • واجهة ReconstructAT (مزيد من التحكم)

ReconstructFull هو الخيار الأفضل للبدء في استخدام MipMapEngine SDK. مع نمو الخبرة، يمكنك استكشاف واجهات أخرى للحصول على مزيد من التحكم.