Sisukord:

Näotuvastus ja äratundmine: 8 sammu (piltidega)
Näotuvastus ja äratundmine: 8 sammu (piltidega)

Video: Näotuvastus ja äratundmine: 8 sammu (piltidega)

Video: Näotuvastus ja äratundmine: 8 sammu (piltidega)
Video: TANTSUKINGAD - Laulupesa ja Shate tantsukooli lapsed 2024, Juuli
Anonim
Image
Image
Näotuvastus+äratundmine
Näotuvastus+äratundmine

See on lihtne näide kaamerast OpenCV abil töötava näotuvastuse ja tuvastamise kohta. MÄRKUS: TEGIN KÄESOLEVA PROJEKTI ANDURIKONKURSSILE JA KASUTASIN KAAMERAT ANTAJANA JÄLGIMIS- JA TUNNUSTUSNÄGUDEL. Niisiis, meie eesmärk Sellel seansil 1. Installige Anaconda 2. Laadige alla avatud CV -pakett 3. Määrake keskkonnamuutujad 4. Testi kinnitamiseks 5 Näo tuvastamise koodi tegemine 6. Andmekogumi loomiseks koodi koostamine 7. Tuvastamisseadme koolitamiseks 8. Nägude ja tulemuse tuvastamiseks koodi tegemine.

Samm: installige Anaconda

Installige Anaconda
Installige Anaconda

Anaconda on sisuliselt kenasti pakitud Python IDE, mis tarnitakse koos paljude kasulike pakettidega, nagu NumPy, Pandas, IPython Notebook jne. Tundub, et seda soovitatakse kõikjal teadusringkondades. Selle installimiseks vaadake Anaconda.

Samm: laadige alla avatud CV -pakett

Laadige alla avatud CV pakett
Laadige alla avatud CV pakett

Esiteks minge OpenCV täieliku paketi allalaadimiseks ametlikule OpenCV saidile. Valige soovitud versioon (2.x või 3.x). Ma kasutan Python 2.x ja OpenCV 2.x - peamiselt seetõttu, et nii on OpenCV -Pythoni õpetused seadistatud/põhinevad.

Minu puhul olen pakendi (sisuliselt kausta) otse oma F -draivi välja võtnud. (F: / opencv).

3. samm: määrake keskkonnamuutujad

Määrake keskkonnamuutujad
Määrake keskkonnamuutujad

Kopeerige ja kleepige fail cv2.pyd

Anaconda saidipakettide kataloog (nt minu puhul F: / Program Files / Anaconda2 / Lib / site-package) sisaldab Pythoni pakette, mida saate importida. Meie eesmärk on kopeerida ja kleepida fail cv2.pyd sellesse kataloogi (et saaksime kasutada import -cv2 oma Pythoni koodides.)

Selleks kopeerige fail cv2.pyd …

Sellest OpenCV kataloogist (algusosa võib teie masinas veidi erineda):

# Python 2.7 ja 64-bitine masin: F: / opencv / build / python / 2.7 / x64# Python 2.7 ja 32-bitine masin: F: / opencv / build / python / 2.7 / x84

Sellesse Anaconda kataloogi (algusosa võib teie masinal veidi erineda):

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

Pärast selle sammu sooritamist saame nüüd Python -koodis kasutada import -cv2 -d. AGA, me peame veel natuke tööd tegema, et FFMPEG (videokodek) tööle saada (et saaksime teha selliseid asju nagu videote töötlemine.)

Paremklõpsake nuppu "Minu arvuti" (või "See arvuti" Windows 8.1-s)-> vasakklõpsake nuppu Atribuudid-> vasakklõpsake vahekaarti "Täpsemalt"-> vasakklõpsake nuppu "Keskkonnamuutujad …". Lisage uus kasutajamuutuja osutada OpenCV-le (kas x86 32-bitise süsteemi jaoks või x64 64-bitise süsteemi jaoks.) Olen praegu 64-bitise masinaga.

32-bitine OPENCV_DIRC: / opencv / build / x86 / vc12

64-bitine OPENCV_DIRC: / opencv / build / x64 / vc12

Lisage kasutaja muutuja PATH -ile %OPENCV_DIR %\ bin.

Näiteks näeb minu PATH kasutaja muutuja välja selline …

Enne:

F: / Kasutajad / Johnny / Anaconda; C: / Kasutajad / Johnny / Anaconda / Skriptid

Pärast:

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

Sellega olemegi valmis! FFMPEG on kasutamiseks valmis!

Samm 4: testige kinnitamiseks

Testi kinnitamiseks
Testi kinnitamiseks
Testi kinnitamiseks
Testi kinnitamiseks

Peame testima, kas saame neid nüüd Anacondas teha (Spyder IDE kaudu):

  • Importige OpenCV pakett
  • Kasutage utiliiti FFMPEG (videote lugemiseks/kirjutamiseks/töötlemiseks)

Test 1: kas saame OpenCV -d importida?

Et veenduda, et Anaconda saab nüüd OpenCV-Pythoni paketi (nimelt cv2) importida, andke need välja IPython Console'is:

import cv2

printige cv2._ versioon_

Kui pakett cv2 imporditakse veatult ja cv2 versioon on välja prinditud, on meil kõik hea!

Test 2: Kas saame kasutada FFMPEG -koodekit?

Asetage proov

input_video.mp4

videofail kataloogis. Tahame testida, kas saame:

  • lugege seda.mp4 videofaili ja
  • kirjutage välja uus videofail (võib olla.avi või.mp4 jne)

Selleks peab meil olema testpüütoni kood, nimetage see test.py. Asetage see näidisega samasse kataloogi

input_video.mp4

faili.

See on mis

test.py

võib välja näha (Märkus: suur tänu Pete'i ja Warreni soovitustele kommentaariväljal - olen asendanud oma algse testkoodi temaga - palun katsetage seda ise ja andke meile teada, kas see töötab paremini):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = video lugemine õnnestus. Vale - video lugemine ebaõnnestus. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = video edukalt välja kirjutamine. Vale - ei õnnestu videot välja kirjutada. cap.release () out.release ()

See test on VÄGA TÄHTIS. Kui soovite videofaile töödelda, peate tagama, et Anaconda / Spyder IDE saaks kasutada FFMPEG -d (videokodekit). Mul kulus päevi, kuni sain selle toimima. Aga ma loodan, et see võtab teil palju vähem aega!:) Märkus: veel üks väga oluline nõuanne Anaconda Spyder IDE kasutamisel. Kontrollige kindlasti praegust töökataloogi (CWD) !!!

Samm: looge näotuvastuse kood

Näo tuvastamiseks koodi koostamine
Näo tuvastamiseks koodi koostamine
Näo tuvastamiseks koodi koostamine
Näo tuvastamiseks koodi koostamine

Eesmärk

Sellel seansil

  • Näeme näotuvastuse põhitõdesid, kasutades Haari funktsioonil põhinevaid kaskaadiklassifikaatoreid
  • Laiendame sama ka silmade tuvastamiseks jne

Haar-kaskaadi tuvastamine OpenCV-s

Siin käsitleme avastamist. OpenCV sisaldab juba palju eelnevalt koolitatud näo, silmade, naeratuse jne klassifikaatoreid. Need XML-failid salvestatakse kausta opencv/data/haarcascades/. Loome OpenCV abil näo- ja silmaanduri. Kõigepealt peame laadima vajalikud XML -klassifikaatorid. Seejärel laadige meie sisendpilt (või video) halltoonide režiimis VÕI saame kasutada kaamerat (näo reaalajas tuvastamiseks)

import numpy np -na

import 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/haarcascade.xml ') cap = cv2. VideoCapture (0), samas kui 1: ret, img = cap.read () hall = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) näod = face_cascade.detectMultiScale (hall, 1,5, 5) x, y, w, h) nägudes: cv2. ristkülik (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = hall [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) (ex, ey, ew, eh) silmades: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "leitud" +str (len (näod)) +"nägu (d)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, kui k == 27: break cap.release () cv2.destroyAllWindows ()

6. samm: andmekogumi loomiseks koodi loomine

Andmekogumi loomiseks tehke kood
Andmekogumi loomiseks tehke kood
Andmekogumi loomiseks tehke kood
Andmekogumi loomiseks tehke kood

Me teeme näotuvastust, seega vajate näopilte! Saate luua oma andmekogumi või alustada ühest saadaolevast näo andmebaasist, https://face-rec.org/databases/ annab teile ajakohase ülevaate. Kolm huvitavat andmebaasi on (kirjelduse osad on tsiteeritud saidilt

  • AT&T näobaas
  • Yale'i näobaas A
  • Yale'i laiendatud näobaas B

SIIN ma kasutan oma andmekogumit…. Allpool toodud koodi abil:

import numpy np -na

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('sisesta kasutajatunnus') sampleN = 0; samas kui 1: ret, img = cap.read () hall = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) näod = face_cascade.detectMultiScale (hall, 1,3, 5) (x, y, w, h) nägudel: näideN = proovN+1; cv2.imwrite ("F:/Program Files/projektid/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", hall [y: y+h, x: x+w]) cv2. täisnurk (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) kui proov N> 20: break cap.release () cv2.destroyAllWindows ()

Samm 7: koostage kood, et treenida äratundjat

Tehke kood äratundja koolitamiseks
Tehke kood äratundja koolitamiseks

Looge treeningkomplekti ettevalmistamise funktsioon

Nüüd määratleme funktsiooni

getImagesWithID (tee)

mis võtab sisendargumendina pildi andmebaasi absoluutse tee ja tagastab loendi 2, millest üks sisaldab tuvastatud nägusid ja teine selle näo vastavat silti. Näiteks kui nägude loendi i -nda indeks tähistab andmebaasi viiendat indiviidi, on siltide loendis oleva i -nda asukoha väärtus 5.

Nüüd teisendage andmestiku näod (mis on loodud 6. toimingus).yml -failiks, kasutades allpool toodud koodi:

import os

import numpy kui np import cv2 PIL -i importimisest Pilt # Näotuvastuse jaoks kasutame LBPH näotuvastustunnistajat = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projektid/face_rec/facesData" def getImagesWithID (tee): imagePaths = [os.path.join (path, f) f jaoks os.listdir (path)] # print image_path #getImagesWithID (tee) näod = ID -d = imagePathi jaoks imagePathis: # Loe pilti ja teisenda halltoonideks # Hankige kujutise silt ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Tuvastage pildil nägu. Lisage (faceNP) ID-d. Lisage (ID) cv2.imshow ("Nägude lisamine transiidiks", faceNP) cv2.waitKey (10) tagastab np.array (ID -d), nägude ID -d, näod = getImagesWithID (tee) tunnistaja.treen (näod, ID -d) tuvastus.save ("F:/Program Files/projektid/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

selle koodi abil muudetakse kogu näo andmestik üheks.yml -failiks…..raja asukoht on ("F:/Program Files/projektid/face_rec/faceREC/trainingdata.yml")

Samm: tehke nägude ja tulemuste äratundmiseks kood

Guyzz, see on viimane samm, mille käigus saame luua veebikaamera abil koodi, mis tuvastab näod. Sellel sammul on kaks toimingut, mida kavatsetakse täita…. 1. video jäädvustamine kaamerast 2. võrrelge seda oma.yml -failiga

import numpy kui npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRec; rec.load ("F:/Program Files/projektid/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) ja 1: ret, img = cap.read () hall = cv2.cvt Värv (img, cv2. COLOR_BGR2GRAY) näod = face_cascade.detectMultiScale (hall, 1,5, 5) (x, y, w, h) nägudel: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (hall [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', kui id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255)) cv2.imshow ('img', img) kui cv2.waitKey (1) == ord ('q'): murda cap.release ()

cv2.destroyAllWindows ()

ja lõpptulemus tuli teie silme ees … … saate alla laadida ka zip -faili lingi alt: Koodide allalaadimiseks klõpsake siin nagu see õpetlik….. plzzz tellige mind ja hääletage minu poolt….. aitäh sõbrad:)

Soovitan: