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

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

এখানে আমরা শিখব কিভাবে OpenCV-এ চোখ সনাক্ত করা যায়। আমরা 'C:/opencv/sources/data/haarcascades' এ অবস্থিত haarcascade_eye.xml ক্লাসিফায়ার ব্যবহার করব চোখ সনাক্ত করতে। চোখ সনাক্ত করতে নিচের হেডারগুলো যোগ করতে হবে।

প্রথম হেডার হলো <iostream>, যা C++ প্রোগ্রামিং ভাষার হেডার। ছবি পড়া-লিখা এবং ইউজার ইন্টারফেস ফাংশনালিটি 'highgui' হেডারে সংজ্ঞায়িত। ছবির গুণগত মান বেড়ানোর জন্য 'imgproc' হেডার এবং চেহারা ও চোখ সনাক্ত করতে 'objdetect' হেডার যোগ করতে হবে।

OpenCV-এ চোখ সনাক্ত ও ট্র্যাক করার প্রোগ্রাম

#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() {
    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); // ভিডিও সোর্স থেকে ফ্রেম লোড
        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 হিসেবে নেওয়া
            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); // দুটি চোখের চারদিকে বৃত্ত আঁকা
            }
        }
        imshow("Detect", frame); // 'Detect' উইন্ডোতে ফলাফল দেখানো
        if (waitKey(30) == 27) { // প্রতিটি ফ্রেমের জন্য ৩০ মিলিসেকেন্ড অপেক্ষা
            break;
        }
    }
    return 0;
}

আউটপুট

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

  1. OpenCV-এ C++ ব্যবহার করে নির্দিষ্ট পিক্সেলের মান পাওয়ার পদ্ধতি

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

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

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