Innholdsfortegnelse:

Ansiktsgjenkjenning+gjenkjenning: 8 trinn (med bilder)
Ansiktsgjenkjenning+gjenkjenning: 8 trinn (med bilder)

Video: Ansiktsgjenkjenning+gjenkjenning: 8 trinn (med bilder)

Video: Ansiktsgjenkjenning+gjenkjenning: 8 trinn (med bilder)
Video: Противовирусная настройка иммунитета 2024, November
Anonim
Image
Image
Ansiktsgjenkjenning+gjenkjenning
Ansiktsgjenkjenning+gjenkjenning

Dette er et enkelt eksempel på kjøring av ansiktsgjenkjenning og gjenkjenning med OpenCV fra et kamera. MERK: Jeg laget dette prosjektet for sensorkonkurranse, og jeg brukte kameraet som en sensor for å spore og anerkjenne ansikter. Så, målet vårt i denne økten, 1. installer Anaconda 2. last ned åpen CV -pakke 3. angi miljøvariabler 4. test for å bekrefte 5. Lag kode for ansiktsgjenkjenning 6. Lag kode for å lage datasett 7. Lag kode for å trene gjenkjenneren 8. Lag kode for å gjenkjenne ansikter og resultat.

Trinn 1: Installer Anaconda

Installer Anaconda
Installer Anaconda

Anaconda er egentlig en pent pakket Python IDE som leveres med tonnevis av nyttige pakker, for eksempel NumPy, Pandas, IPython Notebook, etc. Det ser ut til å bli anbefalt overalt i det vitenskapelige samfunnet. Ta en titt på Anaconda for å få det installert.

Trinn 2: Last ned Open CV Package

Last ned Open CV Package
Last ned Open CV Package

Gå først til det offisielle OpenCV -nettstedet for å laste ned hele OpenCV -pakken. Velg en versjon du liker (2.x eller 3.x). Jeg er på Python 2.x og OpenCV 2.x - hovedsakelig fordi det er slik OpenCV -Python Tutorials er satt opp/basert på.

I mitt tilfelle har jeg pakket ut pakken (egentlig en mappe) rett til min F -stasjon. (F: / opencv).

Trinn 3: Angi miljøvariabler

Sett miljøvariabler
Sett miljøvariabler

Kopier og lim inn cv2.pyd -filen

Katalogen Anaconda Site-packages (f.eks. F: / Program Files / Anaconda2 / Lib / site-packages i mitt tilfelle) inneholder Python-pakkene du kan importere. Målet vårt er å kopiere og lime inn cv2.pyd -filen i denne katalogen (slik at vi kan bruke import cv2 i våre Python -koder.).

For å gjøre dette, kopierer du cv2.pyd -filen …

Fra denne OpenCV -katalogen (begynnelsesdelen kan være litt annerledes på maskinen din):

# Python 2.7 og 64-biters maskin: F: / opencv / build / python / 2.7 / x64# Python 2.7 og 32-biters maskin: F: / opencv / build / python / 2.7 / x84

Til denne Anaconda -katalogen (begynnelsesdelen kan være litt annerledes på maskinen din):

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

Etter å ha utført dette trinnet skal vi nå kunne bruke import cv2 i Python -kode. MEN, vi må fortsatt gjøre litt mer arbeid for å få FFMPEG (videokodek) til å fungere (for å gjøre oss i stand til å gjøre ting som å behandle videoer.)

Høyreklikk på "Min datamaskin" (eller "Denne PCen" i Windows 8.1)-> venstreklikk Egenskaper-> venstreklikk "Avansert" -fanen-> venstreklikk "Miljøvariabler …" -knappen. Legg til en ny brukervariabel for å peke på OpenCV (enten x86 for 32-biters system eller x64 for 64-biters system.) Jeg er for tiden på en 64-biters maskin.

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

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

Legg til %OPENCV_DIR %\ bin i brukervariabelbanen.

For eksempel ser PATH -brukervariabelen min slik ut …

Før:

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

Etter:

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

Dette er det vi er ferdige med! FFMPEG er klar til bruk!

Trinn 4: Test for å bekrefte

Test for å bekrefte
Test for å bekrefte
Test for å bekrefte
Test for å bekrefte

Vi må teste om vi nå kan gjøre disse i Anaconda (via Spyder IDE):

  • Importer OpenCV -pakken
  • Bruk FFMPEG -verktøyet (for å lese/skrive/behandle videoer)

Test 1: Kan vi importere OpenCV?

For å bekrefte at Anaconda nå er i stand til å importere OpenCV-Python-pakken (nemlig cv2), utsted disse i IPython -konsollen:

importer cv2

skriv ut cv2._ versjon_

Hvis pakken cv2 er importert ok uten feil, og cv2 -versjonen er skrevet ut, så er vi alle flinke!

Test 2: Kan vi bruke FFMPEG -kodeken?

Plasser en prøve

input_video.mp4

videofil i en katalog. Vi ønsker å teste om vi kan:

  • les denne.mp4 -videofilen og
  • skrive ut en ny videofil (kan være.avi eller.mp4 etc.)

For å gjøre dette må vi ha en testpythonkode, kall den test.py. Plasser den i samme katalog som prøven

input_video.mp4

fil.

Dette er hva

test.py

kan se ut (Merk: tusen takk til Petes og Warrens forslag i kommentarfeltet - jeg har byttet ut den originale testkoden med hans - vennligst test den selv og gi oss beskjed om dette fungerer bedre):

importer cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = les videoen vellykket. Falsk - unnlater å lese video. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) skriv ut.isOpened () # True = skriv ut video vellykket. Falskt - unnlater å skrive ut video. cap.release () out.release ()

Denne testen er VELDIG VIKTIG. Hvis du vil behandle videofiler, må du sørge for at Anaconda / Spyder IDE kan bruke FFMPEG (videokodek). Det tok meg dager å få det til å fungere. Men jeg håper det tar mye mindre tid!:) Merk: et annet veldig viktig tips når du bruker Anaconda Spyder IDE. Sørg for å sjekke Current Working Directory (CWD) !!!

Trinn 5: Lag kode for ansiktsgjenkjenning

Lag kode for ansiktsgjenkjenning
Lag kode for ansiktsgjenkjenning
Lag kode for ansiktsgjenkjenning
Lag kode for ansiktsgjenkjenning

Mål

I denne økten,

  • Vi vil se det grunnleggende om ansiktsgjenkjenning ved hjelp av Haar Feature-baserte Cascade Classifiers
  • Vi vil utvide det samme for øyedeteksjon etc.

Haar-cascade Detection i OpenCV

Her vil vi håndtere deteksjon. OpenCV inneholder allerede mange forhåndsutdannede klassifisere for ansikt, øyne, smil osv. Disse XML-filene lagres i opencv/data/haarcascades/mappe. La oss lage ansikts- og øyedetektor med OpenCV. Først må vi laste inn de nødvendige XML -klassifisererne. Last deretter inndatabildet (eller videoen) i gråtonemodus ELLER vi kan bruke kamera (for sanntids ansiktsgjenkjenning)

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

Trinn 6: Lag kode for å lage datasett

Lag kode for å lage datasett
Lag kode for å lage datasett
Lag kode for å lage datasett
Lag kode for å lage datasett

Vi driver med ansiktsgjenkjenning, så du trenger noen ansiktsbilder! Du kan enten lage ditt eget datasett eller starte med en av de tilgjengelige ansiktsdatabasene, https://face-rec.org/databases/ gir deg en oppdatert oversikt. Tre interessante databaser er (deler av beskrivelsen er sitert fra

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

HER bruker jeg mitt eget datasett …. Ved hjelp av koden som er gitt nedenfor:

importer 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) ansikter = face_cascade.detectMultiScale (grå, 1.3, 5) for (x, y, w, h) i ansikter: 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 ()

Trinn 7: Lag kode for å trene gjenkjenneren

Lag kode for å trene gjenkjenneren
Lag kode for å trene gjenkjenneren

Lag funksjonen for å forberede treningssettet

Nå skal vi definere en funksjon

getImagesWithID (sti)

som tar den absolutte banen til bildedatabasen som inputargument og returnerer tupel av 2 liste, den ene inneholder de oppdagede ansiktene og den andre som inneholder den tilhørende etiketten for det ansiktet. Hvis for eksempel ith -indeksen i ansiktslisten representerer det femte individet i databasen, har den tilsvarende ith -plasseringen i listen over etiketter verdi lik 5.

Konverter nå datasettflatene (som er opprettet i trinn 6) til.yml -fil ved hjelp av koden som er gitt nedenfor:

import os

import numpy as np import cv2 fra PIL import Bilde # For ansiktsgjenkjenning vil vi LBPH Face Recognizer -gjenkjenningen = 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) ansikter = IDer = for imagePath i imagePaths: # Les bildet og konverter til ansikt i gråtonerImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Få etiketten til bilde-ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Oppdag ansiktet i bildet ansikter.append (faceNP) IDs.append (ID) cv2.imshow ("Legge til ansikter for traning", faceNP) cv2.waitKey (10) returnere np.array (ID), ansikter Ids, ansikter = getImagesWithID (bane) anerkjennere.trening (ansikter, Ids) gjenkjenne.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

ved å bruke denne koden konverteres alle ansiktsdatasett til en.yml -fil…..baneplassering er ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Trinn 8: Lag kode for å gjenkjenne ansikter og resultat

Guyzz, dette er det siste trinnet der vi kan lage koden for å gjenkjenne ansiktene ved hjelp av webkameraet DITT TRIN ER DET TO OPERASJONER SOM KOMMER Å UTFØRE…. 1. ta videoen fra kamera 2. sammenligne den med.yml -filen

importer numpy som 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) ansikter = face_cascade.detectMultiScale (grå, 1,5, 5) for (x, y, w, h) i ansikter: 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), font, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

og til slutt vil resultatet komme foran øynene dine …. du kan også laste ned zip -filen fra lenken nedenfor: Klikk her for å laste ned kodene Så i denne instruksen utførte vi oppgaven med ansiktsgjenkjenning+gjenkjenning ved hjelp av OpenCV …..hvis du som denne instruerbare….. plzzz abonnere på meg og stemme på meg….. takk venner:)

Anbefalt: