Sisukord:
Video: Näotuvastus ja äratundmine: 8 sammu (piltidega)
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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
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
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
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
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
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
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
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:)