البرنامج التعليمي: عن طريق الكاميرا فون ومكتبة برمجية مفتوحة للرؤية الحاسوبية لإعادة الإعمار 3D كاملة (الجزء الثاني)

هذا المقال هو عبارة عن تجميع للAI Yanxishe بلوق التكنولوجيا، والعنوان الأصلي:

البرنامج التعليمي: ستيريو 3D إعادة الإعمار مع مكتبة برمجية مفتوحة للرؤية الحاسوبية باستخدام كاميرا فون الجزء الثاني ..

الكاتب | عمر Padierna

الترجمة | خيبة الأمل، وأسنان يايا، AIfresher

تصحيح التجارب المطبعية | مراجعة خيبة الأمل | جيف ديمبس إنهاء | شقيقة الأناناس

الرابط الأصلي:

https://medium.com/@omar.ps16/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-ii-77754b58bfe0

عرض الجزء الأول، يرجى الضغط على: الجزء الأول

البرنامج التعليمي: عن طريق الكاميرا فون ومكتبة برمجية مفتوحة للرؤية الحاسوبية لاستكمال إعادة الإعمار 3D (الجزء الثاني)

مرحبا بكم في الجزء 2 من ثلاثية حول إعادة الإعمار ثلاثي الأبعاد. في هذا القسم، وسوف نناقش كيفية معايرة الكاميرا.

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

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

في جميع مراحل عملية التصميم، وسوف نستخدم بايثون 3.7.1، 3.4.4 مكتبة برمجية مفتوحة للرؤية الحاسوبية الثعبان وبعض المكتبات طرف ثالث :. نمباي، غلوب، tqdm وسادة. لذلك، أولا وقبل كل ضمان أن تم تثبيت هذه الأدوات.

مكتبة برمجية مفتوحة للرؤية الحاسوبية عملية الكاميرا المعايرة هي السماح الكمبيوتر مسح صورة باستخدام نمط الشطرنج، مع زاوية مختلفة داخل التعرف على الصور عدة مرات.

قدمت عينة نموذجية معايرة مكتبة برمجية مفتوحة للرؤية الحاسوبية

معظم تعليمي على معايرة الكاميرا هو كل شيء عن كاميرات الويب أو غيرها من آلات التصوير، لذلك هم لتحليل كل إطار على حدة (أو إطارات متعددة) وتخصيص.

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

عند معالجة دفق الفيديو، يمكننا تحليل كل إطار عندما يتم الكشف عن تحركات المستخدم أمام الكاميرا حتى النماذج النقالة وافر من الأوقات (والذي عادة ما يكون إجراء تعسفي، ولكن بشكل عام لا يقل عن 10 قرارات).

لأننا لا نتعامل مع دفق الفيديو، لذلك لدينا لالتقاط صور متعددة من نفس الطراز.

الخطوة 1 لإعطاء نمط الشطرنج.

الذهاب إلى هذا الرابط، وهذا نمط اللوحة المطبوعة على ورقة واحدة من الورق. من أجل نتائج مثالية، لضمان أن كل مربع هو 30 ملم طويلة (على الرغم من أن هذا ليس مهما بشكل خاص).

الخطوة 2. نمط الشطرنج الأبيض في الجدار شنقا.

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

وفقا لنمط الشطرنج تجديد الطلاء المنزل

الخطوة 3. أخذت بعض الصور من نمط.

هذه الخطوة مهمة جدا لضمان أن صورك لديها ضوء جيدة، واتخذت نمط من منظور مختلف. وتأكد أيضا من أن أجزاء مختلفة من نمط الشاشة.

إذا كنت اطلاق النار فقط الصورة تركز، قد تحدث أخطاء المعايرة. تأكد من الصور الخاصة بك لديها الكثير من التغييرات.

هذا هو مثال جيد على كيفية اطلاق النار على النمط. النقد من يوت سيلا.

يمكنك العثور على ثروة من الموارد وكيفية القبض على بلوق نمط الكاميرا معايرة أتكارش Sinah في (AI كوخ) في. إذا كنت مهتما في طريقة C ++ معايرة الكاميرا، عليك أن تذهب ونرى.

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

الخطوة 4: بداية دعونا مع مقطع التعليمات البرمجية

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

cv2 استيراد

استيراد نمباي كما أرستها

غلوب استيراد

من tqdm tqdm استيراد

استيراد PIL.ExifTags

استيراد PIL.Image

# ============================================

# معايرة الكاميرا

# ============================================

حجم # تعريف الهدف رقعة الشطرنج.

chessboard_size = (7،5)

الخطوة الثانية هي تحديد شبكة لتخزين جميع النقاط. تحتاج نقطة التخزين إلى أن يؤمر، مثل: (0،0،0)، (1،0،0)، (2،0،0) ...، (6،5،0).

صفائف # تعريف لإنقاذ نقاط الكشف عن

obj_points = # 3D نقطة في الفضاء العالم الحقيقي

img_points = # 3D نقطة في الطائرة صورة

شبكة #Prepare ويشير إلى عرض

objp = np.zeros ((np.prod (chessboard_size)، 3)، dtype = np.float32)

objp = np.mgrid T.reshape (-1،2)

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

صور #read

calibration_paths = glob.glob ( './ calibration_images / *')

#Iterate على الصور للعثور على مصفوفة الجوهرية

لimage_path في tqdm (calibration_paths):

صورة #Load

صورة = cv2.imread (image_path)

gray_image = cv2.cvtColor (صورة، cv2.COLOR_BGR2GRAY)

طباعة ( "صورة تحميل، Analizying ...")

#find زوايا رقعة الشطرنج

المتقاعد، زوايا = cv2.findChessboardCorners (gray_image،

chessboard_size، لا يوجد)

إذا أرجع == صحيح:

طباعة ( "رقعة الشطرنج الكشف عن!")

طباعة (image_path)

معايير تعريف # عن دقة البكسل الفرعي

معايير = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER،

30، 0.001)

موقع زاوية #refine (لدقة البكسل الفرعي) على أساس المعايير.

cv2.cornerSubPix (gray_image، زوايا، (5،5)، (-1، -1)، ومعايير)

obj_points.append (objp)

img_points.append (زوايا)

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

هذه الخوارزمية ترجع نقطة الزاوية الكشف عن وعلم يسمى المتقاعد وإذا خوارزمية يمكن الكشف عن واسطة، فإنه يعود صحيحا.

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

وإذا استخدمنا تعريف موحد: عادي = (نوع وعدد من التكرارات، والدقة). في هذا المثال، نقول خوارزمية نحن نهتم عدد التكرارات والدقة (cv2.term_criteria_eps + cv2.term_criteria_max_iter)، اخترنا 30 تكرارات مع دقة 0.001.

cv2.cornerSubPix الخوارزمية هو التركيز على نقاط مرحلية. يتلقى الصورة، نقطة الزاوية، وحجم النافذة، والظروف الفعلية لصفر للمنطقة الإدخال. حجم الإطار هو منطقة البحث.

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

بعد تحليل كل الصور، ونحن تشغيل خوارزمية cv2.calibratecamera. هذا هو المعلمات كاميرا خوارزمية النواتج. الخوارزمية بإرجاع معامل الكاميرا مصفوفة (ك) تشويه (شعبة نظم) والتناوب وناقلات الترجمة (rvecs وtvecs).

كاميرا #Calibrate

المتقاعد، K، حي، rvecs، tvecs = cv2.calibrateCamera (obj_points، img_points، gray_image.shape ، لا شيء، لا يوجد)

المعلمات # حفظ في ملف نمباي

np.save ( "./ camera_params / متقاعد"، المتقاعد)

np.save ( "./ camera_params / K"، K)

np.save ( "./ camera_params / حي"، شعبة نظم)

np.save ( "./ camera_params / rvecs"، rvecs)

np.save ( "./ camera_params / tvecs"، tvecs)

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

لذلك، فقط حفظ كل شيء إلى ملف نمباي وبعد تحميل أسهل. لماذا نمباي بدلا من أكس أو جسون؟ وذلك لأن للا يحتاج ملف نمباي تحليل البيانات.

لتنفيذ إعادة الإعمار، ونحن نهتم حقا هو المعلمات الثلاث: مصفوفة الكاميرا، عامل التشويه والبعد البؤري. البعد البؤري يمكن استخلاصها من مصفوفة الكاميرا.

ومع ذلك، من أجل التعلم، وقررت أن قررت الحصول على البعد البؤري من معلومات الصورة EXIF الواردة في البيانات. يتم تخزين البعد البؤري للمعلومات كاميرا الهاتف في بيانات EXIF.

البيانات #Get عن الصورة من أجل الحصول على البعد البؤري.

exif_img = PIL.Image.open (calibration_paths )

exif_data = {

PIL.ExifTags.TAGS : V

لك، والخامس في exif_img._getexif.items

إذا ك في PIL.ExifTags.TAGS}

#Get البعد البؤري في شكل الصفوف (tuple)

focal_length_exif = exif_data

#Get البعد البؤري في شكل عشري

FOCAL_LENGTH = focal_length_exif / focal_length_exif

np.save ( "./ camera_params / FocalLength"، FOCAL_LENGTH)

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

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

يتضمن طريقة عددية حساب الخطأ الكلي للنقطة الإسقاط. إذا لاحظت، في بداية البرنامج النصي نعلن اثنين من صفائف، نقطة (نقاط 3D) ونقاط صورة (نقاط 2D) الكائنات.

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

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

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

أتكارش Sinah القيام به للقضاء على أي نتائج التشويه. بواسطة أتكارش Sinah منظمة العفو الدولية شاك في.

إذا الخطأ هو مرتفعة جدا، تأكد من أنك الكشف عن لوحة مختلفة 10 مرات على الأقل، وتأكد من أن الصورة.

ولا بد لي من تحذير لكم، لديك على التحلي بالصبر، وخصوصا عندما يتعلق الأمر إلى الصورة الكبيرة. في حالتي، الخوارزمية المعايرة يأخذ 1.5 ساعة لإكمال.

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

وداعا!

أريد الاستمرار لعرضها روابط ذات صلة والمراجع؟

الصحافة وانقر لفتح ارتباط أو انقر على الجزء السفلي من [دروس: استخدام كاميرا فون ومكتبة برمجية مفتوحة للرؤية الحاسوبية لإعادة الإعمار 3D كاملة (الجزء الثاني)]:

https://ai.yanxishe.com/page/TextTranslation/1413

AI Yanxishe المحتوى مثيرة تحديثها يوميا، وعرض محتوى أكثر إثارة: شبكة شبكة شبكة لى فنغ لى فنغ لى فنغ

ملخص (للNER) NER

ما هي المهارات الأساسية والمتميز عالم البيانات؟

كيف مبتدئين دراسة الهجرة Keras

إذا كنت تريد معرفة البيانات العلمية، والتي يجب عدم تفويتها سبع فئات من الموارد

في انتظاركم لتفسير:

الأهداف عمق التعلم من خوارزمية الكشف

كيف يمكنك بناء RCNN الثقافية والتعليمية أسرع مع PyTorch

DQNs كبار: ميزة أخذ من عمق تعزيز التعلم للعب لعبة باك مان

هيكلة شبكة الرقابة على عمق تعزيز التعلم (أوراق ICML شرح)

ارتفاع منغ ويس أندرسون، ليست هي نفسها باسم "جزيرة الكلب"، جماعة حية، "وانغ"!

ألعاب القوى متعة جنوب شرق DX7 / بطولة DX3 الخبرة

موتورولا G7 بالإضافة إلى تقييم: التقليد الكلاسيكي للحصاد الكمال مشاعر تجربة

RNG لا توجد قائمة صافي نقل Letme، شكك المشجعين سواء المتقاعدين، والبخور وعاء غاضبا: لا اهتمام؟

كيف مبتدئين دراسة الهجرة Keras

YEEZY لم شراء؟ كاني ويست إعادة التعرض أحذية YEEZY لم يكشف عنه!

أسرع من النماذج القديمة من ما يقرب من الاختبار الثاني الجديد بويك ريغال 28T

[هناك] فوائد نحن نبحث عنه غير Luomai، ولكن الروح الخلاص الحقيقي

VN تطبيق استخدام المستخدمين التزوير وبصوت عال في وقت متأخر من الليل الشعور: أكثر متعة شيء

أول للاستيلاء على السوق سواء شاحنة ثقيلة دايملر القيادة تتمتع بحكم شبه ذاتي هو منتج الانتقالية؟

أبدا المفقودين سترة منقوشة! STUSSY س PENDLETON لا نلاحظ إدخال سلسلة محدودة!

مع الشجاعة لاختبار قيادة جاكوار F-PACE 2.0T الجديد