Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

OpenCV में C++ का उपयोग करके स्थिर चित्र में चेहरे का पता लगाएं


हम छवि से चेहरों का पता लगाते हैं। चेहरे का पता लगाने के लिए, हमने 'detectMultiScale()' फंक्शन का उपयोग किया।

इस फंक्शन का वास्तविक प्रारूप है -

सिंटैक्स

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

फंक्शन के तर्कों को बदलकर, हम 'detect.MultiSpace()' फंक्शन को नियंत्रित कर सकते हैं। यह फंक्शन निम्नलिखित तर्क लेता है।

स्रोत मैट्रिक्स

यह वह मैट्रिक्स है जहां चेहरे का पता लगाया जाएगा। इस मामले में, यह वह मैट्रिक्स होगी जो वीडियो फ्रेम रख रही है।

वेक्टर

'detect.MultiScale()' फंक्शन आयताकार प्रकार का एक वेक्टर होगा। एक आयत OpenCV में एक वेक्टर है, और हमें इसे वेक्टर के रूप में परिभाषित करना होगा।

searchScaleFactor

खोज स्केल फैक्टर निर्धारित करता है कि फंक्शन कितने अलग-अलग आकार के चेहरों को खोजेगा। हम आमतौर पर 1.1 का उपयोग करते हैं। यदि आवश्यक हो, तो हम पहचान प्रणाली को तेज बनाने के लिए 1.2 का उपयोग कर सकते हैं। हालांकि, इस मामले में, चेहरे का पता उतनी बार नहीं लगाया जाता जितना 1.1 का उपयोग करने पर होता है।

minNeighbours

यह पैरामीटर डिटेक्टर के आत्मविश्वास स्तर का पता लगाता है। इसका मतलब है कि यह फंक्शन दिखाता है कि डिटेक्टर को कितना विश्वास है कि उसने एक चेहरे का पता लगाया है। बेहतर विश्वसनीयता के लिए, हम एक उच्च संख्या का उपयोग कर सकते हैं, लेकिन यह प्रक्रिया को धीमा कर देगा। तेज प्रक्रिया लेकिन कम विश्वसनीयता के लिए, हम छोटी संख्या का उपयोग कर सकते हैं। हम आमतौर पर minNeighbours के रूप में 3 या 4 का उपयोग करते हैं।

फ्लैग्स

डिफ़ॉल्ट रूप से, फंक्शन सभी चेहरों को खोजेगा। यदि हम फ्लैग के मान के रूप में 'CASCADE_FIND_BIGGEST_OBJECT' का उपयोग करते हैं, तो यह केवल सबसे बड़े चेहरे को खोजेगा। इस मामले में, सिस्टम तेजी से प्रदर्शन करता है। 'CASCADE_SCALE_IMAGE' का उपयोग करके, हम कई चेहरों की खोज कर सकते हैं।

minFeatureSize

minFeatureSize चेहरे के न्यूनतम आकार को निर्धारित करता है। यदि हम कैमरे से दूर स्थित चेहरों का पता लगाना चाहते हैं, तो हमें छोटे मान का उपयोग करना चाहिए। यदि चेहरे कैमरे के करीब हैं, तो हमें बड़े मान का उपयोग करना चाहिए। हम सामान्य दूरी के लिए (20 x 20) या (30 x 30) आकार का उपयोग करते हैं। उदाहरण में, हमने detectMultiScale() फंक्शन का उपयोग इस प्रकार किया है

faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_SCALE_IMAGE, Size(20, 20));//

OpenCV में स्थिर चित्र से मानव चेहरों का पता लगाने को दर्शाने वाला निम्नलिखित कोड।

उदाहरण

