INHOUDSOPGAWE:

Gesigsopsporing+herkenning: 8 stappe (met foto's)
Gesigsopsporing+herkenning: 8 stappe (met foto's)

Video: Gesigsopsporing+herkenning: 8 stappe (met foto's)

Video: Gesigsopsporing+herkenning: 8 stappe (met foto's)
Video: Vergelijk Redmi Opmerking en Meizu 8 Noot 9 2024, November
Anonim
Image
Image
Gesigsopsporing+herkenning
Gesigsopsporing+herkenning

Dit is 'n eenvoudige voorbeeld van gesigsopsporing en herkenning met OpenCV vanaf 'n kamera. OPMERKING: EK HET HIERDIE PROJEK GEMAAK VIR SENSORKOMPETISIE EN EK HET KAMERA AS SENSOR GEBRUIK OM GESIGTE TE SPOOR EN ERKEN. Dus, Ons doelwit In hierdie sessie, 1. Installeer Anaconda 2. Laai Open CV -pakket af 3. Stel omgewingsveranderlikes op. 4. Toets om te bevestig 5 Maak kode vir gesigsopsporing 6. Maak kode om 'n datastel te skep 7. Maak kode om die herkener op te lei 8. Maak kode om die gesigte en resultaat te herken.

Stap 1: Installeer Anaconda

Installeer Anaconda
Installeer Anaconda

Anaconda is in wese 'n mooi verpakte Python IDE wat saam met tonne nuttige pakkette, soos NumPy, Pandas, IPython Notebook, ens., Gestuur word. Dit word oral in die wetenskaplike gemeenskap aanbeveel. Kyk na Anaconda om dit geïnstalleer te kry.

Stap 2: Laai Open CV -pakket af

Laai Open CV -pakket af
Laai Open CV -pakket af

Gaan eers na die amptelike OpenCV -webwerf om die volledige OpenCV -pakket af te laai. Kies 'n weergawe wat u wil (2.x of 3.x). Ek is op Python 2.x en OpenCV 2.x - hoofsaaklik omdat dit is hoe die OpenCV -Python -tutoriale opgestel/gebaseer is.

In my geval het ek die pakket (in wese 'n gids) direk na my F -skyf gehaal. (F: / opencv).

Stap 3: Stel omgewingsveranderlikes op

Stel omgewingsveranderlikes
Stel omgewingsveranderlikes

Kopieer en plak die cv2.pyd -lêer

Die gids Anaconda Site-packages (bv. F: / Program Files / Anaconda2 / Lib / site-pakkette in my geval) bevat die Python-pakkette wat u kan invoer. Ons doel is om die cv2.pyd -lêer na hierdie gids te kopieer en te plak (sodat ons die invoer cv2 in ons Python -kodes kan gebruik.).

Om dit te doen, kopieer die cv2.pyd -lêer …

Van hierdie OpenCV -gids (die begin gedeelte kan effens anders wees op u masjien):

# Python 2.7 en 64-bis masjien: F: / opencv / build / python / 2.7 / x64# Python 2.7 en 32-bit masjien: F: / opencv / build / python / 2.7 / x84

Vir hierdie Anaconda -gids (die begin gedeelte kan effens anders wees op u masjien):

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

Nadat ons hierdie stap uitgevoer het, sal ons nou invoer cv2 in Python -kode kan gebruik. MAAR, ons moet nog 'n bietjie meer werk doen om FFMPEG (videokodek) te laat werk (om ons in staat te stel om dinge soos die verwerking van video's te doen.)

Klik met die rechtermuisknop op "My rekenaar" (of "Hierdie rekenaar" in Windows 8.1)-> klik met die linkermuisknop op Eienskappe-> klik met die linkermuisknop op die blad "Gevorderd"-> klik met die linkermuisknop op "Omgewingsveranderlikes …". Voeg 'n nuwe gebruikersveranderlike by om na die OpenCV te wys (óf x86 vir 32-bis-stelsel óf x64 vir 64-bis-stelsel.) Ek is tans op 'n 64-bis-masjien.

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

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

Voeg %OPENCV_DIR %\ bin by die gebruikersveranderlike PATH.

My PATH -gebruikersveranderlike lyk byvoorbeeld so …

Voor:

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

Na:

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

Dit is dit wat ons klaar is! FFMPEG is gereed om gebruik te word!

Stap 4: Toets om te bevestig

Toets om te bevestig
Toets om te bevestig
Toets om te bevestig
Toets om te bevestig

Ons moet toets of ons dit nou in Anaconda (via Spyder IDE) kan doen:

  • Voer OpenCV -pakket in
  • Gebruik die FFMPEG -nut (om video's te lees/skryf/verwerk)

Toets 1: Kan ons OpenCV invoer?

Om te bevestig dat Anaconda nou die OpenCV-Python-pakket (naamlik cv2) kan invoer, reik hierdie in die IPython Console uit:

voer cv2 in

druk cv2._ weergawe_

As die pakket cv2 goed ingevoer is sonder foute en die cv2 -weergawe uitgedruk is, is dit goed met ons!

Toets 2: Kan ons die FFMPEG -kodek gebruik?

Plaas 'n monster

input_video.mp4

videolêer in 'n gids. Ons wil toets of ons kan:

  • lees hierdie.mp4 videolêer, en
  • skryf 'n nuwe videolêer (kan.avi of.mp4 ens.)

Om dit te kan doen, moet ons 'n toets -python -kode hê, noem dit test.py. Plaas dit in dieselfde gids as die voorbeeld

input_video.mp4

lêer.

Dit is wat

toets.py

kan lyk (let wel: baie dankie aan die voorstelle van Pete en Warren in die kommentaarveld - ek het my oorspronklike toetskode met syne vervang - toets dit self en laat ons weet of dit beter werk):

voer cv2 in

cap = cv2. VideoCapture ("input_video.mp4") druk cap.isOpened () # True = lees video suksesvol. Onwaar - lees nie die video nie. fourcc = cv2. VideoWriter_fourcc (*'XVID') uit = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) druk out.isOpened () # True = skryf video suksesvol uit. Onwaar - versuim om die video uit te skryf. cap.release () out.release ()

Hierdie toets is BAIE BELANGRIK. As u videolêers wil verwerk, moet u seker maak dat Anaconda / Spyder IDE die FFMPEG (videokodek) kan gebruik. Dit het my dae geneem om dit te laat werk. Maar ek hoop dat dit u baie minder tyd sal neem!:) Let op: nog 'n baie belangrike wenk by die gebruik van die Anaconda Spyder IDE. Maak seker dat u die Current Working Directory (CWD) nagaan !!!

Stap 5: Maak kode vir gesigsopsporing

Maak kode vir gesigsopsporing
Maak kode vir gesigsopsporing
Maak kode vir gesigsopsporing
Maak kode vir gesigsopsporing

Doel

In hierdie sessie,

  • Ons sal die basiese beginsels van gesigsopsporing sien met behulp van Haar Feature-gebaseerde Cascade Classifiers
  • Ons sal dieselfde uitbrei vir oogopsporing, ens

Haar-kaskade-opsporing in OpenCV

Hier gaan ons oor opsporing. OpenCV bevat reeds baie vooraf opgeleide klassifiseerders vir gesig, oë, glimlag, ens. Die XML-lêers word in opencv/data/haarcascades/folder gestoor. Kom ons maak gesig- en oogdetektor met OpenCV. Eerstens moet ons die vereiste XML -klassifiseerders laai. Laai dan ons invoerbeeld (of video) in grysskaalmodus OF ons kan die kamera gebruik (vir gesigdeteksie in reële tyd)

invoer numpy as np

invoer 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 ') pet = cv2. VideoCapture (0) terwyl 1: ret, img = cap.read () grys = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) gesigte = face_cascade.detectMultiScale (grys, 1.5, 5) vir (x, y, w, h) in vlakke: cv2.reghoek (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grys [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] oë = eye_cascade.detectMultiScale (roi_gray) vir (ex, ey, ew, eh) in oë: cv2.reghoek (roi_color, (eks, ey), (ex +ew, ey +eh), (0, 255, 0), 2) druk "gevind" +str (len (gesigte)) +"gesig (e)" cv2.imshow ('img', img) k = cv2.waitKey (30) en 0xff as k == 27: breek cap.release () cv2.destroyAllWindows ()

Stap 6: Maak kode om 'n datastel te skep

Maak kode om 'n datastel te skep
Maak kode om 'n datastel te skep
Maak kode om 'n datastel te skep
Maak kode om 'n datastel te skep

Ons doen gesigsherkenning, so u benodig 'n paar gesigfoto's! U kan u eie datastel skep of met een van die beskikbare databasisse begin, https://face-rec.org/databases/ gee u 'n opgedateerde oorsig. Drie interessante databasisse is (dele van die beskrywing word van https://face-rec.org aangehaal):

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Uitgebreide Yale Facedatabase B

HIER gebruik ek my eie dataset….met behulp van die kode wat hieronder gegee word:

invoer numpy as np

invoer cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; terwyl 1: ret, img = cap.read () grys = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) gesigte = face_cascade.detectMultiScale (grys, 1.3, 5) vir (x, y, w, h) in gesigte: sampleN = monsterN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", grys [y: y+h, x: x+w]) cv2.reghoek (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) as monsterN> 20: breek cap.release () cv2.destroyAllWindows ()

Stap 7: Maak kode om die herkenner op te lei

Maak kode om die herkenner op te lei
Maak kode om die herkenner op te lei

Skep die funksie om die opleidingsstel voor te berei

Nou definieer ons 'n funksie

getImagesWithID (pad)

dit neem die absolute pad na die beelddatabasis as invoerargument en gee tuple van 2 lys, een met die opgespoorde vlakke en die ander met die ooreenstemmende etiket vir die gesig. Byvoorbeeld, as die ith -indeks in die lys gesigte die vyfde individu in die databasis verteenwoordig, dan het die ooreenstemmende ith -plek in die lys etikette 'n waarde gelyk aan 5.

Skakel nou die dataset -gesigte (wat in stap 6 geskep word) om na 'n.yml -lêer met behulp van die kode wat hieronder gegee word:

invoer os

invoer numpy as np invoer cv2 van PIL invoer Beeld # Vir gesigsherkenning sal ons die LBPH Face Recognizer -herkenning = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (pad) gesigte = ID's = vir imagePath in imagePaths: # Lees die prentjie en skakel dit oor in grysskaal gesigteImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Kry die etiket van die beeld-ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Ontdek die gesig in die beeld faces.append (faceNP) IDs.append (ID) cv2.imshow ("Gesigte byvoeg vir traning", faceNP) cv2.waitKey (10) terugkeer np.array (ID's), gesigte Ids, gesigte = getImagesWithID (pad) identifierer.train (gesigte, Ids) identifier.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

deur hierdie kode te gebruik, word alle gesigsdatastelle omskep in 'n enkele.yml -lêer …..pad -ligging is ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Stap 8: Maak kode om die gesigte en resultaat te herken

Guyzz, dit is die laaste stap waarin ons die kode kan skep om die gesigte te herken met behulp van u webcam IN HIERDIE STAP IS DAAR TWEE BEDIENINGS WAT GAAN UITVOER …. 1. neem die video op van kamera 2. vergelyk dit met u.yml -lêer

invoer numpy as npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRec; herlaai ("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) terwyl 1: ret, img = cap.read () grys = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) gesigte = face_cascade.detectMultiScale (grys, 1.5, 5) vir (x, y, w, h) in gesigte: cv2.reghoek (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (grys [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' as id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), lettertipe, 255) cv2.imshow ('img', img) as cv2.waitKey (1) == ord ('q'): breek cap.release ()

cv2.destroyAllWindows ()

en uiteindelik sal die resultaat voor u oë kom … u kan ook die zip -lêer aflaai onder die skakel: klik hier om die kodes af te laai, so in hierdie instruksies het ons die taak van gesigsopsporing+herkenning uitgevoer met behulp van OpenCV …. soos hierdie instruksies …. plzzz teken my in en stem vir my …. dankie vriende:)

Aanbeveel: