Სარჩევი:

სახის ამოცნობა+ამოცნობა: 8 ნაბიჯი (სურათებით)
სახის ამოცნობა+ამოცნობა: 8 ნაბიჯი (სურათებით)

ვიდეო: სახის ამოცნობა+ამოცნობა: 8 ნაბიჯი (სურათებით)

ვიდეო: სახის ამოცნობა+ამოცნობა: 8 ნაბიჯი (სურათებით)
ვიდეო: რა ხდება კანონიერი ქურდების საკნებში 2024, ივლისი
Anonim
Image
Image
სახის ამოცნობა+ამოცნობა
სახის ამოცნობა+ამოცნობა

ეს არის მარტივი გამოვლენის სახე გამოვლენისა და ამოცნობის OpenCV კამერით. შენიშვნა: მე გავაკეთე ეს პროექტი სენსორული კონკურსისთვის და გამოვიყენე კამერა, როგორც სენსორი თვალყურის დევნისა და ამოცნობის სახეებისთვის. ასე რომ, ჩვენი მიზანი ამ სესიაზე, 1. დააინსტალირეთ ანაკონდა 2. ჩამოტვირთეთ ღია CV პაკეტი 3. დააყენეთ გარემოს ცვლადი 4. ტესტი დაადასტურეთ 5 შეიყვანეთ კოდი სახის ამოცნობისთვის 6. შეიყვანეთ კოდი მონაცემთა ნაკრების შესაქმნელად 7. გააკეთეთ კოდი ამოსაცნობი ტრენინგისათვის 8. გააკეთეთ კოდი სახის ამოცნობისა და შედეგისთვის.

ნაბიჯი 1: დააინსტალირეთ Anaconda

დააინსტალირეთ ანაკონდა
დააინსტალირეთ ანაკონდა

Anaconda არსებითად არის ლამაზად შეფუთული Python IDE, რომელიც იგზავნება ტონა სასარგებლო პაკეტებით, როგორიცაა NumPy, Pandas, IPython Notebook და ა.შ. როგორც ჩანს, ის ყველგან არის რეკომენდებული სამეცნიერო საზოგადოებაში. შეამოწმეთ ანაკონდა, რომ დააინსტალიროთ.

ნაბიჯი 2: ჩამოტვირთეთ ღია CV პაკეტი

ჩამოტვირთეთ ღია CV პაკეტი
ჩამოტვირთეთ ღია CV პაკეტი

პირველ რიგში, გადადით OpenCV ოფიციალურ საიტზე, რომ ჩამოტვირთოთ OpenCV სრული პაკეტი. შეარჩიეთ თქვენთვის სასურველი ვერსია (2.x ან 3.x). მე ვარ პითონ 2.x და OpenCV 2.x - ძირითადად იმიტომ, რომ სწორედ ასეა დადგენილი/დაფუძნებული OpenCV -Python გაკვეთილები.

ჩემს შემთხვევაში, მე ამოვიღე პაკეტი (არსებითად საქაღალდე) პირდაპირ ჩემს F დისკზე. (F: / opencv).

ნაბიჯი 3: გარემოს ცვლადების დაყენება

გარემოს ცვლადების დაყენება
გარემოს ცვლადების დაყენება

დააკოპირეთ და ჩასვით cv2.pyd ფაილი

Anaconda საიტის პაკეტების დირექტორია (მაგ. F: / Program Files / Anaconda2 / Lib / site-packages in my case) შეიცავს პითონის პაკეტებს, რომელთა შემოტანა შეგიძლიათ. ჩვენი მიზანია cv2.pyd ფაილის კოპირება და ჩასმა ამ დირექტორიაში (ასე რომ ჩვენ შეგვიძლია გამოვიყენოთ იმპორტი cv2 ჩვენს პითონის კოდებში.).

ამისათვის დააკოპირეთ cv2.pyd ფაილი…

ამ OpenCV დირექტორია (საწყისი ნაწილი შეიძლება ოდნავ განსხვავებული იყოს თქვენს აპარატზე):

# პითონის 2.7 და 64-ბიტიანი მანქანა: F: / opencv / build / python / 2.7 / x64# Python 2.7 და 32-ბიტიანი მანქანა: F: / opencv / build / python / 2.7 / x84

ამ ანაკონდას დირექტორია (საწყისი ნაწილი შეიძლება ოდნავ განსხვავებული იყოს თქვენს აპარატზე):

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

