Indholdsfortegnelse:

Ansigtsregistrering+genkendelse: 8 trin (med billeder)
Ansigtsregistrering+genkendelse: 8 trin (med billeder)

Video: Ansigtsregistrering+genkendelse: 8 trin (med billeder)

Video: Ansigtsregistrering+genkendelse: 8 trin (med billeder)
Video: Qigong for begyndere. Til led, rygsøjle og energigenvinding. 2024, Juli
Anonim
Image
Image
Ansigtsregistrering+genkendelse
Ansigtsregistrering+genkendelse

Dette er et enkelt eksempel på kørende ansigtsregistrering og genkendelse med OpenCV fra et kamera. BEMÆRK: Jeg lavede dette projekt til sensorkonkurrence, og jeg brugte kameraet som en sensor til at spore og anerkende ansigter. Så, vores mål i denne session, 1. Installer Anaconda 2. Download Åben CV -pakke 3. Indstil miljøvariabler 4. Test for at bekræfte 5. Lav kode til ansigtsgenkendelse 6. Lav kode for at oprette datasæt 7. Lav kode for at træne genkenderen 8. Lav kode for at genkende ansigter og resultat.

Trin 1: Installer Anaconda

Installer Anaconda
Installer Anaconda

Anaconda er i det væsentlige en pænt pakket Python IDE, der leveres med masser af nyttige pakker, såsom NumPy, Pandas, IPython Notebook osv. Det synes at blive anbefalet overalt i det videnskabelige samfund. Tjek Anaconda for at få det installeret.

Trin 2: Download Open CV Package

Download Open CV Package
Download Open CV Package

For det første skal du gå til det officielle OpenCV -websted for at downloade den komplette OpenCV -pakke. Vælg en version, du kan lide (2.x eller 3.x). Jeg er på Python 2.x og OpenCV 2.x - hovedsageligt fordi det er sådan OpenCV -Python Tutorials er opsat/baseret på.

I mit tilfælde har jeg hentet pakken (hovedsagelig en mappe) direkte til mit F -drev. (F: / opencv).

Trin 3: Angiv miljøvariabler

Indstil miljøvariabler
Indstil miljøvariabler

Kopier og indsæt cv2.pyd -filen

Biblioteket Anaconda Site-packages (f.eks. F: / Program Files / Anaconda2 / Lib / site-pakker i mit tilfælde) indeholder de Python-pakker, du kan importere. Vores mål er at kopiere og indsætte cv2.pyd -filen i denne mappe (så vi kan bruge import cv2 i vores Python -koder.).

For at gøre dette skal du kopiere filen cv2.pyd …

Fra dette OpenCV -bibliotek (begyndelsesdelen kan være lidt anderledes på din maskine):

# Python 2.7 og 64-bit maskine: F: / opencv / build / python / 2.7 / x64# Python 2.7 og 32-bit maskine: F: / opencv / build / python / 2.7 / x84

Til dette Anaconda -bibliotek (begyndelsesdelen kan være lidt anderledes på din maskine):

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

Efter at have udført dette trin skal vi nu kunne bruge import cv2 i Python -kode. MEN vi skal stadig gøre lidt mere arbejde for at få FFMPEG (videocodec) til at fungere (for at vi kan gøre ting som at behandle videoer.)

Højreklik på "Denne computer" (eller "Denne pc" i Windows 8.1)-> venstreklik på Egenskaber-> venstreklik på "Avanceret" fanen-> venstreklik på "Miljøvariabler …". Tilføj en ny brugervariabel for at pege på OpenCV (enten x86 for 32-bit system eller x64 for 64-bit system.) Jeg er i øjeblikket på en 64-bit maskine.

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

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

Tilføj %OPENCV_DIR %\ bin til brugervariabelstien.

For eksempel ser min PATH -brugervariabel sådan ud …

Før:

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

Efter:

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

Det er det, vi er færdige! FFMPEG er klar til brug!

Trin 4: Test for at bekræfte

Test for at bekræfte
Test for at bekræfte
Test for at bekræfte
Test for at bekræfte

Vi skal teste, om vi nu kan gøre disse i Anaconda (via Spyder IDE):

  • Importer OpenCV -pakke
  • Brug FFMPEG -værktøjet (til at læse/skrive/behandle videoer)

Test 1: Kan vi importere OpenCV?

For at bekræfte, at Anaconda nu er i stand til at importere OpenCV-Python-pakken (nemlig cv2), udsted disse i IPython -konsollen:

import cv2

print cv2._ version_

Hvis pakken cv2 er importeret ok uden fejl, og cv2 -versionen er udskrevet, så er vi alle gode!

Test 2: Kan vi bruge FFMPEG codec?

Placer en prøve

input_video.mp4

videofil i et bibliotek. Vi vil teste, om vi kan:

  • læs denne.mp4 -videofil og
  • skrive en ny videofil (kan være.avi eller.mp4 osv.)

For at gøre dette skal vi have en test -python -kode, kald den test.py. Placer det i samme bibliotek som prøven

input_video.mp4

fil.

Det er hvad

test.py

kan se ud (Bemærk: mange tak til Petes og Warrens forslag i kommentarfeltet - jeg har erstattet min originale testkode med hans - prøv det selv og lad os vide, om dette fungerer bedre):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = læs video med succes. Falsk - undlader at læse video. fourcc = cv2. VideoWriter_fourcc (*'XVID') ud = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) udskrives.isOpened () # True = skriv video ud med succes. Falsk - undlader at skrive video ud. cap.release () out.release ()

Denne test er MEGET VIGTIG. Hvis du gerne vil behandle videofiler, skal du sikre, at Anaconda / Spyder IDE kan bruge FFMPEG (videocodec). Det tog mig dage at få det til at fungere. Men jeg håber, det ville tage dig meget mindre tid!:) Bemærk: endnu et meget vigtigt tip, når du bruger Anaconda Spyder IDE. Sørg for at tjekke den nuværende arbejdsmappe (CWD) !!!

Trin 5: Lav kode til ansigtsregistrering

Lav kode til ansigtsgenkendelse
Lav kode til ansigtsgenkendelse
Lav kode til ansigtsgenkendelse
Lav kode til ansigtsgenkendelse

Mål

I denne session,

  • Vi vil se det grundlæggende i ansigtsgenkendelse ved hjælp af Haar Feature-baserede Cascade Classifiers
  • Vi udvider det samme til øjenpåvisning osv

Haar-cascade Detection i OpenCV

Her vil vi beskæftige os med afsløring. OpenCV indeholder allerede mange foruddannede klassifikatorer til ansigt, øjne, smil osv. Disse XML-filer gemmes i opencv/data/haarcascades/mappe. Lad os oprette ansigts- og øjendetektor med OpenCV. Først skal vi indlæse de nødvendige XML -klassifikatorer. Indlæs derefter vores inputbillede (eller video) i gråtonetilstand ELLER vi kan bruge kamera (til ansigtsregistrering i realtid)

import numpy som np

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) mens 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansigter = face_cascade.detectMultiScale (grå, 1.5, 5) for (x, y, w, h) i ansigter: cv2.rektangel (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grå [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] øjne = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) i øjne: cv2.rektangel (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "fundet" +str (len (ansigter)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Trin 6: Opret kode for at oprette datasæt

Opret kode for at oprette datasæt
Opret kode for at oprette datasæt
Opret kode for at oprette datasæt
Opret kode for at oprette datasæt

Vi laver ansigtsgenkendelse, så du skal bruge nogle ansigtsbilleder! Du kan enten oprette dit eget datasæt eller starte med en af de tilgængelige ansigtsdatabaser, https://face-rec.org/databases/ giver dig en opdateret oversigt. Tre interessante databaser er (dele af beskrivelsen er citeret fra

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

HER bruger jeg mit eget datasæt …. Ved hjælp af kode, som er angivet nedenfor:

import numpy som np

import 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; mens 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansigter = face_cascade.detectMultiScale (grå, 1.3, 5) for (x, y, w, h) i ansigter: sampleN = prøveN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", grå [y: y+h, x: x+w]) cv2.rektangel (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) hvis prøveN> 20: break cap.release () cv2.destroyAllWindows ()

Trin 7: Opret kode for at træne genkenderen

Opret kode for at træne genkenderen
Opret kode for at træne genkenderen

Opret funktionen for at forberede træningssættet

Nu vil vi definere en funktion

getImagesWithID (sti)

der tager den absolutte sti til billeddatabasen som inputargument og returnerer tupel af 2 liste, den ene indeholder de detekterede ansigter og den anden indeholder den tilsvarende etiket for dette ansigt. For eksempel, hvis ith -indekset på ansigtslisten repræsenterer det femte individ i databasen, har den tilsvarende ith -placering på listen over etiketter en værdi svarende til 5.

Konverter nu datasættets ansigter (som oprettes i trin 6) til.yml -fil ved hjælp af kode, som er angivet nedenfor:

import os

import numpy as np import cv2 fra PIL import Billede # Til ansigtsgenkendelse vil vi LBPH Face Recognizer -genkenderen = 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 (sti) ansigter = ID'er = for imagePath i imagePaths: # Læs billedet og konverter til gråtoner ansigterImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Få etiketten til billed-ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Find ansigtet i billedet ansigter. Tilføj (faceNP) IDs.append (ID) cv2.imshow ("Tilføjelse af ansigter til traning", faceNP) cv2.waitKey (10) returner np.array (ID'er), ansigter Ids, ansigter = getImagesWithID (sti) anerkender.train (ansigter, Ids) anerkender.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

ved hjælp af denne kode konverteres alle ansigtsdatasæt til en enkelt.yml -fil …..baneplacering er ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Trin 8: Opret kode for at genkende ansigter og resultat

Guyzz, dette er det sidste trin, hvor vi kan oprette koden til at genkende ansigterne ved hjælp af dit webcam I DETTE TRIN ER DER TO OPERATIONER, DER SKAL UDFØRE…. 1. optagelse af videoen fra cam 2. sammenligne den med din.yml -fil

import 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.createLBPHFaceR; 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) mens 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansigter = face_cascade.detectMultiScale (grå, 1,5, 5) for (x, y, w, h) i ansigter: cv2.rektangel (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (grå [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' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), skrifttype, 255) cv2.imshow ('img', img) hvis cv2.waitKey (1) == ord ('q'): afbryd cap.release ()

cv2.destroyAllWindows ()

og endelig vil resultatet komme foran dine øjne …. du kan også downloade zip -filen fra nedenstående link: Klik her for at downloade koderne Så i denne instruktive udførte vi opgaven med ansigtsgenkendelse+genkendelse ved hjælp af OpenCV …..hvis du som denne instruerbare …. plzzz abonnere mig og stemme på mig …. tak venner:)

Anbefalede: