AliceVision: القياس التصويري لسطر الأوامر

هل تحتاج إلى أتمتة عدد كبير من عمليات المسح التصويري؟ ثم لدي أخبار جيدة لك.


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

لكني مهتم بالأتمتة الكاملة. إذا كان لديك تثبيت للمسح الضوئي حيث تقوم بإجراء 100 عملية مسح ضوئي أو أكثر يوميًا ، فأنت بحاجة إلى حل مؤتمت بالكامل لمعالجة هذه الملفات دفعة واحدة. هذا المنشور هو دليل و / أو برنامج تعليمي حول حل هذه المشكلة.

بالنسبة للمبتدئين ، من المهم أن نفهم أن Meshroom ليس مشروعًا ضخمًا ومتجانسًا . في الواقع ، يتم تنفيذ المعالجة نفسها من خلال برامج C ++ منفصلة يتم تشغيلها من سطر الأوامر ، و Meshroom هو برنامج ترميز Python رفيع يقوم بإجراء المكالمات المناسبة. لذلك ، بدلاً من استخدام Meshroom ، سنستخدم هذه البرامج مباشرة. لاحظ أن المصادر الكاملة متاحة ، لذا يمكنك ربط المكتبات مباشرة.

لدى Meshroom ميزة أخرى مريحة: خلال كل عملية ، يتم عرض أمره في المحطة. لذلك ، لإنشاء مراحل هذه العملية ، عملت للتو مع Meshroom ونظرت إلى الفرق. ثم نظرت إلى الشفرة لتغيير بعض المعلمات. بالإضافة إلى ذلك ، يبدو أنه عند بدء تشغيل Meshroom ، يمكنك طلبه لجمع مجموعة من الصور من سطر الأوامر ، لكنني أفضل عدم ربط هذه الخطوات.

التحضير والتركيب


0: المتطلبات

لن يتم تشغيل Meshroom / AliceVision على كل نظام أساسي . هناك حاجة إلى CUDA لبعض الخطوات ، لذلك لإنشاء خرائط عمق ستحتاج إلى NVIDIA GPU. لسوء الحظ ، من المستحيل استخدام وحدة المعالجة المركزية الاحتياطية (نقل تنفيذ وظائف GPU إلى وحدة المعالجة المركزية). وإلا ، فسيعمل البرنامج بشكل مثالي على نظامي التشغيل Windows و Linux. التعليمات الواردة في هذه المقالة مخصصة لنظام التشغيل Windows ، ولكن مع الحد الأدنى من التغييرات ، يمكن ضبطها بدقة لنظام Linux.

1: قم بتنزيل إصدار غرفة النوم

مشروم 2018.1.0

أول شيء يجب فعله هو تثبيت Meshroom . حدد المجلد الذي تريد تنفيذ العمل منه ، ثم قم بتنزيل أحدث إصدار. يحتوي الملف المضغوط على ثنائيات من كل التبعيات.

إذا كنت منجذبًا بالمغامرة ، فيمكنك محاولة تجميع البرنامج بنفسك. تعمل مكتبات الارتباطات الديناميكية للإصدار بشكل جيد (/ MD) ، ولكن كان علي اختراق ملفات cmake لإنشاء تراكيب تصحيح الأخطاء و / أو تراكيب الارتباطات الثابتة. إذا كنت ستقوم ببناء البرنامج تحت Windows ، ثم نوصي بشدة باستخدام VCPKG.

2: تنزيل البيانات

alicevision / dataset_monstree

من الواضح أن الهدف الأساسي من برنامج المسح التصويري هو معالجة الصور الخاصة بك ، ولكني أقترح أولاً استخدام الصور المضمونة لتكون مناسبة. سوف تسمح لك بالعثور على مصادر المشاكل إذا حدث خطأ ما. لحسن الحظ ، أصدر المطورون مجموعة من الصور لشجرة الاختبار الخاصة بهم.

3: قم بتنزيل البرنامج النصي run_alicevision.py

run_alicevision.zip

هذا هو النص الذي سنستخدمه. ما عليك سوى تنزيل ملف مضغوط وفك ضغطه إلى مجلد العمل.

4: تثبيت Python

https://www.python.org/download/releases/2.7/

قم بتثبيت Python إذا لم تكن قد قمت بذلك بالفعل. نعم ، ما زلت أكتب رمز Python 2.7.0. أسهل طريقة لتثبيت Windows X86-64 MSI Installer من الإصدارات.

5: تثبيت Meshlab (اختياري)

مش لاب

كخطوة اختيارية ، يجب أيضًا تثبيت MeshLab . في الواقع ، لن تكون هناك حاجة للمعالجة ، ولكن في عدة مراحل ، يتم عرض البيانات في ملفات نقاط PLY. لا يمكن تنزيلها إلى Maya ، لذلك أستخدم MeshLab لعرضها.

بعد تفريغ جميع الملفات ، يجب أن يبدو المجلد مثل هذا (باستثناء مجلد build_files ، الذي تم إنشاؤه بواسطة البرامج النصية):



هنا ما يلي:

  • build_files: الملفات التي قمنا بتجميعها.
  • dataset_monstree-master: صور المصدر
  • Meshroom-2018.1.0: ثنائيات Meshroom / AliceVision .
  • كل شيء آخر: سكربتات لتشغيلها ، مأخوذة من run_alicevision.zip .

قم بتشغيل AliceVision


حان الوقت الآن لإلقاء نظرة فاحصة على run_alicevision.py

يتلقى ملف Python 5 وسيطات:

python run_alicevision.py <baseDir> <imgDir> <binDir> <numImages> <runStep>

  1. baseDir : المجلد الذي تريد وضع الملفات المؤقتة فيه.
  2. imgDir : مجلد يحتوي على صور المصدر. في حالتنا ، IMG_1024.JPG (وغيرها).
  3. binDir : مجلد يحتوي على الملفات التنفيذية AliceVision ، على سبيل المثال aliceVision_cameraInit.exe .
  4. numImages : عدد الصور في imgDir ، في حالتنا 6. بالطبع ، يمكنك التعرف على هذا الرقم تلقائيًا ، ولكن الهدف كان إنشاء أبسط نص بيثون ممكن ، لذا عليك تحديد هذا الرقم بنفسك.
  5. runStep : العملية المراد تنفيذها.

للتلخيص: نبدأ بست صور تبدو كالتالي:


باستخدام البرنامج النصي run_alicevision.py python ، سنقوم بإنشاء بنية المجلد التالية:


وفي مجلد 11_Texturing سيكون هناك نموذج جاهز يفتح في مشلب :


يعتبر كل من هذه المجلدات إحدى الخطوات. يمكننا إما تشغيلها بالتناوب باستخدام ملفات run_monstree_runXX.bat ، أو استخدام run_monstree_all.bat لجمعها دفعة واحدة.

هذا كل شيء. يمكنك الآن تشغيل الملف run_monstree_all.bat ، أو تنفيذ خطوة واحدة في كل مرة. يمكنك إلقاء نظرة على البرنامج النصي لفهم عمله. بالنسبة لأولئك الذين يريدون أن يكونوا قادرين على تخصيص خط أنابيب المعالجة ، قمت بإعداد مقدمة للخطوات الفردية.

00_CameraInit

ستقوم الخطوة الأولى بإنشاء ملف SFM. ملفات SFM هي ملفات JSON التي تخزن حجم الكاميرا ومعلومات المستشعر ونقاط (ملاحظات) ثلاثية الأبعاد وعوامل تشويه ومعلومات أخرى. سيحتوي ملف SFM الأولي في هذا المجلد على معلومات حول المستشعر فقط وتحديد القيم الافتراضية من قاعدة بيانات المستشعرات المحلية. ستنشئ الخطوات اللاحقة ملفات SFM التي تحتوي على المصفوفة الكاملة لمعلمات الكاميرا الخارجية والنقاط وما إلى ذلك.

قد تحتاج إلى تكوين هذه الخطوة. إذا كنت تستخدم إعدادًا يحتوي على 4 كاميرات ، لكنك التقطت 10 لقطات لكائن يدور على قرص دوار ، فأنت بحاجة إلى ملف SFM يحتوي على 40 صورة ، ولكن مع 4 معايرات مختلفة للمستشعر فقط. هذا هو السبب الرئيسي في أنني أحب هيكل AliceVision . من السهل إعداد العمليات المجمعة فيه (على سبيل المثال ، إنشاء ملف SFM الخاص بك) دون الحاجة إلى إعداد عناصر برامج أخرى من الأفضل تركها دون تغيير.

01_الميزةالاستخراج

تستخرج المرحلة التالية الميزات المميزة من الصور ، بالإضافة إلى واصفات هذه الميزات. سيغير امتداد الملف اعتمادًا على نوع الميزة التي يتم استخراجها.

02_Image المطابقة

02_ImageMatching هي خطوة ما بعد المعالجة تحدد أيًا من الصور منطقي لتعيينها مع بعضها البعض. إذا كان لديك مجموعة من 1000 صورة ، فستحتاج إلى مليون زوج من أجل البحث التقريبي عن كل 1000 صورة لتتناسب مع كل 1000 صورة. يمكن أن يستغرق ذلك الكثير من الوقت (في الواقع نصف ذلك ، لكنك تفهم المبدأ). المرحلة 02_ImageMatching تقطع هذه الأزواج.

03_ ميزة مطابقة

03_FeatureMatching يطابق الصور باستخدام واصفات الميزات. لا تحتاج إلى شرح ملفات txt التي يولدها.

04_ هيكلية من الحركة

لذا ، هذه هي المرحلة الأولى الخطيرة. استنادًا إلى مراسلات 04_StructureFromMotion ، يقوم بحساب مواضع الكاميرا بالإضافة إلى معلمات الكاميرا الداخلية. وتجدر الإشارة إلى أن مصطلح "هيكل من الحركة" يستخدم كمصطلح عام لحساب مواضع الكاميرا. إذا كان لديك إعداد للمسح التصويري لـ 10 كاميرات متزامنة ، فسيتم استخدام "البنية من الحركة" لالتقاطها ، حتى لو لم يتحرك شيء حقًا.

بشكل افتراضي ، يخزن Meshroom جميع البيانات المحسوبة كملف Alembic ، لكنني أفضل تخزينها في ملف SFM. تعمل هذه المرحلة على إنشاء بيانات وسيطة لضمان ربط الكاميرات بشكل صحيح. عند الإخراج ، يقوم البرنامج النصي بإنشاء ملفات PLY التي يمكن عرضها في مشلب . الملفات التالية مهمة:

  • bundle.sfm: ملف SFM مع جميع الملاحظات.
  • camera.fm: ملف SFM مع بيانات الكاميرات المرفقة فقط.
  • cloud_and_pose.ply: العثور على نقاط وكاميرات.


هذا هو ملف cloud_and_pose.ply . النقاط الخضراء عبارة عن كاميرات. أعتقد أن هذا الشكل هو الأنسب للتحقق من عدم وجود أخطاء جسيمة في ربط الكاميرات. إذا حدث خطأ في مكان ما ، فيمكنك الرجوع وتغيير الميزات أو المراسلات أو معلمات SFM.



05_PrepareDenseScene

المهمة الرئيسية ل 05_PrepareDenseScene هي القضاء على تشويه الصورة. يقوم بإنشاء صور EXR بدون تشويه بحيث لا تحتاج الخطوات التالية لحساب الأعماق والتوقعات إلى إجراء تحويلات ذهابًا وإيابًا من وظيفة التشويه. تبدو الصور على النحو التالي:



وتجدر الإشارة إلى أنك سترى مناطق سوداء. لا تستخدم الخطوات اللاحقة AliceVision مصفوفة الكاميرا الحقيقية. بدلاً من ذلك ، نتظاهر بأن الكاميرا تحتوي على مصفوفة جديدة بدون تشويه ، و 05_PrepareDenseScene يشوه الصورة الأصلية إلى هذه المصفوفة الخيالية. نظرًا لأن هذا المستشعر الافتراضي الجديد أكبر من المستشعر الحقيقي ، فستظهر بعض المناطق فارغة (سوداء).

06_الكاميرا

بالمعنى الدقيق للكلمة ، تنتهك هذه المرحلة مبدأ عملية العمل لدينا. تم تصميم جميع المراحل بحيث يصبح كل مجلد مرحلة منفصلة تمامًا. ومع ذلك ، يقوم 06_CameraConnection بإنشاء ملف camsPairsMatrixFromSeeds.bin في المجلد 05_PrepareDenseScene ، لأن هذا الملف يجب أن يكون في نفس المجلد مثل الصور بدون تشويه.

07_DepthMap

هذه هي أطول مرحلة في AliceVision : إنشاء خرائط العمق. يقوم بإنشاء خريطة عمق لكل صورة كملف EXR. قمت بإعداده لتسهيل ملاحظة. يمكنك رؤية "لسان" صغير يخرج من الشجرة.


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

08_DepthMapFilter

لن تكون خرائط عمق المصدر متناسقة بالكامل. ستحتاج بعض خرائط العمق إلى رؤية مناطق متراكبة مع خرائط عمق أخرى. المرحلة 08_DepthMapFilter تعزل مثل هذه المناطق وتفرض اتساق العمق.


09 الرسائل

هذه هي الخطوة الأولى التي يتم فيها إنشاء الشبكة مباشرة. قد تكون هناك مشاكل صغيرة في الشبكة يمكن حلها باستخدام ...


10_MeshFiltering

المرحلة 10_MeshFiltering تستقبل 09_Meshing شبكة وتنقيتها . تقوم بالعمليات التالية:

  • ينعم الشبكة.
  • يزيل المثلثات الكبيرة.
  • يحفظ أكبر شبكة ، لكنه يحذف الباقي.


بعض هذه العمليات ليست مرغوبة دائمًا في بعض الحالات ، لذلك يمكن تعديل المعلمات إذا لزم الأمر.

11- التركيب

المرحلة الأخيرة. 11_Texturing يخلق القوام الأشعة فوق البنفسجية والمشاريع. وفي هذه المرحلة ينتهي كل شيء!


الحيلة الأخيرة التي يمكنك القيام بها باستخدام Meshlab : يمكنك سحب وإسقاط ملفات OBJ و PLY المختلفة كطبقات.


في المثال الخاص بي ، توجد طبقة للشبكة النهائية ، وللنقاط / الكاميرات SFM. في بعض الأحيان ، يمكن أن تكون خطوة التنعيم للشبكة أكثر عدوانية قليلاً مما هو ضروري ، لذلك من المفيد مقارنة الشبكات الأصلية والتنعيم. إذا كانت الشبكة تبدو معطلة ، فمن ثم لتتبع المشاكل في خط الأنابيب ، من المناسب استخدام بيانات sfm من PLY والشبكات من OBJ.

شكر وتقدير

لن تكتمل هذه المشاركة بدون الكثير من الشكر لفرق تطوير AliceVision و OpenMVG . كان مصدر الإلهام هو مشروع libmv . كان هذا المشروع رائدًا لـ OpenMVG ، وهو مستودع لمهندسي / باحثي رؤية الكمبيوتر لتطوير خوارزميات جديدة. AliceVision هي شوكة لـ OpenMVG ، تم إنشاؤها خصيصًا لتحويل هذه الخوارزميات إلى حل مستقل في شكل منتج نهائي.

AliceVision / Meshroom هو مشروع مفتوح المصدر طموح كبير. إنجازه الرئيسي هو تحقيق مثل هذا المشروع النهائي بمثل هذا المشروع الجاد ، ونحن مدينون له بالكثير. نحن ملزمون أيضًا بالشكر لفريق OpenMVGlibmv ) ، الذي سمح لعمله الأساسي بإنشاء AliceVision .

وأخيرًا ، أود أن أقول شكرًا خاصًا لـ Microsoft لـ VCPKG . VCPKG هو مدير حزم يبسط إلى حد كبير تجميع المشاريع الكبيرة مفتوحة المصدر لنظام Windows. قبل بضع سنوات حاولت بناء OpenMVG تحت Windows. لم تنتهي بشكل جيد للغاية. لذلك عندما سمعت عن AliceVision قبل بضعة أشهر ، حاولت تجميعه ، لكنني فشلت حتى مع أشياء أبسط. ثم حاولت VCPKG ، وعمل كل شيء على الفور. من الصعب تحديد مقدار ميزة استخدام مشروع مثل VCPKG ، ولكنه ساعد حقًا النظام البيئي مفتوح المصدر لنظام Windows.

github.com/alicevision

github.com/openMVG/openMVG

github.com/libmv/libmv

github.com/Microsoft/vcpkg

Source: https://habr.com/ru/post/ar422807/


All Articles