কম্পিউটার

সি++ ব্যবহার করে ওপেনসিভিতে স্থির ছবিতে মুখটি কীভাবে সনাক্ত করবেন?


আমরা ছবি থেকে মুখ সনাক্ত. মুখ শনাক্ত করতে, আমরা 'detectMultiScale()' ফাংশন ব্যবহার করেছি।

এই ফাংশনের প্রকৃত বিন্যাস হল −

সিনট্যাক্স

detectMultiScale(source matrix, vector, searchScaleFactor, minNeighbours, flags, minfeatureSize)

ফাংশন আর্গুমেন্ট পরিবর্তন করে, আমরা 'detect.MultiSpace()' ফাংশন নিয়ন্ত্রণ করতে পারি। এই ফাংশনটি নিম্নলিখিত আর্গুমেন্ট নেয়।

উৎস ম্যাট্রিক্স

এটি ম্যাট্রিক্স যেখানে মুখ সনাক্ত করা হবে। এই ক্ষেত্রে, এটি হবে ম্যাট্রিক্স যা ভিডিও ফ্রেম রাখে।

ভেক্টর

'detect.MultiScale()' ফাংশনটি আয়তক্ষেত্রাকার ধরনের একটি ভেক্টর হবে। একটি আয়তক্ষেত্র হল OpenCV-এ একটি ভেক্টর, এবং আমাদের এটি একটি ভেক্টর হিসাবে সংজ্ঞায়িত করতে হবে৷

সার্চস্কেলফ্যাক্টর

অনুসন্ধান স্কেল ফ্যাক্টর নির্ধারণ করে যে ফাংশনটি কতগুলি বিভিন্ন আকারের মুখের সন্ধান করবে। আমরা সাধারণত 1.1 ব্যবহার করি। যদি প্রয়োজন হয়, আমরা সনাক্তকরণ ব্যবস্থাকে দ্রুততর করতে 1.2 ব্যবহার করতে পারি। যাইহোক, এই ক্ষেত্রে, মুখগুলি যত ঘন ঘন 1.1 ব্যবহার করা হয় ততবার সনাক্ত করা যায় না।

মিনিট নেবারস

এই পরামিতি সনাক্তকারীর আত্মবিশ্বাসের স্তর সনাক্ত করে। এর মানে এই ফাংশনটি দেখায় যে ডিটেক্টর কতটা আত্মবিশ্বাসী যে এটি একটি মুখ সনাক্ত করেছে। আরও ভাল নির্ভরযোগ্যতার জন্য, আমরা একটি উচ্চ সংখ্যা ব্যবহার করতে পারি, তবে এটি প্রক্রিয়াটিকে ধীর করে দেবে। একটি দ্রুত প্রক্রিয়া কিন্তু কম নির্ভরযোগ্যতার জন্য, আমরা ছোট সংখ্যা ব্যবহার করতে পারি। আমরা সাধারণত 3 বা 4টি ছোট প্রতিবেশী হিসাবে ব্যবহার করি।

পতাকা

ডিফল্টরূপে, ফাংশনটি সমস্ত মুখের সন্ধান করবে। যদি আমরা পতাকার মান হিসাবে 'CASCADE_FIND_BIGGEST_OBJECT' ব্যবহার করি, তাহলে এটি শুধুমাত্র সবচেয়ে বড় মুখের জন্যই দেখাবে৷ এই ক্ষেত্রে, সিস্টেম দ্রুত সঞ্চালন করে। 'CASCADE_SCALE_IMAGE' ব্যবহার করে, আমরা একাধিক মুখ অনুসন্ধান করতে পারি৷

মিনিট ফিচার সাইজ

minFeatureSize মুখের ন্যূনতম আকার নির্ধারণ করে। আমরা যদি ক্যামেরা থেকে দূরে অবস্থিত মুখগুলি সনাক্ত করতে চাই, তাহলে আমাদের ছোট মান ব্যবহার করা উচিত। মুখগুলি ক্যামেরার কাছাকাছি থাকলে, আমাদের আরও বড় মান ব্যবহার করা উচিত। আমরা সাধারণ দূরত্বের জন্য (20 x 20) বা (30 x 30) আকার ব্যবহার করি। উদাহরণে, আমরা detectMultiScale() ফাংশন

হিসেবে ব্যবহার করেছি
faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_SCALE_IMAGE, Size(20, 20));//

নিচের কোডটি দেখায় কিভাবে ওপেনসিভিতে একটি স্থির ছবি থেকে মানুষের মুখ শনাক্ত করা যায়।

উদাহরণ

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
//This header includes definition of 'rectangle()' function//
#include<opencv2/objdetect/objdetect.hpp>
//This header includes the definition of Cascade Classifier//
#include<string>
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
   Mat image_with_humanface;//Declaring a matrix to load image with human faces//
   image_with_humanface = imread("friends.jpg");//loading an image that contains human face in it//
   namedWindow("Face Detection");//Declaring a window to show the result//
   string trained_classifier_location = "C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml";//Defining the location our XML Trained Classifier in a string//
   CascadeClassifier faceDetector;//Declaring an object named 'face detector' of CascadeClassifier class//
   faceDetector.load(trained_classifier_location);//loading the XML trained classifier in the object//
   vector<Rect>faces;//Declaring a rectangular vector named faces//
   vector<Rect>boundary;//Declaring a rectangular vector named rectangle//
   faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_SCALE_IMAGE, Size(20, 20));//Detecting the faces in 'image_with_humanfaces' matrix//
   for (size_t i = 0; i < faces.size(); i++){ //Loop to draw rectangle around the faces//
      Mat faceROI = image_with_humanface(faces[i]);//Storing the face in a matrix//
      int x = faces[i].x;//Getting the initial row value of face rectangle's starting point//
      int y = faces[i].y;//Getting the initial column value of face rectangle's starting point//
      int h = y + faces[i].height;//Calculating the height of the rectangle//
      int w = x + faces[i].width;//Calculating the width of the rectangle//
      rectangle(image_with_humanface, Point(x, y), Point(w, h), Scalar(255, 0, 255), 2, 8, 0);//Drawing a rectangle using around the faces//
   }
   imshow("Face Detection", image_with_humanface);//Showing the detected face//
   waitKey(0);//To wait for keystroke to terminate the program//
   return 0;
}

আউটপুট

সি++ ব্যবহার করে ওপেনসিভিতে স্থির ছবিতে মুখটি কীভাবে সনাক্ত করবেন?


  1. সি++ ব্যবহার করে ওপেনসিভিতে একটি নির্দিষ্ট পিক্সেলের মান কীভাবে পাবেন?

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

  3. কিভাবে C++ ব্যবহার করে OpenCV-এ একটি লাইন আঁকবেন?

  4. C++ ব্যবহার করে ওপেনসিভিতে একটি ছবির চ্যানেলের সংখ্যা কীভাবে গণনা করা যায়?