#include<iostream> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> //इस हेडर में 'rectangle()' फंक्शन की परिभाषा शामिल है// #include<opencv2/objdetect/objdetect.hpp> //इस हेडर में Cascade Classifier की परिभाषा शामिल है// #include<string> using namespace std; using namespace cv; int main(int argc, char** argv) {    Mat image_with_humanface;//मानव चेहरे वाली छवि लोड करने के लिए मैट्रिक्स घोषित करना//    image_with_humanface = imread("friends.jpg");//उसमें मानव चेहरा वाली छवि लोड करना//    namedWindow("Face Detection");//परिणाम दिखाने के लिए एक विंडो घोषित करना//    string trained_classifier_location = "C:/opencv/sources/data/haarcascades/haarcascade_frontalface_alt.xml";//एक स्ट्रिंग में हमारे XML प्रशिक्षित क्लासिफायर का स्थान परिभाषित करना//    CascadeClassifier faceDetector;//CascadeClassifier क्लास का 'face detector' नामक ऑब्जेक्ट घोषित करना//    faceDetector.load(trained_classifier_location);//ऑब्जेक्ट में XML प्रशिक्षित क्लासिफायर लोड करना//    vector<Rect>faces;//faces नामक आयताकार वेक्टर घोषित करना//    vector<Rect>boundary;//rectangle नामक आयताकार वेक्टर घोषित करना//    faceDetector.detectMultiScale(image_with_humanface, faces, 1.1, 4, CASCADE_SCALE_IMAGE, Size(20, 20));//'image_with_humanfaces' मैट्रिक्स में चेहरों का पता लगाना//    for (size_t i = 0; i < faces.size(); i++){ //चेहरे के चारों ओर आयत बनाने के लिए लूप//       Mat faceROI = image_with_humanface(faces[i]);//चेहरे को मैट्रिक्स में संग्रहीत करना//       int x = faces[i].x;//चेहरे के आयत के प्रारंभिक बिंदु की प्रारंभिक पंक्ति मान प्राप्त करना//       int y = faces[i].y;//चेहरे के आयत के प्रारंभिक बिंदु की प्रारंभिक कॉलम मान प्राप्त करना//       int h = y + faces[i].height;//आयत की ऊंचाई की गणना करना//       int w = x + faces[i].width;//आयत की चौड़ाई की गणना करना//       rectangle(image_with_humanface, Point(x, y), Point(w, h), Scalar(255, 0, 255), 2, 8, 0);//चेहरे के चारों ओर आयत बनाना//    }    imshow("Face Detection", image_with_humanface);//पता लगाए गए चेहरे को दिखाना//    waitKey(0);//प्रोग्राम समाप्त करने के लिए कीस्ट्रोक की प्रतीक्षा करना//    return 0; }

आउटपुट

OpenCV में C++ का उपयोग करके स्थिर चित्र में चेहरे का पता लगाएं


  1. OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं? OpenCV में C++ का उपयोग करके दीर्घवृत्त कैसे बनाएं?

    दीर्घवृत्त बनाने के लिए, हमें एक केंद्र, प्रमुख अक्ष और लघु अक्ष की आवश्यकता होती है। इसका मतलब है कि हमें दीर्घवृत्त के लिए तीन पैरामीटर चाहिए। हमें एक मैट्रिक्स चाहिए जहां हम दीर्घवृत्त बनाएंगे, और हमें लाइन की मोटाई और लाइन का रंग घोषित करना होगा। जब हम OpenCV का उपयोग करके दीर्घवृत्त बनाना चाहते

  1. OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं? OpenCV में C++ का उपयोग करके रेखा कैसे बनाएं?

    रेखा बनाने के लिए हमें दो बिंदुओं की आवश्यकता होती है - प्रारंभिक बिंदु और अंतिम बिंदु। हमें रेखा खींचने के लिए एक कैनवास की भी आवश्यकता होती है। OpenCV का उपयोग करके, मैट्रिक्स हमारा कैनवास है, हमें रेखा के प्रारंभिक और अंतिम बिंदुओं को परिभाषित करने की आवश्यकता होती है। हमें रेखा को एक रंग निर्दिष

  1. OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें? OpenCV में C++ का उपयोग करके इमेज के चैनलों की संख्या कैसे गिनें?

    इस विषय में, हम समझेंगे कि इमेज के चैनलों की संख्या कैसे पता करें। प्रोग्राम चलाने के बाद, चैनलों की संख्या कंसोल विंडो में दिखाई जाएगी। चैनलों की संख्या प्राप्त करने के लिए, हमने OpenCV की channels() नामक एक क्लास का उपयोग किया है। जब हम इमेज मैट्रिक्स को channels() क्लास के ऑब्जेक्ट के रूप में पास