কম্পিউটার ভিশন প্রকল্পসমূহ

প্রকল্পের GitHub রিপোজিটরি

সম্পর্কে

এই রেপোতে সব কোডিং প্রকল্প (ল্যাব) প্রদর্শিত হয়েছে যা Mehmet এবং Jean করেছিল যখন তারা CSCI437-এ ভর্তি ছিলেন শরৎ ২০২০ সেমিস্টারে Colorado School of Mines-এ, সময়কাল ২৮ আগস্ট, ২০২০ থেকে ১৪ ডিসেম্বর, ২০২০ পর্যন্ত। এই ল্যাবগুলো পাইথন, OpenCV, এবং মৌলিক কম্পিউটার ভিশন ধারণা শেখার জন্য একটি ব্যাপক প্ল্যাটফর্ম প্রদান করেছে।

ক্লাস সম্পর্কে

আমি কম্পিউটার ভিশন পরিচিতি (CSCI437) নিয়েছিলাম শরৎ ২০২০ সেমিস্টারে। এই সময়ে, ডঃ William Hoff এবং ডঃ 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).

স্বীকৃতি

কিছু পাইথন স্ক্রিপ্ট এবং/অথবা কোডের অংশ রয়েছে যা CSCI437 ক্লাস দ্বারা লেকচার চলাকালীন, স্লাইডে, অথবা Canvas-এ প্রদান করা হয়েছিল। CSCI437 ক্লাসটি Colorado School of Mines-এ প্রদান করা হয়। এই ল্যাবগুলো নিম্নলিখিত সহযোগীদের সাথে করা হয়েছিল:

  • Jean Duong
  • Mehmet Yilmaz

ল্যাব বর্ণনা

ল্যাব 1

ল্যাব 1 পাইথন দিয়ে OpenCV ব্যবহারের মৌলিক বিষয়গুলোর উপর ফোকাস করে। অংশগ্রহণকারীদের একটি পাইথন প্রোগ্রাম লিখতে বলা হয় যা একটি ভিডিও ফাইল পড়ে, ভিডিওর প্রতিটি ফ্রেমে একটি বর্গ গঠনের চারটি পয়েন্ট প্রজেক্ট করে, এবং প্রতিটি পয়েন্টের Z সমন্বয় ধীরে ধীরে পরিবর্তন করে বর্গটি দূরত্বে সরে যাওয়ার সিমুলেশন করে। অতিরিক্তভাবে, প্রতিটি ফ্রেমে ফ্রেম নম্বর প্রদর্শন করতে হবে এবং গ্রাফিক ওভারলে সহ চূড়ান্ত ভিডিও মূল্যায়নের জন্য আপলোড করতে হবে।

ল্যাব 2

ল্যাব 2 ইমেজ ট্রান্সফরমেশন নিয়ে, বিশেষভাবে “XYZ fixed angles” ধারার ব্যবহার করে X, Y, এবং Z অক্ষের চারপাশে ঘূর্ণনের উপর কেন্দ্রীভূত। শিক্ষার্থীদের রোটেশন ম্যাট্রিক্স গণনা করতে, ক্যামেরা অবস্থার জন্য হোমোজিনিয়াস ট্রান্সফরমেশন ম্যাট্রিক্স গঠন করতে, একটি ক্যালিব্রেশন ম্যাট্রিক্স তৈরি করতে, এবং OpenCV-এর line ফাংশন ব্যবহার করে একটি পরিচিত অবজেক্ট গঠন করার জন্য পয়েন্টগুলোকে ইমেজে প্রজেক্ট করতে বলা হয়। ল্যাবটি ক্যামেরা জ্যামিতি এবং ট্রান্সফরমেশন ম্যাট্রিক্সের ধারণা বোঝার উপর জোর দেয়।

ল্যাব 3

ল্যাব 3 টেমপ্লেট ম্যাচিং সম্পর্কে, যেখানে শিক্ষার্থীরা নরমালাইজড ক্রস করেলেশন ব্যবহার করে একটি চলচ্চিত্র ফাইলের প্রতিটি ফ্রেমে একটি টেমপ্লেট সাব-ইমেজ ট্র্যাক করতে হবে। অ্যাসাইনমেন্টটিতে ব্যবহারকারীকে চলচ্চিত্রের প্রথম ইমেজ থেকে একটি টেমপ্লেট বাছাই করতে দেয়া হয়, এরপর এই টেমপ্লেটটিকে পরবর্তী ইমেজগুলোতে ট্র্যাক করে প্রতিটি ইমেজে টেমপ্লেটের অবস্থান নির্দেশ করতে আয়তক্ষেত্র আঁকা করতে হয়, এবং এই অবস্থানগুলো দেখানোর জন্য একটি আউটপুট মুভি ফাইল তৈরি করতে হয়। শিক্ষার্থীদের বিভিন্ন টেমপ্লেট নিয়ে পরীক্ষা-নিরীক্ষা করে কোনটি সেরা ট্র্যাকিং দেয় এবং কেন, সেই সম্পর্কে আলোচনা করতে উৎসাহিত করা হয় এবং সঠিকভাবে ম্যাচ মিলেছে এমন ক্ষেত্রে পর্যবেক্ষিত করেলেশন স্কোরগুলো নিয়ে আলোচনা করতে বলা হয়।

ল্যাব 4

ল্যাব 4 HSV কালার স্পেস ব্যবহার করে রঙ বিভাজনের উপর কেন্দ্রীভূত, যা লেকচারে আলোচিত একটি প্রযুক্তি এবং রঙীন ইমেজগুলো হ্যান্ডল করার ক্ষেত্রে কার্যকর। শিক্ষার্থীদের প্রদত্ত ইমেজগুলো থেকে স্টপ সাইন পিক্সেলগুলো সেগমেন্ট করার জন্য থ্রেশহোল্ড অপারেশন প্রয়োগ করতে হবে, একটি পাইথন/OpenCV প্রোগ্রামের মাধ্যমে। অ্যাসাইনমেন্টে সর্বোত্তমভাবে স্টপ সাইন পিক্সেল সনাক্ত করতে উপযুক্ত থ্রেশহোল্ড মান খুঁজে বের করা, ফলাফল পরিষ্কার করতে মর্ফোলজিক্যাল অপারেশন করা, এবং সেগমেন্ট করা ইমেজগুলো সহ পাইথন প্রোগ্রাম ও ব্যবহৃত থ্রেশহোল্ড এবং মর্ফোলজিক্যাল অপারেশন প্যারামিটার জমা দিতে বলা হয়েছে।

ল্যাব 5

ল্যাব 5-এ একটি বিদ্যমান চিত্রের নির্দিষ্ট এলাকায় একটি নতুন ইমেজ টেক্সচার সন্নিবেশ করার কাজ রয়েছে যাতে প্রজেকশনটি সঠিকভাবে দেখা যায়। এই প্রক্রিয়াটিকে প্লেন রিপ্লেসমেন্ট বলা হয়, এবং এটি করার জন্য শিক্ষার্থীদের প্রজেকটিভ ট্রান্সফর্ম (হোমোগ্রাফি) কৌশল ব্যবহার করে একটি নতুন ইমেজকে বিদ্যমান ইমেজের প্ল্যানার এলাকায় ম্যাপ করতে হয়। ল্যাবটি হোমোগ্রাফির ব্যবহারিক প্রয়োগের উপর জোর দেয় যাতে ইমেজ কনটেন্ট পরিবর্তন করে ভিউ-পয়েন্ট অনুযায়ী সঠিকতা বজায় রাখা যায়। শিক্ষার্থীদের মূল ইমেজ, রিপ্লেসমেন্ট টেক্সচারসহ ইমেজ, সংযুক্ত চিত্র এবং তাদের পাইথন প্রোগ্রাম জমা দিতে বলা হয়।

ল্যাব 6

ল্যাব 6-এ শিক্ষার্থীদের একটি ইমেজে পাঁচটি প্রতিদ্বন্দ্বী সমকেন্দ্রিক বৃত্ত (CCCs) নিয়ে গঠিত টার্গেট সনাক্ত করতে এবং এর পোস (pose) গণনা করতে বলা হয়। কাজটিতে OpenCV ব্যবহার করে CCC টার্গেট সনাক্ত করা, সেগুলোকে সঠিকভাবে অর্ডার করা, OpenCV-এর solvePnP() ফাংশন দিয়ে পোস গণনা করা, এবং ইমেজে কোঅরডিনেট অ্যাক্সিস ও পোস আঁকা অন্তর্ভুক্ত। ল্যাবটি টার্গেট সনাক্তকরণ, পোস এস্টিমেশন, এবং ভিজ্যুয়াল আউটপুট ফরম্যাটিংয়ের মত ধারণাগুলোর ব্যবহারিক প্রয়োগকে গুরুত্ব দেয়।

ল্যাব 7

ল্যাব 7 বিভিন্ন ইমেজের মধ্যে SIFT বৈশিষ্ট্য সনাক্তকরণ এবং ম্যাচিং নিয়ে কেন্দ্রীভূত। উদ্দেশ্য হল একটি ইমেজ থেকে আরেকটি ইমেজে SIFT বৈশিষ্ট্যের সঠিক মিলগুলো শনাক্ত করা এবং এই ম্যাচগুলোর নির্ভুলতা বিশ্লেষণ করা। ল্যাবটি প্রদত্ত পাইথন কোড এবং ডেটাসেটের ইমেজগুলো ব্যবহার করে অ্যালগরিদম প্যারামিটার সমন্বয় করে ম্যাচ সনাক্তকরণ অপ্টিমাইজ করার এবং পারফরম্যান্স মূল্যায়নের জন্য প্রেসিশন ও রিকল মেট্রিক্স গণনা করার কাজ অন্তর্ভুক্ত করে। শিক্ষার্থীদের তাদের পাইথন প্রোগ্রাম এবং বিভিন্ন প্যারামিটার সেটিংয়ের জন্য গণনা করা প্রেসিশন ও রিকল মান জমা দিতে বলা হয়েছে।

ল্যাব 8

ল্যাব 8 ট্রেনিং ইমেজ থেকে অবজেক্ট ডিটেকশন করার জন্য ফিচার ম্যাচিং এবং অ্যাফাইন ট্রান্সফরম ফিটিং ব্যবহার করে অবজেক্ট সনাক্তকরণ ও ওভারলে করার উপর কেন্দ্রিত। ল্যাবটিতে বিভিন্ন দৃশ্যে অবজেক্ট সনাক্ত করা, মিথ্যা পজিটিভ কমাতে ইনলার ম্যাচের থ্রেশহোল্ড পরিবর্তন করা, এবং অবজেক্ট ডিটেকশন সিস্টেমের পারফরম্যান্স মূল্যায়নের জন্য প্রেসিশন, রিকল, এবং অ্যাকিউরেসি মেট্রিক্স গণনা করা অন্তর্ভুক্ত। শিক্ষার্থীদের প্রদত্ত পাইথন কোড পরিবর্তন করে চালাতে, বিভিন্ন শর্তে সিস্টেমের পারফরম্যান্স বিশ্লেষণ করতে, এবং তাদের ফলাফল ও পরিবর্তিত কোড জমা দিতে বলা হয়।

ল্যাব 9

ল্যাব 9-এ একটি ট্রেনিং ইমেজের অবজেক্টে অ্যানোটেশন পয়েন্টগুলো স্থাপন করে এবং পরবর্তীতে কোয়েরি ইমেজগুলোতে সেই পয়েন্টগুলো স্বয়ংক্রিয়ভাবে সঠিকভাবে দেখাতে হয়। এই ল্যাবটি ফিচার এক্সট্রাকশন, রেশিও টেস্ট ব্যবহার করে অস্পষ্ট ম্যাচগুলো বাদ দেওয়া, RANSAC ব্যবহার করে আউটলার বাদ দিতে 2D অ্যাফাইন ট্রান্সফরম ফিট করা, এবং ট্রেনিং থেকে কোয়েরি ইমেজে অ্যানোটেশন পয়েন্ট ম্যাপ করার জন্য ট্রান্সফরম প্রয়োগ করার উপর জোর দেয়। সমালোচনামূলক কাজ হল ইনলার ম্যাচের থ্রেশহোল্ড সংখ্যা সমন্বয় করে মিথ্যা পজিটিভ এবং মিথ্যা নেগেটিভের মধ্যে সামঞ্জস্য করা, যাতে ইমেজগুলো সঠিকভাবে শ্রেণিবিভাজন করার সর্বোচ্চ অ্যাকিউরেসি অর্জন করা যায়।

ল্যাব 10

ল্যাব 10 লাইনের সেগমেন্ট খুঁজে বের করতে এবং একটি ইমেজের মধ্যে সমান্তরাল লাইনের সেট শনাক্ত করতে Hough ট্রান্সফরম ব্যবহার করার কাজকে নিবেদিত। এটি OpenCV-এর cv2.HoughLinesP() ফাংশনের মাধ্যমে প্রোবাবিলিস্টিক Hough Transform ব্যবহার করে লাইনের সেগমেন্টগুলো সনাক্ত করে যা তাদের এন্ডপয়েন্ট দ্বারা উপস্থাপিত হয়। ল্যাবটিতে এই লাইনের সেগমেন্টগুলোর দিক ভেক্টর বিশ্লেষণ করে ভ্যানিশিং পয়েন্টগুলো সনাক্ত করাও অন্তর্ভুক্ত, যার উদ্দেশ্য হল 2D ইমেজ প্লেনে প্রদর্শিত হওয়ার সময় 3D স্পেসে সমান্তরাল লাইনের অভিসার বোঝা। শিক্ষার্থীদের টেস্ট ইমেজগুলো প্রসেস করে সমান্তরাল লাইনের সেগমেন্ট খুঁজে বের করতে, ডিটেকশন অপ্টিমাইজ করার জন্য প্যারামিটার নিয়ে পরীক্ষা-নিরীক্ষা করতে, এবং তাদের ফলাফল ও একটি পাইথন প্রোগ্রাম জমা দিতে বলা হয়।

নোট

  • এই স্ক্রিপ্ট/ল্যাবগুলো চালাতে আপনার কাছে নিম্নলিখিত ৩য় পক্ষের পাইথন প্যাকেজগুলো থাকা প্রয়োজন: cv2 & numpy.
  • কিছু ল্যাবগুলোতে আপনাকে cv2-এর একটি নির্দিষ্ট ভার্সন ব্যবহার করতে হতে পারে। দুর্ভাগ্যবশত, প্রয়োজনীয়তাগুলো ডকুমেন্ট করা হয়নি, তাই আপনাকে নিজে এটি herausfinden করতে হবে। যদি আপনি এটি herausfinden করেন বা আপনি আটকে পড়েন, অনুগ্রহ করে এটি ইস্যু ফর্ম-এ রিপোর্ট করুন।