কম্পিউটার টিউটোরিয়াল

OpenCV-এ C++ ব্যবহার করে চোখ ট্র্যাক করা

এখানে আমরা শিখব কিভাবে OpenCV-এ চোখ ট্র্যাক করা যায়। চোখ সনাক্ত করার পর ট্র্যাকিং একটি সহজ এবং সরল কাজ। আমরা সনাক্ত চোখগুলোকে ঘেরতে বৃত্ত ব্যবহার করেছি। বৃত্তের কেন্দ্র ট্র্যাক করা মানে চোখের কেন্দ্র ট্র্যাক করা। বৃত্তের কেন্দ্র ট্র্যাক করতে দুটি পূর্ণসংখ্যা ভেরিয়েবল দরকার। এটি মেইন() ফাংশনের প্রথম দুটি লাইনে (৯ম এবং ১০ম লাইন) করা হয়েছে। পূর্ণসংখ্যা ভেরিয়েবল দুটির নাম 'x_axis' এবং 'y_axis'।

৪২ এবং ৪৩ নম্বর লাইনে, কেন্দ্রের আড়াঘাত এবং লম্বাঘাত মান 'x_axis' এবং 'y_axis' ভেরিয়েবলে কপি করা হয়েছে এবং এগুলো বৃত্তের কেন্দ্র ধারণ করে। ৪৪ নম্বর লাইনে, 'cout' স্টেটমেন্ট ব্যবহার করে কেন্দ্রের মান দেখানো হয়েছে। এভাবে আমরা চোখের অবস্থান ট্র্যাক করতে পারি।

OpenCV-এ C++ ব্যবহার করে চোখের অবস্থান ট্র্যাক করার কোড

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/objdetect/objdetect.hpp>
using namespace cv;
using namespace std;

int main() {
    int x_axis; // চোখের কো-অর্ডিনেট সংরক্ষণের জন্য পূর্ণসংখ্যা ভেরিয়েবল ঘোষণা
    int y_axis; // চোখের কো-অর্ডিনেট সংরক্ষণের জন্য পূর্ণসংখ্যা ভেরিয়েবল ঘোষণা
    Mat frame; // ভিডিও ফ্রেম ধারণ করার জন্য ম্যাট্রিক্স ঘোষণা
    namedWindow("Detect"); // কাজ দেখানোর জন্য উইন্ডো ঘোষণা
    VideoCapture image(0); // ডিফল্ট ক্যামেরা থেকে ভিডিও ক্যাপচার
    if (!image.isOpened()) { // ভিডিও সোর্স না পাওয়া গেলে এরর মেসেজ
        cout << "Couldn't load video from the source. Make sure your camera is working properly." << endl;
        system("pause");
        return 0;
    }
    double height = image.set(CAP_PROP_FRAME_HEIGHT, 480); // প্রতিটি ফ্রেমের উচ্চতা সেট
    double width = image.set(CAP_PROP_FRAME_WIDTH, 640); // প্রতিটি ফ্রেমের প্রস্থ সেট
    CascadeClassifier face_cascade, eyes_cascade; // ক্যাসকেড ক্লাসিফায়ার অবজেক্ট ঘোষণা
    face_cascade.load("C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml"); // ক্যাসকেড ক্লাসিফায়ার লোড
    eyes_cascade.load("C:/opencv/sources/data/haarcascades/haarcascade_eye.xml");
    while (true) {
        bool temp = image.read(frame); // ভিডিও সোর্স থেকে ফ্রেম লোড
        std::vector<Rect> faces; // চেহারার জন্য ভেক্টর ঘোষণা
        face_cascade.detectMultiScale(frame, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(100, 100)); // চেহারা সনাক্তকরণ
        for (int i = 0; i < faces.size(); i++) { // চেহারা লোকেট করার জন্য
            Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5); // চেহারার কেন্দ্র
            ellipse(frame, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8, 0); // চেহারার ওপর এলিপ্স আঁকা
            Mat faceROI = frame(faces[i]); // চোখ সনাক্ত করার জন্য চেহারার এলাকা ROI হিসেবে নেওয়া
            std::vector<Rect> eyes; // চোখের জন্য ভেক্টর ঘোষণা
            eyes_cascade.detectMultiScale(faceROI, eyes, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(5, 5)); // প্রতিটি চেহারাতেই চোখ সনাক্তকরণ
            for (size_t j = 0; j < eyes.size(); j++) { // চোখ লোকেট করার জন্য
                Point center(faces[i].x + eyes[j].x + eyes[j].width * 0.5, faces[i].y + eyes[j].y + eyes[j].height * 0.5); // দুটি চোখের কেন্দ্র
                int radius = cvRound((eyes[j].width + eyes[j].height) * 0.25); // চোখ ঘেরাবতী বৃত্তের ত্রিজ্যা
                circle(frame, center, radius, Scalar(255, 0, 0), 4, 8, 0); // দুটি চোখের চারদিকে বৃত্ত আঁকা
                x_axis = eyes[j].x; // চোখের x-অক্ষ অবস্থান সংরক্ষণ
                y_axis = eyes[j].y; // চোখের y-অক্ষ অবস্থান সংরক্ষণ
                cout << "Position of the eyes is: " << "(" << x_axis << "," << y_axis << ")" << endl; // কো-অর্ডিনেট মান দেখানো
            }
        }
        imshow("Detect", frame); // 'Detect' উইন্ডোতে ফলাফল দেখানো
        if (waitKey(30) == 27) { // প্রতিটি ফ্রেমের জন্য ৩০ মিলিসেকেন্ড অপেক্ষা
            break;
        }
    }
    return 0;
}

আউটপুট

OpenCV-এ C++ ব্যবহার করে চোখ ট্র্যাক করা

OpenCV-এ C++ ব্যবহার করে চোখ ট্র্যাক করা

  1. OpenCV-এ C++ ব্যবহার করে উপবৃত্ত আঁকা

  2. OpenCV-এ C++ ব্যবহার করে বৃত্ত আঁকা

  3. OpenCV-এ C++ ব্যবহার করে রেখা আঁকা

  4. OpenCV-এ C++ ব্যবহার করে ইমেজের চ্যানেল সংখ্যা গণনা করা