Përmbajtje:

Zbulimi i fytyrës+njohja: 8 hapa (me fotografi)
Zbulimi i fytyrës+njohja: 8 hapa (me fotografi)

Video: Zbulimi i fytyrës+njohja: 8 hapa (me fotografi)

Video: Zbulimi i fytyrës+njohja: 8 hapa (me fotografi)
Video: ТАКОВ МОЙ ПУТЬ В L4D2 2024, Nëntor
Anonim
Image
Image
Zbulimi i fytyrës+njohja
Zbulimi i fytyrës+njohja

Ky është një shembull i thjeshtë i funksionimit të zbulimit dhe njohjes së fytyrës me OpenCV nga një aparat fotografik. SH NOTNIM: E B MR KT PRO PROJEKT P FORR KONKURS SENSOR DHE P USRDOR KAMERA SI SENSOR P TRR GJYKIM DHE FYTYRAT E NJOHJES. Pra, Qëllimi ynëNë këtë sesion, 1. Instaloni Anaconda 2. Shkarkoni Paketën e CV -së së Hapur 3. Vendosni Variablat Mjedisore 4. Testoni për të konfirmuar 5 Bëni kod për zbulimin e fytyrës 6. Bëni kod për të krijuar grupin e të dhënave 7. Bëni kod për të trajnuar njohësin 8. Bëni kod për të njohur fytyrat & Rezultati.

Hapi 1: Instaloni Anaconda

Instaloni Anaconda
Instaloni Anaconda

Anaconda është në thelb një Python IDE e paketuar bukur që transportohet me mijëra pako të dobishme, të tilla si NumPy, Pandas, IPython Notebook, etj. Duket se rekomandohet kudo në komunitetin shkencor. Shikoni Anaconda për ta instaluar.

Hapi 2: Shkarkoni Paketën e Hapur të CV -së

Shkarkoni Paketën e Hapur të CV -së
Shkarkoni Paketën e Hapur të CV -së

Së pari, shkoni në faqen zyrtare të OpenCV për të shkarkuar paketën e plotë të OpenCV. Zgjidhni një version që ju pëlqen (2.x ose 3.x). Unë jam në Python 2.x dhe OpenCV 2.x - kryesisht sepse kështu janë vendosur/bazuar në Udhëzimet OpenCV -Python.

Në rastin tim, unë kam nxjerrë paketën (në thelb një dosje) direkt në diskun tim F. (F: / opencv).

Hapi 3: Vendosni ndryshoret mjedisore

Vendosni Variablat Mjedisorë
Vendosni Variablat Mjedisorë

Kopjoni dhe ngjisni skedarin cv2.pyd

Drejtoria e paketave Anaconda Site (p.sh. F: / Program Files / Anaconda2 / Lib / site-paketat në rastin tim) përmban paketat Python që mund të importoni. Qëllimi ynë është të kopjojmë dhe ngjisim skedarin cv2.pyd në këtë drejtori (në mënyrë që të mund të përdorim cv2 të importit në kodet tona Python.).

Për ta bërë këtë, kopjoni skedarin cv2.pyd…

Nga kjo drejtori OpenCV (pjesa fillestare mund të jetë paksa e ndryshme në kompjuterin tuaj):

# Makinë Python 2.7 dhe 64-bit: F: / opencv / build / python / 2.7 / x64# Python 2.7 dhe makinë 32-bit: F: / opencv / build / python / 2.7 / x84

Për këtë drejtori Anaconda (pjesa fillestare mund të jetë paksa e ndryshme në makinën tuaj):

F: / Program Files / Anaconda2 / Lib / pako-faqe

Pas kryerjes së këtij hapi tani do të jemi në gjendje të përdorim importin cv2 në kodin Python. POR, ne ende duhet të bëjmë pak më shumë punë për të punuar FFMPEG (video codec) (për të na mundësuar që të bëjmë gjëra të tilla si përpunimi i videove.)

Klikoni me të djathtën mbi "Kompjuteri im" (ose "Ky kompjuter" në Windows 8.1)-> Klikoni me të majtën në "Karakteristikat"-> klikoni me të majtën në skedën "Avancuar"-> kliko me të majtën në butonin "Ndryshoret e mjedisit …". Shtoni një ndryshore të re të përdoruesit për të treguar OpenCV (ose x86 për sistemin 32-bit ose x64 për sistemin 64-bit.) Unë jam aktualisht në një makinë 64-bit.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Shtojeni %OPENCV_DIR %\ bin në Rrugën e ndryshueshme të përdoruesit.

Për shembull, ndryshorja ime e përdoruesit PATH duket kështu…

Para:

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

Pas:

F: / Përdoruesit / Johnny / Anaconda; C: / Përdoruesit / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

Kjo është ajo që ne kemi mbaruar! FFMPEG është gati për t’u përdorur!

Hapi 4: Test për të konfirmuar

Test për të konfirmuar
Test për të konfirmuar
Test për të konfirmuar
Test për të konfirmuar

Ne duhet të testojmë nëse tani mund t'i bëjmë këto në Anaconda (përmes Spyder IDE):

  • Importo paketën OpenCV
  • Përdorni mjetin FFMPEG (për të lexuar/shkruar/përpunuar video)

Testi 1: A mund të importojmë OpenCV?

Për të kuptuar që Anaconda tani është në gjendje të importojë paketën OpenCV-Python (domethënë, cv2), lëshojini ato në Konsolen IPython:

import cv2

print cv2._ version_

Nëse paketa cv2 importohet në rregull pa gabime, dhe versioni cv2 shtypet, atëherë të gjithë jemi mirë!

Testi 2: A mund të përdorim kodekun FFMPEG?

Vendosni një mostër

video_ input.mp4

skedar video në një drejtori. Ne duam të testojmë nëse mundemi:

  • lexoni këtë skedar video.mp4, dhe
  • shkruani një skedar të ri video (mund të jetë.avi ose.mp4 etj.)

Për ta bërë këtë ne duhet të kemi një kod python testues, ta quajmë test.py. Vendoseni atë në të njëjtën drejtori me mostrën

video_ input.mp4

dosje.

Kjo është ajo që

test.py

mund të duket si (Shënim: shumë falë sugjerimeve të Pete dhe Warren në fushën e komenteve - kam zëvendësuar kodin tim origjinal të testit me të tij - ju lutemi provojeni vetë dhe na tregoni nëse kjo funksionon më mirë):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = lexoni videon me sukses. E rreme - nuk arrin të lexojë video. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", Fourcc, 20.0, (640, 360)) print out.isOpened () # E vërtetë = shkruaj video me sukses. False - nuk arrin të shkruajë video. cap.release () out.release ()

Ky test është SHUM I RNDSISHM. Nëse dëshironi të përpunoni skedarët video, duhet të siguroheni që Anaconda / Spyder IDE mund të përdorë FFMPEG (kodek video). M’u deshën ditë që ta punoja. Por shpresoj se do t'ju marrë shumë më pak kohë!:) Shënim: një këshillë shumë e rëndësishme kur përdorni IDE Anaconda Spyder. Sigurohuni që të kontrolloni Drejtorinë e Punës aktuale (CWD) !!!

Hapi 5: Bëni Kodin për Zbulimin e Fytyrës

Bëni kodin për zbulimin e fytyrës
Bëni kodin për zbulimin e fytyrës
Bëni kodin për zbulimin e fytyrës
Bëni kodin për zbulimin e fytyrës

Qëllimi

Në këtë seancë,

  • Ne do të shohim bazat e zbulimit të fytyrës duke përdorur Klasifikuesit e Kaskadës të bazuar në Karakteristikat Haar
  • Ne do të shtrijmë të njëjtën gjë për zbulimin e syve, etj

Zbulimi i kaskadës Haar në OpenCV

Këtu do të merremi me zbulimin. OpenCV tashmë përmban shumë klasifikues të para-stërvitur për fytyrën, sytë, buzëqeshjen etj. Ato skedarë XML ruhen në opencv/data/haarcascades/folder. Le të krijojmë detektor të fytyrës dhe syve me OpenCV. Së pari ne duhet të ngarkojmë klasifikuesit e kërkuar XML. Pastaj ngarkoni imazhin tonë hyrës (ose video) në modalitetin gri OSE mund të përdorim kamerën (për zbulimin e fytyrës në kohë reale)

importoni numpy si np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascade/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascade/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/.xml ') cap = cv2. VideoCapture (0) ndërsa 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) fytyrat = face_cascade.detectMultiScale (gri, 1.5, 5) për (x, y, w, h) në fytyra: cv2. drejtkëndësh (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = gri [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) për (ish, ey, ew, eh) në sy: cv2.rekëndësh (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (fytyrat)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff nëse k == 27: thyeni kapakun.release () cv2.destroyAllWindows ()

Hapi 6: Bëni kodin për të krijuar grup të dhënash

Bëni kodin për të krijuar një grup të dhënash
Bëni kodin për të krijuar një grup të dhënash
Bëni kodin për të krijuar një grup të dhënash
Bëni kodin për të krijuar një grup të dhënash

Ne po bëjmë njohjen e fytyrës, kështu që do t'ju duhet disa imazhe të fytyrës! Ju ose mund të krijoni bazën e të dhënave tuaja ose të filloni me një nga bazat e të dhënave të disponueshme të fytyrës, https://face-rec.org/databases/ ju jep një përmbledhje të azhurnuar. Tre bazat e të dhënave interesante janë (pjesë të përshkrimit janë cituar nga

  • Baza e të dhënave AT&T
  • Baza e të dhënave të Yale A
  • Baza e zgjeruar e Yale Facedatabase B

KERTU jam duke përdorur të dhënat e mia…. Me ndihmën e kodit i cili është dhënë më poshtë:

importoni numpy si np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter id user') mostërN = 0; ndërsa 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) fytyra = face_cascade.detectMultiScale (gri, 1.3, 5) për (x, y, w, h) në fytyrat: mostërN = mostraN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/faceData/User."+str (id)+"."+str (sampleN)+".jpg", gri [y: y+h, x: x+w]) cv2.rekëndësh (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKy (100) cv2.imshow ('img', img) cv2.waitKelës (1) nëse mostra N> 20: thyerja e kapakut. lëshimi () cv2.destroyAllWindows ()

Hapi 7: Krijoni kod për të trajnuar njohësin

Bëni kod për të trajnuar njohësin
Bëni kod për të trajnuar njohësin

Krijoni funksionin për të përgatitur grupin e trajnimit

Tani, ne do të përcaktojmë një funksion

getImagesWithID (rruga)

që merr rrugën absolute në bazën e të dhënave të imazheve si argument hyrës dhe kthen dyfishin e listës 2, njëra që përmban fytyrat e zbuluara dhe tjetra që përmban etiketën përkatëse për atë faqe. Për shembull, nëse indeksi ith në listën e fytyrave përfaqëson individin e 5 -të në bazën e të dhënave, atëherë vendndodhja përkatëse me listën e etiketave ka vlerë të barabartë me 5.

Tani shndërroni fytyrat e të dhënave (e cila është krijuar në hapin 6) në skedar.yml me ndihmën e kodit i cili është dhënë më poshtë:

importo os

import numpy si np import cv2 nga PIL import Image # Për njohjen e fytyrës ne do të njohim LBPH Face Recognizer = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (shteg) fytyrat = IDs = për imagePath në imagePaths: # Lexoni imazhin dhe shndërrohuni në fytyrë gri # Merrni etiketën e imazhit ID = int (os.path.split (imagePath) [-1].split (".") [1]) # # Zbuloni fytyrën në fytyrat e figurës. Bashkëngjitni (faceNP) IDs.append (ID) cv2.imshow ("Shtimi i fytyrave për kalimin", faceNP) cv2.waitKey (10) ktheje np.array (ID), fytyra Ids, fytyra = getImagesWithID (path) njohës. Trajnim (fytyra, ID) njohës.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

duke përdorur këtë kod të gjithë grupin e të dhënave të fytyrës të konvertuar në një skedar të vetëm.yml …..vendndodhja e shtegut është ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Hapi 8: Bëni kod për të njohur fytyrat dhe rezultatin

Guyzz ky është hapi i fundit në të cilin ne mund të krijojmë kodin për të njohur fytyrat me ndihmën e kamerës suaj në internet KIST ST HAPI KA JASHTO DY OPERACIONE QIC DUHEN T P KRYEN…. 1. kapjen e videos nga kamera 2. krahasojeni atë me skedarin tuaj.yml

import numpy si npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecizer 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) ndërsa 1: ret, img = cap.read () gri = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) fytyra = face_cascade.detectMultiScale (gri, 1.5, 5) për (x, y, w, h) në fytyrat: cv2. rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec. parashiko (gri [y: y+h, x: x+w]) nëse (id == 2): id = "alok" nëse id == 1: id = "alok" nëse id == 3: id = "anjali" nëse id == 4: id = "Gaurav" nëse id = = 5: id = 'rahul' nëse id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) nëse cv2.waitKey (1) == ord ('q'): thyerja e kapakut. lëshimi ()

cv2.destroyAllWindows ()

dhe në fund rezultati do të vijë para syve tuaj …… gjithashtu mund të shkarkoni skedarin zip nga poshtë lidhjes: Klikoni këtu për të shkarkuar kodet Pra, në këtë udhëzues kemi kryer detyrën e zbulimit të fytyrës+njohjes duke përdorur OpenCV…..nëse ju si kjo e mësueshme….. plzzz më regjistroni dhe votoni për mua…..faleminderit miq:)

Recommended: