एलिसविज़न: कमांड लाइन फोटोग्रामेट्री

क्या आपको बड़ी संख्या में फोटोग्रामेट्रिक स्कैन को स्वचालित करने की आवश्यकता है? फिर मेरे पास आपके लिए खुशखबरी है।


वीडियो ओपन सोर्स मेशरूम फोटोग्राममेट्री प्रोग्राम को दिखाता है । यह परियोजना काफी समय से विभिन्न रूपों में अस्तित्व में है, लेकिन हाल ही में डेवलपर्स ने बाइनरी फाइलें जारी की हैं, इसलिए आप बस उन्हें डाउनलोड और उपयोग कर सकते हैं। वीडियो छवियों को लोड करने, उन्हें संसाधित करने, बदलते मापदंडों आदि के लिए GUI के उपयोग को प्रदर्शित करता है। मेरा सुझाव है कि आप इस कार्यक्रम को कार्रवाई में आज़माएं।

लेकिन मुझे फुल ऑटोमेशन में दिलचस्पी है। यदि आपके पास एक स्कैनिंग इंस्टॉलेशन है जिस पर आप प्रति दिन 100 या अधिक स्कैन करते हैं, तो आपको इन फ़ाइलों के बैच प्रसंस्करण के लिए पूरी तरह से स्वचालित समाधान की आवश्यकता है। यह पोस्ट इस समस्या को हल करने के लिए एक गाइड और / या ट्यूटोरियल है।

शुरुआत के लिए, यह समझना महत्वपूर्ण है कि मशरुम एक विशाल, अखंड परियोजना नहीं है। वास्तव में, प्रसंस्करण खुद को अलग सी ++ प्रोग्राम द्वारा किया जाता है जो कमांड लाइन से चलते हैं, और मेशरूम एक पतली पायथन कोडिंग प्रोग्राम है जो उचित कॉल करता है। इसलिए, मेशरूम का उपयोग करने के बजाय , हम सीधे इन कार्यक्रमों का उपयोग करेंगे। ध्यान दें कि पूर्ण स्रोत उपलब्ध हैं, इसलिए आप पुस्तकालयों को सीधे लिंक कर सकते हैं।

मेशरूम की एक और सुविधाजनक विशेषता है: प्रत्येक ऑपरेशन के दौरान, टर्मिनल में इसकी कमांड प्रदर्शित होती है। इसलिए, इस प्रक्रिया के चरणों को बनाने के लिए, मैंने सिर्फ मेशरूम के साथ काम किया और टीमों को देखा। फिर मैंने कुछ मापदंडों को बदलने के लिए कोड में देखा। इसके अलावा, ऐसा लगता है कि जब आप मेशरूम शुरू करते हैं, तो आप इसे कमांड लाइन से छवियों का एक सेट इकट्ठा करने का आदेश दे सकते हैं, लेकिन मैं इन चरणों को कनेक्ट नहीं करना पसंद करता हूं।

तैयारी और स्थापना


0: आवश्यकताएँ

मेशरूम / एलिसविजन हर प्लेटफॉर्म पर नहीं चलेगा। CUDA को कुछ चरणों के लिए आवश्यक है, इसलिए गहराई के नक्शे बनाने के लिए आपको एक NVIDIA GPU की आवश्यकता होगी। दुर्भाग्य से, सीपीयू फ़ॉलबैक (सीपीयू फ़ंक्शन के निष्पादन को सीपीयू में स्थानांतरित करना) असंभव है। अन्यथा, प्रोग्राम विंडोज और लिनक्स पर पूरी तरह से काम करेगा। इस लेख के निर्देश विंडोज के लिए हैं, लेकिन कम से कम परिवर्तनों के साथ वे लिनक्स के लिए ठीक-ठीक हो सकते हैं।

1: मेशरूम रिलीज़ को डाउनलोड करें

मशरुम 2018.1.0

सबसे पहले मेशरूम स्थापित करना है। उस फ़ोल्डर का चयन करें जिससे आप काम करना चाहते हैं, और फिर नवीनतम संस्करण डाउनलोड करें। ज़िप फ़ाइल में सभी निर्भरता के बायनेरी होते हैं।

यदि आप रोमांच से आकर्षित हैं, तो आप कार्यक्रम को स्वयं इकट्ठा करने का प्रयास कर सकते हैं। रिलीज़ डायनेमिक लिंक लाइब्रेरीज़ ठीक (/ MD) काम करती हैं, लेकिन मुझे डिबग बिल्ड और / या स्टैटिक बिल्ड बनाने के लिए cmake फाइल्स को हैक करना पड़ा। यदि आप विंडोज के तहत प्रोग्राम बनाएंगे, तो EXTREMELY VCPKG का उपयोग करने की सलाह देते हैं।

2: डेटा डाउनलोड करें

alicevision / डेटासेट_स्मार्ट्री

जाहिर है, फोटोग्राममेट्री सॉफ्टवेयर का पूरा बिंदु आपकी अपनी छवियों को संसाधित करना है, लेकिन पहले मैं उन छवियों का उपयोग करने का सुझाव देता हूं जो उपयुक्त होने की गारंटी है। वे आपको कुछ गलत होने पर समस्याओं के स्रोतों को खोजने की अनुमति देंगे। सौभाग्य से, डेवलपर्स ने अपने परीक्षण पेड़ के लिए छवियों का एक सेट जारी किया।

3: run_alicevision.py स्क्रिप्ट डाउनलोड करें

run_alicevision.zip

यह वह पटकथा है जिसका हम उपयोग करेंगे। बस ज़िप फ़ाइल डाउनलोड करें और इसे अपने काम करने वाले फ़ोल्डर में अनज़िप करें।

4: पायथन स्थापित करें

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

यदि आपने पहले ही ऐसा नहीं किया है तो पायथन को स्थापित करें। हां, मैं अभी भी पायथन 2.7.0 के लिए कोड लिख रहा हूं। रिलीज से विंडोज X86-64 MSI इंस्टॉलर को स्थापित करने का सबसे आसान तरीका।

5: मेशलैब स्थापित करें (वैकल्पिक)

MeshLab

एक वैकल्पिक कदम के रूप में, आपको मेशलैब भी स्थापित करना होगा। वास्तव में, प्रसंस्करण के लिए इसकी आवश्यकता नहीं होगी, लेकिन कई चरणों में डेटा को PLY बिंदु फ़ाइलों में प्रदर्शित किया जाता है। उन्हें माया में डाउनलोड नहीं किया जा सकता है, इसलिए मैं उन्हें देखने के लिए मेषलैब का उपयोग करता हूं।

सभी फ़ाइलों को अनपैक करने के बाद, फ़ोल्डर को इस तरह दिखना चाहिए ( build_files फ़ोल्डर के अपवाद के साथ, जो स्क्रिप्ट के लिए बनाया गया है):



यहाँ निम्नलिखित है:

  • build_files: जिन फ़ाइलों को हमने संकलित किया है।
  • डेटासेट-मास्टर: स्रोत चित्र
  • मेशरूम -2018.1.0: मेशरूम / एलिसविज़न बायनेरिज़
  • बाकी सब: स्क्रिप्ट उन्हें चलाने के लिए, जो run_alicevision.zip से ली गई हैं।

ऐलिसविज़न को लॉन्च करें


अब run_alicevision.py पर नज़दीकी नज़र रखने का समय आ गया है

पायथन फ़ाइल को 5 तर्क मिले:

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

  1. बेसडिअर : वह फ़ोल्डर जिसमें आप अस्थायी फाइलें रखना चाहते हैं।
  2. imgDir : स्रोत छवियों वाले फ़ोल्डर। हमारे मामले में, IMG_1024.JPG (और अन्य)।
  3. binDir : एक फ़ोल्डर जिसमें ऐलिसविजन एक्ज़ीक्यूटेबल्स हैं , उदाहरण के लिए aliceVision_cameraInit.exe
  4. numImages : हमारे मामले में imgDir में छवियों की संख्या 6. बेशक, आप इस संख्या को स्वचालित रूप से पहचान सकते हैं, लेकिन लक्ष्य सरलतम पायथन स्क्रिप्ट को संभव बनाना था, इसलिए आपको इस संख्या को स्वयं निर्दिष्ट करने की आवश्यकता है।
  5. runStep : ऑपरेशन किया जाना है।

संक्षेप में: हम 6 छवियों से शुरू करते हैं जो इस तरह दिखती हैं:


Run_alicevision.py python स्क्रिप्ट का उपयोग करते हुए , हम निम्नलिखित फ़ोल्डर संरचना बनाने जा रहे हैं:


और 11_Texturing फ़ोल्डर में एक तैयार मॉडल होगा जो मेशलैब में खुलता है:


इनमें से प्रत्येक फ़ोल्डर चरणों में से एक है। हम या तो उन्हें run_monstree_runXX.bat फ़ाइलों का उपयोग करके चला सकते हैं, या उन सभी को एक साथ इकट्ठा करने के लिए run_monstree_all.bat का उपयोग कर सकते हैं।

वह सब है। अब आप फ़ाइल run_monstree_all.bat चला सकते हैं, या एक बार में एक चरण कर सकते हैं। आप इसके काम को समझने के लिए स्क्रिप्ट देख सकते हैं। जो लोग प्रसंस्करण पाइपलाइन को अनुकूलित करने में सक्षम होना चाहते हैं, उनके लिए मैंने व्यक्तिगत चरणों के लिए एक परिचय तैयार किया।

00_CameraInit

पहला चरण एक SFM फ़ाइल उत्पन्न करेगा। SFM फाइलें JSON फाइलें हैं जो कैमरा आकार, सेंसर जानकारी, 3 डी पॉइंट (ऑब्जर्वेशन), विरूपण कारक और अन्य जानकारी संग्रहीत करती हैं। इस फ़ोल्डर में शुरुआती SFM फ़ाइल में केवल सेंसर के बारे में जानकारी होगी और स्थानीय सेंसर डेटाबेस से डिफ़ॉल्ट मानों का चयन होगा। बाद के चरणों में एसएफएम फाइलें बनाई जाएंगी जिसमें बाहरी कैमरा मापदंडों, बिंदुओं आदि की पूरी मैट्रिक्स होती है।

आपको इस चरण को कॉन्फ़िगर करने की आवश्यकता हो सकती है। यदि आप 4 कैमरों के साथ एक सेटअप का उपयोग करते हैं, लेकिन एक टर्नटेबल पर घूमने वाली वस्तु के 10 शॉट्स लेते हैं, तो आपको 40 छवियों के साथ एक एसएफएम फ़ाइल की आवश्यकता होती है, लेकिन केवल 4 अलग-अलग सेंसर अंशांकन के साथ। यह मुख्य कारण है कि मुझे ऐलिसविजन की संरचना पसंद है। अन्य सॉफ़्टवेयर तत्वों को सेट करने के दर्द के बिना इसमें बैच ऑपरेशन स्थापित करना आसान है (उदाहरण के लिए, अपनी स्वयं की एसएफएम फ़ाइल उत्पन्न करना)।

01_FeatureExtraction

अगला चरण छवियों से विशेषता विशेषताओं को निकालता है, साथ ही साथ इन सुविधाओं के वर्णनकर्ता भी। यह निकाले जाने वाले प्रकार के आधार पर फ़ाइल एक्सटेंशन को बदल देगा।

02_ImageMatching

02_ImageMatching एक पोस्ट-प्रोसेसिंग कदम है जो यह निर्धारित करता है कि कौन-सी छवियां एक-दूसरे के लिए मैप करना तर्कसंगत है। यदि आपके पास 1000 छवियों का एक सेट है, तो सभी 1000 छवियों से मेल खाने के लिए सभी 1000 छवियों की एक मोटी खोज के लिए, आपको 1 मिलियन जोड़े की आवश्यकता है। इसमें बहुत समय लग सकता है (वास्तव में आधा उतना ही, लेकिन आप सिद्धांत को समझते हैं)। स्टेज 02_इमैजमैचिंग इन जोड़ियों को काट देता है।

03_FeatureMatching

03_FeatureMatching फीचर डिस्क्रिप्टर का उपयोग करके छवियों से मेल खाता है। Txt फ़ाइलें जो इसे उत्पन्न करती हैं, उन्हें समझाने की आवश्यकता नहीं है।

04_StructureFromMotion

तो, यह पहला गंभीर चरण है। 04_StructureFromMotion पत्राचार के आधार पर, यह कैमरों की स्थिति और साथ ही कैमरों के आंतरिक मापदंडों की गणना करता है। यह ध्यान दिया जाना चाहिए कि "मोशन से स्ट्रक्चर" शब्द का उपयोग कैमरा पदों की गणना के लिए एक सामान्य शब्द के रूप में किया जाता है। यदि आपके पास 10 सिंक्रनाइज़ कैमरों की फोटोग्राममेट्री के लिए एक सेटअप है, तो "स्ट्रक्चर फ्रॉम मोशन" का उपयोग उन्हें स्नैप करने के लिए किया जाता है, भले ही वह वास्तव में चलता हो।

डिफ़ॉल्ट रूप से, मेशरूम सभी गणना किए गए डेटा को एक एलेम्बिक फ़ाइल के रूप में संग्रहीत करता है, लेकिन मैं इसे एसएफएम फ़ाइल में संग्रहीत करना पसंद करता हूं। यह चरण यह सुनिश्चित करने के लिए मध्यवर्ती डेटा बनाता है कि कैमरे सही तरीके से जुड़े हुए हैं। आउटपुट पर, स्क्रिप्ट PLY फाइलें बनाती है जिन्हें मेशलैब में देखा जा सकता है। निम्नलिखित फाइलें महत्वपूर्ण हैं:

  • bundle.sfm: SFM फ़ाइल सभी टिप्पणियों के साथ।
  • camera.fm: संलग्न कैमरों के लिए डेटा के साथ एक SFM फ़ाइल।
  • cloud_and_pose.ply: अंक और कैमरे मिले।


यहाँ Cloud_and_pose.ply फ़ाइल है। हरे रंग के डॉट्स कैमरे हैं। मेरा मानना ​​है कि कैमरों के बंधन में सकल त्रुटियों की अनुपस्थिति की जांच के लिए यह प्रारूप सबसे उपयुक्त है। यदि कोई त्रुटि कहीं होती है, तो आप वापस जा सकते हैं और सुविधाओं, पत्राचारों या एसएफएम मापदंडों को बदल सकते हैं।



05_PrepareDenseScene

05_PrepareDenseScene का मुख्य कार्य छवि विकृति को समाप्त करना है। यह विरूपण के बिना EXR छवियों को उत्पन्न करता है, ताकि गहराई और अनुमानों की गणना करने में बाद के चरणों को विरूपण समारोह से गोल-यात्रा रूपांतरण करने की आवश्यकता न हो। चित्र इस तरह दिखते हैं:



यह ध्यान दिया जाना चाहिए कि आप काले क्षेत्रों को देखेंगे। ऐलिसविज़न के बाद के चरण वास्तविक कैमरा मैट्रिक्स का उपयोग नहीं करते हैं। इसके बजाय, हम दिखावा करते हैं कि कैमरे में विरूपण के बिना एक नया मैट्रिक्स है, और 05_PrepareDenseScene इस काल्पनिक मैट्रिक्स की मूल छवि को ख़राब करता है। चूंकि यह नया वर्चुअल सेंसर असली सेंसर से बड़ा है, इसलिए कुछ क्षेत्र खाली (काले) दिखाई देंगे।

06_CameraConnection

कड़ाई से बोलते हुए, यह चरण हमारी कार्य प्रक्रिया के सिद्धांत का उल्लंघन करता है। सभी चरणों को डिज़ाइन किया गया था ताकि प्रत्येक फ़ोल्डर पूरी तरह से अलग अलग चरण बन जाए। हालाँकि, 06_CameraConnection , 05_PrepareDenseScene फ़ोल्डर में camsPairsMatrixFromSeeds.bin फ़ाइल बनाता है, क्योंकि यह फ़ाइल विरूपण के बिना छवियों के समान फ़ोल्डर में होनी चाहिए।

07_DepthMap

एलिसविज़न का यह सबसे लंबा चरण है: गहराई के नक्शे बनाना। यह प्रत्येक छवि के लिए एक EXR फ़ाइल के रूप में एक गहरा मानचित्र बनाता है। मैंने इसे नोटिस करना आसान बनाने के लिए स्थापित किया। आप पेड़ से चिपकी हुई एक छोटी सी "जीभ" देख सकते हैं।


चूंकि इस चरण में बहुत समय लगता है, इसलिए एक पैरामीटर है जो हमें अलग-अलग कैमरों के समूहों को अलग-अलग कमांड के रूप में चलाने की अनुमति देता है। इसलिए, यदि आपके पास 1000 कैमरे हैं, तो आप विभिन्न कृषि मशीनों पर कैमरों के समूहों के लिए गहराई के नक्शे बना सकते हैं। या आप कार्य को छोटे समूहों में तोड़ सकते हैं ताकि यदि एक मशीन दुर्घटनाग्रस्त हो जाए, तो आपको पूरी प्रक्रिया को दोबारा नहीं करना पड़ेगा।

08_DepthMapFilter

स्रोत की गहराई के नक्शे पूरी तरह से सुसंगत नहीं होंगे। कुछ गहराई मानचित्रों को अन्य गहराई के नक्शे द्वारा अतिव्यापी क्षेत्रों को देखना होगा। स्टेज 08_DepthMapFilter ऐसे क्षेत्रों को अलग करता है और गहराई की स्थिरता को लागू करता है।


09_Meshing

यह पहला चरण है जिसमें मेष सीधे उत्पन्न होता है। मेष के साथ छोटी समस्याएं हो सकती हैं जिनके साथ हल किया जा सकता है ...


10_MeshFiltering

स्टेज 10_MeshFiltering 09_Meshing जाल प्राप्त करता है और इसे परिष्कृत करता है। यह निम्नलिखित कार्य करता है:

  • जाल को चिकना करता है।
  • बड़े त्रिकोणों को समाप्त करता है।
  • सबसे बड़ी जाली बचाता है, लेकिन बाकी को हटा देता है।


इनमें से कुछ ऑपरेशन हमेशा कुछ मामलों में वांछनीय नहीं होते हैं, इसलिए यदि आवश्यक हो, तो मापदंडों को समायोजित किया जा सकता है।

11_Texturing

अंतिम चरण। 11_Texturing यूवी बनाता है और बनावट को प्रोजेक्ट करता है। और इस स्तर पर यह सब समाप्त हो जाता है!


आखिरी ट्रिक जो आप मेशलैब के साथ कर सकते हैं: आप अलग-अलग OBJ और PLY फाइलों को लेयर के रूप में ड्रैग और ड्रॉप कर सकते हैं।


मेरे उदाहरण में, समाप्त जाल के लिए एक परत है, और अंक / कैमरों एसएफएम के लिए। कभी-कभी एक जाल का चौरसाई चरण आवश्यकता से थोड़ा अधिक आक्रामक हो सकता है, इसलिए मूल और चौरसाई जाल की तुलना करना उपयोगी है। यदि मेष टूटा हुआ दिखता है, तो पाइपलाइन में समस्याओं को ट्रैक करने के लिए पीएलवाई से एसएफएम डेटा और ओबीजे से मेष का उपयोग करना सुविधाजनक है।

धन्यवाद

यह पोस्ट ऐलिसविज़न और ओपनएमवीजी की विकास टीमों के लिए बहुत धन्यवाद के बिना पूरा नहीं होगा। प्रेरणा का स्रोत libmv प्रोजेक्ट था। यह प्रोजेक्ट OpenMVG का अग्रदूत था, जो नए एल्गोरिदम विकसित करने के लिए कंप्यूटर विज़न इंजीनियरों / शोधकर्ताओं का भंडार है। एलिसविज़न , ओपनएमवीजी का एक कांटा है, जिसे विशेष रूप से तैयार उत्पाद के रूप में इन एल्गोरिदम को एक स्टैंडअलोन समाधान में बदलने के लिए बनाया गया है।

ऐलिसविज़न / मेशरूम एक बड़ी, महत्वाकांक्षी ओपन-सोर्स परियोजना है। उनकी मुख्य उपलब्धि इस तरह की एक गंभीर परियोजना द्वारा इस तरह की अंतिम परियोजना की उपलब्धि है, और हम उनके लिए बहुत कुछ करते हैं। हम OpenMVG टीम (और libmv ) को धन्यवाद देने के लिए भी बाध्य हैं, जिनके मौलिक काम ने ऐलिसविजन को बनाने की अनुमति दी।

अंत में, मैं VCPKG के लिए Microsoft को विशेष धन्यवाद कहना चाहता हूंवीसीपीकेजी एक पैकेज मैनेजर है जिसने विंडोज के लिए बड़े ओपन-सोर्स प्रोजेक्ट्स की असेंबली को सरल बनाया है। कुछ साल पहले मैंने विंडोज के तहत OpenMVG बनाने की कोशिश की थी। यह बहुत अच्छी तरह से समाप्त नहीं हुआ। इसलिए जब मैंने कुछ महीने पहले एलिसविज़न के बारे में सुना, तो मैंने इसे संकलित करने की कोशिश की, लेकिन सरल चीजों से भी असफल रहा। फिर मैंने वीसीपीकेजी की कोशिश की, और यह सब तुरंत काम किया। वीसीपीकेजी जैसी परियोजना का उपयोग करने के लाभ को निर्धारित करना कठिन है, लेकिन इसने विंडोज के लिए ओपन-सोर्स इकोसिस्टम की मदद की।

github.com/alicevision

github.com/openMVG/openMVG

github.com/libmv/libmv

github.com/Microsoft/vcpkg

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


All Articles