ამ ნაბიჯის შესრულების შემდეგ ჩვენ ახლა შევძლებთ ვიყენოთ იმპორტი cv2 პითონის კოდში. მაგრამ, ჩვენ ჯერ კიდევ გვჭირდება ცოტა მეტი შრომა იმისათვის, რომ FFMPEG (ვიდეო კოდეკი) იმუშაოს (მოგვცეს საშუალება გავაკეთოთ ისეთი რამ, როგორიცაა ვიდეოების დამუშავება.)

დააწკაპუნეთ მარჯვენა ღილაკით "ჩემი კომპიუტერი" (ან "ეს კომპიუტერი" Windows 8.1)-> მარცხენა ღილაკით "თვისებები"-> მარცხენა ღილაკით "გაფართოებული" ჩანართი-> მარცხენა ღილაკი "გარემოს ცვლადები …" ღილაკი. დაამატეთ ახალი მომხმარებლის ცვლადი მიუთითეთ OpenCV (ან x86 32 ბიტიანი სისტემისთვის ან x64 64 ბიტიანი სისტემისთვის.) მე ამჟამად 64 ბიტიან აპარატზე ვარ.

32 ბიტიანი OPENCV_DIRC: / opencv / build / x86 / vc12

64 ბიტიანი OPENCV_DIRC: / opencv / build / x64 / vc12

დაამატეთ %OPENCV_DIR %\ bin მომხმარებლის ცვლადის გზას.

მაგალითად, ჩემი PATH მომხმარებლის ცვლადი ასე გამოიყურება…

ადრე:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

შემდეგ:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

ეს არის ის, რაც ჩვენ დავასრულეთ! FFMPEG მზადაა გამოსაყენებლად!

ნაბიჯი 4: დაადასტურეთ ტესტი

ტესტი დასადასტურებლად
ტესტი დასადასტურებლად
ტესტი დაადასტურეთ
ტესტი დაადასტურეთ

ჩვენ უნდა შევამოწმოთ შეგვიძლია თუ არა ამის გაკეთება ანაკონდაში (Spyder IDE– ს საშუალებით):

  • OpenCV პაკეტის იმპორტი
  • გამოიყენეთ FFMPEG პროგრამა (ვიდეოების წასაკითხად/დასაწერად/დამუშავებისთვის)

ტესტი 1: შეგვიძლია შემოვიტანოთ OpenCV?

იმის დასაჯერებლად, რომ ანაკონდას ახლა შეუძლია OpenCV-Python პაკეტის იმპორტირება (კერძოდ, cv2), გაუშვით ეს IPython კონსოლში:

იმპორტი cv2

ბეჭდვა cv2._ ვერსია_

თუ პაკეტი cv2 იმპორტირებულია კარგად შეცდომების გარეშე და cv2 ვერსია დაბეჭდილია, მაშინ ჩვენ ყველანი კარგები ვართ!

ტესტი 2: შეგვიძლია გამოვიყენოთ FFMPEG კოდეკი?

მოათავსეთ ნიმუში

input_video.mp4

ვიდეო ფაილი დირექტორიაში. ჩვენ გვინდა შევამოწმოთ შეგვიძლია თუ არა:

  • წაიკითხეთ ეს.mp4 ვიდეო ფაილი და
  • ჩაწერეთ ახალი ვიდეო ფაილი (შეიძლება იყოს.avi ან.mp4 და ა.

ამისათვის ჩვენ გვჭირდება სატესტო პითონის კოდი, დავარქვათ test.py. განათავსეთ იგი იმავე დირექტორიაში, როგორც ნიმუში

input_video.mp4

ფაილი

Ეს არის ის, რაც

ტესტი. py

შეიძლება გამოიყურებოდეს (შენიშვნა: დიდი მადლობა პიტისა და უორენის წინადადებებს კომენტარების ველში - მე შევცვალე ჩემი ორიგინალური სატესტო კოდი მისით - გთხოვთ, თავად გამოსცადოთ და შეგვატყობინოთ, თუ ეს უკეთესად მუშაობს):

იმპორტი cv2

cap = cv2. VideoCapture ("input_video.mp4") cap cap.isOpened () # True = ვიდეოს წარმატებით წაკითხვა. ყალბი - ვიდეოს წაკითხვა ვერ ხერხდება. Fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", Fourcc, 20.0, (640, 360)) print out.isOpened () # True = წარმატებით ჩაწერეთ ვიდეო ყალბი - ვიდეოს ჩაწერა ვერ მოხერხდა. cap.release () out.release ()

ეს ტესტი ძალიან მნიშვნელოვანია. თუ გსურთ ვიდეო ფაილების დამუშავება, თქვენ უნდა დარწმუნდეთ, რომ Anaconda / Spyder IDE– ს შეუძლია გამოიყენოს FFMPEG (ვიდეო კოდეკი). დღეები დამჭირდა, რომ გამეგრძელებინა მუშაობა. მაგრამ იმედი მაქვს ამას გაცილებით ნაკლები დრო დაგჭირდება!:) შენიშვნა: კიდევ ერთი ძალიან მნიშვნელოვანი რჩევა Anaconda Spyder IDE– ს გამოყენებისას. დარწმუნდით, რომ შეამოწმეთ მიმდინარე სამუშაო დირექტორია (CWD) !!!

ნაბიჯი 5: შექმენით კოდი სახის ამოცნობისთვის

შექმენით კოდი სახის ამოცნობისთვის
შექმენით კოდი სახის ამოცნობისთვის
შექმენით კოდი სახის ამოცნობისთვის
შექმენით კოდი სახის ამოცნობისთვის

მიზანი

ამ სესიაზე,

  • ჩვენ ვნახავთ სახის გამოვლენის საფუძვლებს Haar Feature დაფუძნებული კასკადის კლასიფიკატორების გამოყენებით
  • ჩვენ იგივე გავაგრძელებთ თვალის გამოვლენისთვის და ა

ჰარის კასკადის გამოვლენა OpenCV– ში

აქ ჩვენ გავუმკლავდებით გამოვლენას. OpenCV უკვე შეიცავს ბევრ წინასწარ მომზადებულ კლასიფიკატორს სახის, თვალების, ღიმილის და ა.შ. ეს XML ფაილები ინახება opencv/data/haarcascades/საქაღალდეში. მოდით შევქმნათ სახის და თვალის დეტექტორი OpenCV– ით. ჯერ ჩვენ უნდა ჩავტვირთოთ საჭირო XML კლასიფიკატორები. შემდეგ ჩატვირთეთ ჩვენი შეყვანის სურათი (ან ვიდეო) ნაცრისფერი მასშტაბის რეჟიმში ან შეგვიძლია გამოვიყენოთ კამერა (რეალურ დროში სახის გამოვლენისთვის)

იმპორტირებული numpy როგორც np

იმპორტი cv2 face_cascade = cv2. CascadeClassifier ('F:/პროგრამის ფაილები/opencv/წყაროები/მონაცემები/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/პროგრამის ფაილები/opencv/წყაროები/მონაცემები/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/hacarascade.xml ') cap = cv2. VideoCapture (0) ხოლო 1: ret, img = cap.read () ნაცრისფერი = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) სახეები = face_cascade.detectMultiScale (ნაცრისფერი, 1.5, 5) for (x, y, w, h) სახეებში: cv2. მართკუთხედი (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] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (სახეები)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff თუ k == 27: break cap.release () cv2.destroyAllWindows ()

ნაბიჯი 6: შექმენით კოდი მონაცემთა ნაკრების შესაქმნელად

გააკეთეთ კოდი მონაცემთა ნაკრების შესაქმნელად
გააკეთეთ კოდი მონაცემთა ნაკრების შესაქმნელად
გააკეთეთ კოდი მონაცემთა ნაკრების შესაქმნელად
გააკეთეთ კოდი მონაცემთა ნაკრების შესაქმნელად

ჩვენ ვაკეთებთ სახის ამოცნობას, ასე რომ თქვენ დაგჭირდებათ სახის სურათები! თქვენ შეგიძლიათ შექმნათ თქვენი საკუთარი მონაცემთა ნაკრები ან დაიწყოთ სახის ერთ-ერთი არსებული მონაცემთა ბაზით, https://face-rec.org/databases/ გაძლევთ განახლებულ მიმოხილვას. სამი საინტერესო მონაცემთა ბაზა (აღწერილობის ნაწილები ციტირებულია https://face-rec.org– დან):

  • AT&T Facedatabase
  • იელის სახის ბაზა A
  • გაფართოებული იელის ფასადის მონაცემთა ბაზა B

აქ მე ვიყენებ ჩემს მონაცემთა ნაკრებს…. კოდის დახმარებით, რომელიც მოცემულია ქვემოთ:

იმპორტირებული numpy როგორც np

იმპორტი cv2 face_cascade = cv2. CascadeClassifier ('F:/პროგრამის ფაილები/opencv/წყაროები/მონაცემები/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter id id') sampleN = 0; ხოლო 1: ret, img = cap.read () ნაცრისფერი = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) სახეები = face_cascade.detectMultiScale (ნაცრისფერი, 1.3, 5) for (x, y, w, h) სახეებში: sampleN = ნიმუში N+1; cv2.imwrite ("F:/პროგრამის ფაილები/პროექტები/face_rec /acesData/მომხმარებელი."+str (id)+"."+str (sampleN)+".jpg", ნაცრისფერი [y: y+h, x: x+w]) cv2. მართკუთხედი (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.wait გასაღები (1) თუ ნიმუში N> 20: შესვენება cap.release () cv2.destroyAllWindows ()

ნაბიჯი 7: შეიმუშავეთ კოდი აღიარების გადამზადებისათვის

შეიმუშავეთ კოდი აღიარების გადამზადებისათვის
შეიმუშავეთ კოდი აღიარების გადამზადებისათვის

შექმენით სასწავლო ნაკრების მომზადების ფუნქცია

ახლა ჩვენ განვსაზღვრავთ ფუნქციას

getImagesWithID (გზა)

რომელიც იღებს სურათის მონაცემთა ბაზის აბსოლუტურ გზას შეყვანის არგუმენტის სახით და აბრუნებს ორ სიას, რომელთაგან ერთი შეიცავს აღმოჩენილ სახეებს, ხოლო მეორე შეიცავს შესაბამის ეტიკეტს ამ სახისთვის. მაგალითად, თუ სახეების ჩამონათვალში ith ინდექსი წარმოადგენს მონაცემთა ბაზის მე -5 ინდივიდს, მაშინ ეტიკეტების სიაში შესაბამის ადგილსამყოფელს აქვს 5 -ის ტოლი მნიშვნელობა.

ახლა გადააკეთეთ მონაცემთა ნაკრების სახეები (რომელიც იქმნება მე –6 საფეხურზე).yml ფაილში კოდის გამოყენებით, რომელიც მოცემულია ქვემოთ:

იმპორტი os

იმპორტის numpy როგორც np იმპორტი cv2 PIL იმპორტიდან სურათი # სახის ამოცნობისთვის ჩვენ LBPH Face Recognizer ამოცნობს = cv2.createLBPHFaceRecognizer (); path = "F:/პროგრამის ფაილები/პროექტები/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (გზა) სახეები = IDs = imagePath– ში imagePaths: # წაიკითხეთ სურათი და გადააკეთეთ ნაცრისფერ ფერებში # მიიღეთ გამოსახულების ID- ის იარლიყი = int (os.path.split (imagePath) [-1]. გაყოფა (".") [1]) # გამოსახულების გამოსახულების სახეების ამოცნობა. დამატება (faceNP) IDs.append (ID) cv2.imshow ("სახეების დამატება გადასაადგილებლად", faceNP) cv2.waitKey (10) დაბრუნება np.array (ID), სახეების იდები, სახეები = getImagesWithID (path) ამოცნობა. ტრენერი (სახეები, იდები) ამოცნობა. შენახვა ("F:/პროგრამის ფაილები/პროექტები/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

ამ კოდის გამოყენებით ყველა სახის მონაცემთა ნაკრები გარდაიქმნება ერთ.yml ფაილში …..გზის მდებარეობაა ("F:/პროგრამის ფაილები/პროექტები/face_rec/faceREC/trainingdata.yml")

ნაბიჯი 8: შექმენით კოდი სახეების და შედეგების ამოცნობისთვის

Guyzz ეს არის ბოლო ნაბიჯი, რომელშიც ჩვენ შეგვიძლია შევქმნათ კოდი თქვენი ვებკამერის დახმარებით სახეების ამოცნობისათვის. ამ ნაბიჯს აქვს ორი ოპერაცია, რომლებიც აპირებენ შესრულებას…. 1. ვიდეოს გადაღება კამერიდან 2. შეადარეთ თქვენს.yml ფაილს

იმპორტი numpy როგორც npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/პროგრამის ფაილები/opencv/წყაროები/მონაცემები/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecizer; rec.load ("F:/პროგრამის ფაილები/პროექტები/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) for (x, y, w, h) სახეებში: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec. წინასწარმეტყველება (ნაცრისფერი [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: id = 'rahul' თუ id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): შესვენება cap.release ()

cv2.destroyAllWindows ()

და საბოლოოდ შედეგი გამოჩნდება თქვენს თვალწინ …… თქვენ ასევე შეგიძლიათ გადმოწეროთ zip ფაილი ბმულიდან: დააწკაპუნეთ აქ კოდების ჩამოსატვირთად მოსწონს ეს სასწავლო ….. plzzz გამომიწერე და ხმა მომცე … მადლობა მეგობრებო:)

გირჩევთ: