कंप्यूटर विज़न परियोजनाएँ

प्रोजेक्ट की GitHub रिपोजिटरी

बारे में

यह रिपो उन सभी कोडिंग प्रोजेक्ट्स (लैब्स) को प्रदर्शित करता है जिन पर मेहमत और जीन ने CSCI437 में दाखिला लेने के दौरान फॉल 2020 सेमेस्टर में कोलोराडो स्कूल ऑफ़ माइंस में काम किया, जिसकी अवधि 28 अगस्त, 2020 से 14 दिसंबर, 2020 तक है। ये लैब्स Python, OpenCV, और बुनियादी कंप्यूटर विज़न अवधारणाओं को सीखने के लिए एक व्यापक मंच प्रदान करती थीं।

कक्षा के बारे में

मैंने फॉल 2020 सेमेस्टर के दौरान कंप्यूटर विज़न का परिचय (CSCI437) लिया। इस दौरान Dr. William Hoff और Dr. Tom Williams ने कक्षा पढ़ाई। CSCI437. यहाँ CSCI437 के लिए आधिकारिक कक्षा विवरण है:

(I) Computer vision is the process of using computers to acquire images, transform images, and extract symbolic descriptions from images. This course provides an introduction to this field, covering topics in image formation, feature extraction, location estimation, and object recognition. Design ability and hands-on projects will be emphasized, using popular software tools. The course will be of interest both to those who want to learn more about the subject and to those who just want to use computer imaging techniques. Must be Senior level standing. 3 hours lecture; 3 semester hours. Prerequisite: (MATH201 or MATH334 or EENG311),and,MATH332,and,(CSCI200 or CSCI261).

श्रेय

कक्षा के लेक्चर, स्लाइड्स, या Canvas के माध्यम से CSCI437 कक्षा द्वारा कुछ Python स्क्रिप्ट्स और/या कोड सेगमेंट प्रदान किए गए थे। CSCI437 कक्षा कोलोराडो स्कूल ऑफ़ माइंस में प्रदान की जाती है। इन लैब्स को निम्नलिखित साझेदारों के साथ किया गया था:

  • जीन दुओंग
  • मेहमत यिलमाज़

लैब विवरण

लैब 1

लैब 1 OpenCV को Python के साथ उपयोग करने के मूल तत्वों पर केंद्रित है। प्रतिभागियों को एक Python प्रोग्राम लिखना है जो एक वीडियो फ़ाइल पढ़े, वीडियो के प्रत्येक फ़्रेम पर एक वर्ग बनाते हुए चार बिंदुओं को प्रोजेक्ट करे, और प्रत्येक बिंदु के Z समन्वय को क्रमिक रूप से समायोजित करके वर्ग को दूरी में पीछे हटते हुए सिम्युलेट करे। अतिरिक्त रूप से, प्रत्येक फ़्रेम पर फ़्रेम नंबर प्रदर्शित किया जाना है, और ग्राफ़िक ओवरले के साथ अंतिम वीडियो आकलन के लिए अपलोड करना है।

लैब 2

लैब 2 इमेज ट्रांसफॉर्मेशन्स से संबंधित है, विशेष रूप से “XYZ fixed angles” सम्मेलन का उपयोग करके X, Y, और Z अक्षों के चारों ओर घूमने पर केंद्रित है। छात्रों को रोटेशन मैट्रिसेस की गणना करने, कैमरा पोज़ के लिए होमोजनियस ट्रांसफॉर्मेशन मैट्रिसेस की गणना करने, एक कैलिब्रेशन मैट्रिक्स बनाने, और OpenCV के line फ़ंक्शन का उपयोग करके किसी परिचित ऑब्जेक्ट को बनाने हेतु बिंदुओं को छवि पर प्रोजेक्ट करने का कार्य सौंपा गया है। यह लैब कंप्यूटर विज़न में कैमरा ज्योमेट्री और ट्रांसफॉर्मेशन मैट्रिसेस की समझ पर जोर देता है।

लैब 3

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

लैब 4

लैब 4 HSV कलर स्पेस का उपयोग करके रंग से सेगमेंटेशन पर केंद्रित है, जो रंगीन छवियों को संभालने में प्रभावी होने के कारण लेक्चर्स में चर्चा की गई तकनीक है। छात्रों को प्रदान की गई छवियों से स्टॉप साइन पिक्सल्स को सेगमेंट करने के लिए थ्रेशोल्ड ऑपरेशन्स लागू करने का कार्य सौंपा गया है, Python/OpenCV प्रोग्राम का उपयोग करते हुए। असाइनमेंट में सबसे अच्छा स्टॉप साइन पिक्सल्स का पता लगाने वाले थ्रेशोल्ड मान खोजना, परिणाम को साफ़ करने के लिए मॉर्फोलॉजिकल ऑपरेशन्स करना, और सेगमेंट की गई इमेजें साथ ही Python प्रोग्राम और प्रयुक्त थ्रेशोल्ड व मॉर्फोलॉजिकल ऑपरेशन पैरामीटर जमा करना शामिल है।

लैब 5

लैब 5 में किसी मौजूदा छवि के विशिष्ट क्षेत्र में एक नया इमेज टेक्सचर इस तरह सम्मिलित करने का कार्य है कि प्रोजेक्शन सही दिखे। इस प्रक्रिया को प्लेन रिप्लेसमेंट कहा जाता है, और इसमें छात्रों को प्रोजेक्टिव ट्रांसफॉर्म (homography) तकनीकों का उपयोग करके एक नई छवि को मौजूदा छवि के प्लेन क्षेत्र पर मैप करना होता है। यह लैब हौमोग्राफी के व्यावहारिक अनुप्रयोग पर जोर देती है ताकि इमेज सामग्री को परिप्रेक्ष्य की सटीकता बनाए रखते हुए संशोधित किया जा सके। छात्रों से अपेक्षा की जाती है कि वे अपनी लैब सबमिशन के हिस्से के रूप में मूल छवि, रिप्लेसमेंट टेक्सचर वाली छवि, संयुक्त छवि, और उनका Python प्रोग्राम जमा करें।

लैब 6

लैब 6 छात्रों को छवि में पाँच विपरीत एकाग्र concentric circles (CCCs) से बने टार्गेट का पता लगाने और उसकी पोज़ का गणना करने का निर्देश देती है। कार्य में OpenCV का उपयोग करके CCC टार्गेट का पता लगाना, उन्हें सही क्रम में व्यवस्थित करना, OpenCV की solvePnP() फ़ंक्शन का उपयोग करके पोज़ की गणना करना, और छवि पर निर्देशांक अक्ष और पोज़ ड्रॉ करना शामिल है। यह लैब टार्गेट डिटेक्शन, पोज़ एस्टिमेशन, और विज़ुअल आउटपुट फॉर्मैटिंग जैसी अवधारणाओं के अनुप्रयोग पर जोर देती है।

लैब 7

लैब 7 इमेजेस के बीच SIFT फीचर्स का डिटेक्शन और मैचिंग करने के इर्द-गिर्द केंद्रित है। उद्देश्य एक इमेज से दूसरी इमेज में SIFT फीचर्स के सही मैचों की पहचान करना और इन मैचों की सटीकता का विश्लेषण करना है। लैब में दिए गए Python कोड और डेटासेट की इमेजेस का उपयोग करके, मैच डिटेक्शन को ऑप्टिमाइज़ करने के लिए एल्गोरिथ्म पैरामीटर समायोजित करने, और फीचर मैचिंग प्रक्रिया का प्रदर्शन मापने के लिए प्रिसिशन और रिकॉल मेट्रिक्स की गणना करना शामिल है। छात्रों को अपना Python प्रोग्राम और विभिन्न पैरामीटर सेटिंग्स के लिए गणना की गई प्रिसिशन और रिकॉल मान जमा करने होंगे।

लैब 8

लैब 8 में फ़ीचर मैचिंग और affine transformation फिटिंग का उपयोग करके ऑब्जेक्ट डिटेक्शन और ट्रेनिंग इमेज से क्वेरी इमेज पर ऑब्जेक्ट ओवरले करना शामिल है। लैब में विभिन्न परिदृश्यों में ऑब्जेक्ट का पता लगाना, फॉल्स पॉजिटिव्स कम करने के लिए इनलायर मैचेस थ्रेशोल्ड की संख्या समायोजित करना, और ऑब्जेक्ट डिटेक्शन सिस्टम के प्रदर्शन का मूल्यांकन करने के लिए प्रिसिशन, रिकॉल, और एक्यूरेसी मेट्रिक्स की गणना करना शामिल है। छात्रों को प्रदान किए गए Python कोड को संशोधित और चलाने, विभिन्न परिस्थितियों के अंतर्गत सिस्टम के प्रदर्शन का विश्लेषण करने, और अपने निष्कर्ष एवं संशोधित कोड जमा करने की अपेक्षा है।

लैब 9

लैब 9 में ट्रेनिंग इमेज में किसी ऑब्जेक्ट पर एनोटेशन पॉइंट्स रखना और उन पॉइंट्स को स्वतः ही क्वेरी इमेजेस पर सही ढंग से दिखाना शामिल है। यह लैब फीचर एक्सट्रैक्शन, अस्पष्ट मैचों को हटाने के लिए रेशियो टेस्ट का उपयोग कर मैचिंग, आउट्लायर्स को हटाने के लिए RANSAC का उपयोग करके 2D affine transformation फिट करना, और ट्रेनिंग से क्वेरी इमेज में एनोटेशन पॉइंट्स को मैप करने हेतु उस ट्रांसफॉर्मेशन को लागू करने पर जोर देती है। महत्वपूर्ण कार्य इनलायर मैचेस की थ्रेशोल्ड संख्या को समायोजित करना है ताकि फॉल्स पॉजिटिव और नेगेटिव के बीच संतुलन बनाया जा सके, और छवियों को सही तरीके से क्लासिफाई करने में सर्वोच्च एक्यूरेसी प्राप्त की जा सके।

लैब 10

लैब 10 लाइन सेगमेंट्स खोजने और छवि के भीतर समानांतर लाइनों के सेट की पहचान करने के लिए Hough transform का उपयोग समर्पित है। यह OpenCV के cv2.HoughLinesP() फ़ंक्शन के माध्यम से probabilistic Hough Transform का उपयोग करके एंडपॉइंट्स द्वारा प्रतिनिधित्व किए गए लाइन सेगमेंट्स का पता लगाता है। लैब में इन लाइन सेगमेंट्स के दिशा वेक्टरों का विश्लेषण करके वेनिशिंग पॉइंट्स की पहचान करना भी शामिल है, जिसका उद्देश्य 3D स्पेस में समानांतर लाइनों की ओरिएंटेशन को समझना है क्योंकि वे 2D इमेज प्लेन में दिखाई देती हैं। छात्रों को समानांतर लाइन सेगमेंट्स खोजने के लिए टेस्ट इमेजेस को प्रोसेस करने, डिटेक्शन को ऑप्टिमाइज़ करने के लिए पैरामीटर के साथ प्रयोग करने, और अपने परिणामों के साथ एक Python प्रोग्राम जमा करने का कार्य दिया गया है।

नोट्स

  • इन स्क्रिप्ट्स/लैब्स को चलाने के लिए आपको निम्न 3rd party python पैकेज की आवश्यकता होगी: cv2 & numpy.
  • इनमें से कुछ लैब्स के लिए आपको cv2 का एक विशिष्ट संस्करण उपयोग करना पड़ सकता है। दुख की बात है कि आवश्यकताएँ दस्तावेजीकृत नहीं थीं, इसलिए आपको यह स्वयं पता लगाना होगा। यदि आप इसे पता लगा लेते हैं या आप फंस जाते हैं, तो कृपया इसे इश्यूज़ फ़ॉर्म पर रिपोर्ट करें।