विषयसूची:

चेहरा पहचान+पहचान: 8 कदम (चित्रों के साथ)
चेहरा पहचान+पहचान: 8 कदम (चित्रों के साथ)

वीडियो: चेहरा पहचान+पहचान: 8 कदम (चित्रों के साथ)

वीडियो: चेहरा पहचान+पहचान: 8 कदम (चित्रों के साथ)
वीडियो: How To: Draw Face | Easy Beginner Proportion Tutorial 2024, जुलाई
Anonim
Image
Image
चेहरा पहचान+पहचान
चेहरा पहचान+पहचान

यह कैमरे से ओपनसीवी के साथ फेस डिटेक्शन और रिकग्निशन चलाने का एक सरल उदाहरण है। नोट: मैंने इस परियोजना को सेंसर प्रतियोगिता के लिए बनाया है और मैंने कैमरे का उपयोग सेंसर के रूप में ट्रैक और पहचान के लिए किया है। इसलिए, इस सत्र में हमारा लक्ष्य, 1. एनाकोंडा स्थापित करें 2. ओपन सीवी पैकेज डाउनलोड करें 3. पर्यावरण चर सेट करें 4. पुष्टि करने के लिए परीक्षण करें। चेहरे की पहचान के लिए कोड बनाएं 6. डेटा सेट बनाने के लिए कोड बनाएं 7. पहचानकर्ता को प्रशिक्षित करने के लिए कोड बनाएं 8. चेहरे और परिणाम को पहचानने के लिए कोड बनाएं।

चरण 1: एनाकोंडा स्थापित करें

एनाकोंडा स्थापित करें
एनाकोंडा स्थापित करें

एनाकोंडा अनिवार्य रूप से एक अच्छी तरह से पैक किया गया पायथन आईडीई है जिसे कई उपयोगी पैकेजों के साथ भेजा जाता है, जैसे कि न्यूमपी, पांडा, आईपीथॉन नोटबुक, आदि। ऐसा लगता है कि वैज्ञानिक समुदाय में हर जगह इसकी सिफारिश की जाती है। इसे स्थापित करने के लिए एनाकोंडा देखें।

चरण 2: ओपन सीवी पैकेज डाउनलोड करें

ओपन सीवी पैकेज डाउनलोड करें
ओपन सीवी पैकेज डाउनलोड करें

सबसे पहले, पूरा ओपनसीवी पैकेज डाउनलोड करने के लिए आधिकारिक ओपनसीवी साइट पर जाएं। एक संस्करण चुनें जिसे आप पसंद करते हैं (2.x या 3.x)। मैं पायथन 2.x और ओपनसीवी 2.x पर हूं - मुख्यतः क्योंकि ओपनसीवी-पायथन ट्यूटोरियल इस तरह से सेटअप/आधारित हैं।

मेरे मामले में, मैंने सीधे अपने एफ ड्राइव पर पैकेज (अनिवार्य रूप से एक फ़ोल्डर) निकाला है। (एफ:\ओपनसीवी)।

चरण 3: पर्यावरण चर सेट करें

पर्यावरण चर सेट करें
पर्यावरण चर सेट करें

cv2.pyd फ़ाइल को कॉपी और पेस्ट करें

एनाकोंडा साइट-पैकेज निर्देशिका (जैसे F:\Program Files\Anaconda2\Lib\site-packages मेरे मामले में) में पायथन पैकेज शामिल हैं जिन्हें आप आयात कर सकते हैं। हमारा लक्ष्य cv2.pyd फ़ाइल को इस निर्देशिका में कॉपी और पेस्ट करना है (ताकि हम अपने पायथन कोड में आयात cv2 का उपयोग कर सकें।)

ऐसा करने के लिए, cv2.pyd फ़ाइल की प्रतिलिपि बनाएँ…

इस ओपनसीवी निर्देशिका से (शुरुआती भाग आपकी मशीन पर थोड़ा अलग हो सकता है):

# पायथन 2.7 और 64-बिट मशीन: F:\opencv\build\python\2.7\x64# पायथन 2.7 और 32-बिट मशीन: F:\opencv\build\python\2.7\x84

इस एनाकोंडा निर्देशिका के लिए (शुरुआती भाग आपकी मशीन पर थोड़ा अलग हो सकता है):

F:\Program Files\Anaconda2\Lib\site-packages

इस चरण को करने के बाद अब हम पायथन कोड में आयात cv2 का उपयोग करने में सक्षम होंगे। लेकिन, हमें अभी भी FFMPEG (वीडियो कोडेक) को काम करने के लिए थोड़ा और काम करने की जरूरत है (हमें वीडियो संसाधित करने जैसी चीजों को करने में सक्षम बनाने के लिए।)

"मेरा कंप्यूटर" (या विंडोज 8.1 पर "यह पीसी") पर राइट-क्लिक करें -> गुणों पर बायाँ-क्लिक करें -> "उन्नत" टैब पर बायाँ-क्लिक करें -> "पर्यावरण चर …" बटन पर बायाँ-क्लिक करें। एक नया उपयोगकर्ता चर जोड़ें ओपनसीवी को इंगित करने के लिए (या तो 32-बिट सिस्टम के लिए x86 या 64-बिट सिस्टम के लिए x64।) मैं वर्तमान में 64-बिट मशीन पर हूं।

32-बिटOPENCV_DIRC:\opencv\बिल्ड\x86\vc12

64-बिटOPENCV_DIRC:\opencv\बिल्ड\x64\vc12

%OPENCV_DIR%\bin को उपयोगकर्ता चर पथ में जोड़ें।

उदाहरण के लिए, मेरा पथ उपयोगकर्ता चर इस तरह दिखता है …

पहले:

एफ: / उपयोगकर्ता / जॉनी / एनाकोंडा; सी: / उपयोगकर्ता / जॉनी / एनाकोंडा / स्क्रिप्ट

बाद में:

एफ: / उपयोगकर्ता / जॉनी / एनाकोंडा; सी: / उपयोगकर्ता / जॉनी / एनाकोंडा / स्क्रिप्ट;% OPENCV_DIR% / बिन

यह हम कर रहे हैं! FFMPEG उपयोग के लिए तैयार है!

चरण 4: पुष्टि करने के लिए परीक्षण करें

पुष्टि करने के लिए परीक्षण करें
पुष्टि करने के लिए परीक्षण करें
पुष्टि करने के लिए परीक्षण करें
पुष्टि करने के लिए परीक्षण करें

हमें यह परीक्षण करने की आवश्यकता है कि क्या अब हम एनाकोंडा (स्पाइडर आईडीई के माध्यम से) में ऐसा कर सकते हैं:

  • ओपनसीवी पैकेज आयात करें
  • FFMPEG उपयोगिता का उपयोग करें (वीडियो पढ़ने/लिखने/प्रोसेस करने के लिए)

टेस्ट 1: क्या हम ओपनसीवी आयात कर सकते हैं?

यह पुष्टि करने के लिए कि एनाकोंडा अब OpenCV-Python पैकेज (अर्थात् cv2) आयात करने में सक्षम है, इन्हें IPython कंसोल में जारी करें:

आयात cv2

प्रिंट cv2._संस्करण_

यदि पैकेज cv2 को बिना किसी त्रुटि के आयात किया गया है, और cv2 संस्करण का प्रिंट आउट लिया गया है, तो हम सभी अच्छे हैं!

टेस्ट 2: क्या हम FFMPEG कोडेक का उपयोग कर सकते हैं?

एक नमूना रखें

इनपुट_वीडियो.mp4

निर्देशिका में वीडियो फ़ाइल। हम परीक्षण करना चाहते हैं कि क्या हम कर सकते हैं:

  • इस.mp4 वीडियो फ़ाइल को पढ़ें, और
  • एक नई वीडियो फ़ाइल लिखें (.avi या.mp4 आदि हो सकती हैं)

ऐसा करने के लिए हमारे पास एक परीक्षण पायथन कोड होना चाहिए, इसे test.py कहते हैं। इसे उसी निर्देशिका में रखें जिसमें नमूना है

इनपुट_वीडियो.mp4

फ़ाइल।

यह क्या है

test.py

ऐसा लग सकता है (नोट: टिप्पणी क्षेत्र में पीट और वारेन के सुझावों के लिए बहुत धन्यवाद - मैंने अपना मूल परीक्षण कोड उसके साथ बदल दिया है - कृपया इसे स्वयं जांचें और हमें बताएं कि क्या यह बेहतर काम करता है):

आयात cv2

cap = cv2. VideoCapture("input_video.mp4") प्रिंट cap.isOpened() # True = सफलतापूर्वक वीडियो पढ़ें। असत्य - वीडियो पढ़ने में विफल। fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) प्रिंट आउट। isOpened () # True = सफलतापूर्वक वीडियो लिखें। गलत - वीडियो लिखने में विफल। कैप.रिलीज़ () आउट.रिलीज़ ()

यह परीक्षा बहुत ही महत्वपूर्ण है। यदि आप वीडियो फ़ाइलों को संसाधित करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि एनाकोंडा / स्पाइडर आईडीई FFMPEG (वीडियो कोडेक) का उपयोग कर सकता है। इसे काम करने में मुझे कई दिन लग गए। लेकिन मुझे आशा है कि इसमें आपको बहुत कम समय लगेगा!:) नोट: एनाकोंडा स्पाइडर आईडीई का उपयोग करते समय एक और बहुत महत्वपूर्ण टिप। सुनिश्चित करें कि आप वर्तमान कार्य निर्देशिका (सीडब्ल्यूडी) की जाँच करें !!!

चरण 5: फेस डिटेक्शन के लिए कोड बनाएं

फेस डिटेक्शन के लिए कोड बनाएं
फेस डिटेक्शन के लिए कोड बनाएं
फेस डिटेक्शन के लिए कोड बनाएं
फेस डिटेक्शन के लिए कोड बनाएं

लक्ष्य

इस सत्र में,

  • हम Haar फ़ीचर-आधारित Cascade Classifiers का उपयोग करके चेहरे की पहचान की मूल बातें देखेंगे
  • हम आंखों का पता लगाने आदि के लिए इसे बढ़ाएंगे

ओपनसीवी में हार-कैस्केड डिटेक्शन

यहां हम डिटेक्शन से निपटेंगे। ओपनसीवी में पहले से ही चेहरे, आंखों, मुस्कान आदि के लिए कई पूर्व-प्रशिक्षित क्लासिफायर हैं। उन एक्सएमएल फाइलों को ओपनसीवी/डेटा/हार्कस्केड/फोल्डर में संग्रहीत किया जाता है। आइए OpenCV के साथ फेस और आई डिटेक्टर बनाएं। सबसे पहले हमें आवश्यक XML क्लासिफायर को लोड करना होगा। फिर हमारी इनपुट छवि (या वीडियो) को ग्रेस्केल मोड में लोड करें या हम कैमरे का उपयोग कर सकते हैं (रियल टाइम फेस डिटेक्शन के लिए)

np. के रूप में numpy आयात करें

आयात cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades.xml') cap = cv2. VideoCapture(0) जबकि 1: ret, img = cap.read() धूसर = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) चेहरे = face_cascade.detectMultiScale(ग्रे, 1.5, 5) के लिए (x, y, w, h) चेहरों में: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = ग्रे[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] आंखें = eye_cascade.detectMultiScale(roi_gray) आंखों में (उदा, ey, ew, eh) के लिए: cv2.rectangle(roi_color, (उदा, ey), (ex+ew, ey+eh), (0, 255, 0), 2) प्रिंट "मिला" +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) और 0xff अगर k == 27: ब्रेक कैप.रिलीज () cv2.destroyAllWindows ()

चरण 6: डेटा सेट बनाने के लिए कोड बनाएं

डेटा सेट बनाने के लिए कोड बनाएं
डेटा सेट बनाने के लिए कोड बनाएं
डेटा सेट बनाने के लिए कोड बनाएं
डेटा सेट बनाने के लिए कोड बनाएं

हम चेहरे की पहचान कर रहे हैं, इसलिए आपको कुछ चेहरे की छवियों की आवश्यकता होगी! आप या तो अपना खुद का डेटासेट बना सकते हैं या उपलब्ध फेस डेटाबेस में से किसी एक के साथ शुरू कर सकते हैं, https://face-rec.org/databases/ आपको एक अप-टू-डेट ओवरव्यू देता है। तीन दिलचस्प डेटाबेस हैं (विवरण के कुछ हिस्सों को https://face-rec.org से उद्धृत किया गया है):

  • एटी एंड टी फेसडेटाबेस
  • येल फेसडेटाबेस ए
  • विस्तारित येल फेसडेटाबेस बी

यहाँ मैं अपने स्वयं के डेटासेट का उपयोग कर रहा हूँ…। कोड की मदद से जो नीचे दिया गया है:

np. के रूप में numpy आयात करें

आयात cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('user id दर्ज करें') sampleN=0; जबकि 1: ret, img = cap.read() धूसर = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) चेहरे = face_cascade.detectMultiScale (ग्रे, 1.3, 5) (x, y, w, h) चेहरों में: नमूनाN = नमूनाएन+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User।"+str(id)+ "।" +str(sampleN)+ ".jpg", ग्रे [y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) अगर sampleN > 20: ब्रेक कैप.रिलीज () cv2.destroyAllWindows()

चरण 7: पहचानकर्ता को प्रशिक्षित करने के लिए कोड बनाएं

पहचानकर्ता को प्रशिक्षित करने के लिए कोड बनाएं
पहचानकर्ता को प्रशिक्षित करने के लिए कोड बनाएं

प्रशिक्षण सेट तैयार करने के लिए फ़ंक्शन बनाएं

अब, हम एक फंक्शन परिभाषित करेंगे

getImagesWithID (पथ)

जो इनपुट तर्क के रूप में छवि डेटाबेस के लिए पूर्ण पथ लेता है और 2 सूची का टपल देता है, एक में पहचाने गए चेहरे होते हैं और दूसरे में उस चेहरे के लिए संबंधित लेबल होता है। उदाहरण के लिए, यदि चेहरों की सूची में ith सूचकांक डेटाबेस में 5 वें व्यक्ति का प्रतिनिधित्व करता है, तो लेबल की सूची में संबंधित ith स्थान का मान 5 के बराबर होता है।

अब नीचे दिए गए कोड की सहायता से डेटासेट चेहरों (जो चरण 6 में बनाया गया है) को.yml फ़ाइल में बदलें:

आयात ओएस

पीआईएल आयात से एनपी आयात cv2 के रूप में numpy आयात करें छवि # चेहरा पहचान के लिए हम LBPH चेहरा पहचानकर्ता पहचानकर्ता = cv2.createLBPHFaceRecognizer(); पथ = "एफ:/प्रोग्राम फाइल्स/प्रोजेक्ट्स/फेस_रेक/फेसडेटा" डीईएफ़ getImagesWithID (पथ): इमेजपाथ = [os.path.join (पथ, f) f के लिए os.listdir (पथ) में] # प्रिंट इमेज_पाथ #getImagesWithID(पथ) चेहरे = आईडी = छवि के लिए छविपथ में पथ: # छवि पढ़ें और ग्रेस्केल चेहरों में कनवर्ट करेंImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # छवि आईडी का लेबल प्राप्त करें = int(os.path.split(imagePath)[-1].split(.")[1]) # छवि चेहरों में चेहरे का पता लगाएं। संलग्न करें (फेसएनपी) आईडी संलग्न करें। (आईडी) cv2.imshow("ट्रेनिंग के लिए चेहरे जोड़ना", faceNP) cv2.waitKey(10) रिटर्न np.array(IDs), फेस आईडी, फेस = getImagesWithID (पथ) पहचानकर्ता। ट्रेन (चेहरे, आईडी) पहचानकर्ता। सहेजें ("एफ:/प्रोग्राम फाइल्स/प्रोजेक्ट्स/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

इस कोड का उपयोग करके सभी फेस डेटासेट को एक.yml फ़ाइल में परिवर्तित किया जाता है…..पथ स्थान है ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

चरण 8: चेहरे और परिणाम को पहचानने के लिए कोड बनाएं

Guyzz यह अंतिम चरण है जिसमें हम आपके वेबकैम की मदद से चेहरों को पहचानने के लिए कोड बना सकते हैं। 1. कैम से वीडियो कैप्चर करना 2. इसकी तुलना अपनी.yml फ़ाइल से करें

npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) जबकि 1: ret, img = cap.read() धूसर = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) चेहरे = face_cascade.detectMultiScale (ग्रे, 1.5, 5) (x, y, w, h) चेहरों के लिए: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) आईडी, conf=rec.predict(gray[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if id= =5: आईडी='राहुल' अगर आईडी==6: id="अक्षय" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), फ़ॉन्ट, 255) cv2.imshow('img', img) अगर cv2.waitKey(1) == ord('q'): ब्रेक कैप.रिलीज ()

cv2.destroyAllWindows ()

और अंत में परिणाम आपकी आंखों के सामने आ जाएगा …… आप लिंक के नीचे से ज़िप फ़ाइल भी डाउनलोड कर सकते हैं: कोड डाउनलोड करने के लिए यहां क्लिक करें, इसलिए, इस निर्देश में हमने OpenCV का उपयोग करके चेहरे की पहचान + पहचान का कार्य किया…..यदि आप इस निर्देश को पसंद करें….. कृपया मुझे सब्सक्राइब करें और मुझे वोट दें …..धन्यवाद दोस्तों:)

सिफारिश की: