Innehållsförteckning:

Ansiktsigenkänning+igenkänning: 8 steg (med bilder)
Ansiktsigenkänning+igenkänning: 8 steg (med bilder)

Video: Ansiktsigenkänning+igenkänning: 8 steg (med bilder)

Video: Ansiktsigenkänning+igenkänning: 8 steg (med bilder)
Video: OnePlus Nord N100 Smartphone - KOMPLETT ÖVERSIKT 2024, November
Anonim
Image
Image
Ansiktsigenkänning+igenkänning
Ansiktsigenkänning+igenkänning

Detta är ett enkelt exempel på att köra ansiktsigenkänning och igenkänning med OpenCV från en kamera. OBS: JAG GJORT DETTA PROJEKT FÖR SENSORTÄVLING OCH JAG ANVÄNDE KAMERA SOM SENSOR FÖR SPORNING OCH ERKÄNNANDE ANSIKTER. Så, vårt mål I den här sessionen, 1. Installera Anaconda 2. Ladda ner Open CV -paketet 3. Ställ in miljövariabler 4. Testa för att bekräfta 5 Skapa kod för ansiktsigenkänning 6. Skapa kod för att skapa datauppsättning 7. Skapa kod för att träna igenkännaren 8. Skapa kod för att känna igen ansikten och resultat.

Steg 1: Installera Anaconda

Installera Anaconda
Installera Anaconda

Anaconda är i grunden en snyggt förpackad Python IDE som levereras med massor av användbara paket, som NumPy, Pandas, IPython Notebook, etc. Det verkar rekommenderas överallt i det vetenskapliga samfundet. Kolla in Anaconda för att få det installerat.

Steg 2: Ladda ner Open CV Package

Ladda ner Open CV Package
Ladda ner Open CV Package

För det första, gå till den officiella OpenCV -webbplatsen för att ladda ner hela OpenCV -paketet. Välj en version du gillar (2.x eller 3.x). Jag använder Python 2.x och OpenCV 2.x - främst för att det är så här OpenCV -Python -självstudierna är konfigurerade/baserade på.

I mitt fall har jag extraherat paketet (i huvudsak en mapp) direkt till min F -enhet. (F: / opencv).

Steg 3: Ställ in miljövariabler

Ställ in miljövariabler
Ställ in miljövariabler

Kopiera och klistra in filen cv2.pyd

Katalogen Anaconda Site-packages (t.ex. F: / Program Files / Anaconda2 / Lib / site-packages i mitt fall) innehåller Python-paketen som du kan importera. Vårt mål är att kopiera och klistra in cv2.pyd -filen i den här katalogen (så att vi kan använda import cv2 i våra Python -koder.).

För att göra detta, kopiera filen cv2.pyd …

Från denna OpenCV -katalog (början kan vara något annorlunda på din maskin):

# Python 2.7 och 64-bitars maskin: F: / opencv / build / python / 2.7 / x64# Python 2.7 och 32-bitars maskin: F: / opencv / build / python / 2.7 / x84

Till denna Anaconda -katalog (början kan vara något annorlunda på din maskin):

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

Efter att ha utfört detta steg ska vi nu kunna använda import cv2 i Python -kod. MEN, vi måste fortfarande göra lite mer arbete för att få FFMPEG (videokodec) att fungera (för att vi ska kunna göra saker som att bearbeta videor.)

Högerklicka på "Den här datorn" (eller "Den här datorn" i Windows 8.1)-> vänsterklicka på Egenskaper-> vänsterklicka på "Avancerat"-> vänsterklicka på "Miljövariabler …". Lägg till en ny användarvariabel för att peka på OpenCV (antingen x86 för 32-bitars system eller x64 för 64-bitars system.) Jag är för närvarande på en 64-bitars maskin.

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

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

Lägg till %OPENCV_DIR %\ bin i användarvariabelns PATH.

Till exempel ser min PATH -användarvariabel ut så här …

Innan:

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

Efter:

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

Det här är det vi är klara! FFMPEG är redo att användas!

Steg 4: Testa för att bekräfta

Testa för att bekräfta
Testa för att bekräfta
Testa för att bekräfta
Testa för att bekräfta

Vi måste testa om vi nu kan göra dessa i Anaconda (via Spyder IDE):

  • Importera OpenCV -paket
  • Använd verktyget FFMPEG (för att läsa/skriva/bearbeta videor)

Test 1: Kan vi importera OpenCV?

För att bekräfta att Anaconda nu kan importera OpenCV-Python-paketet (nämligen cv2), utfärda dessa i IPython -konsolen:

importera cv2

skriv ut cv2._ version_

Om paketet cv2 importeras ok utan några fel och cv2 -versionen skrivs ut, så är vi alla bra!

Test 2: Kan vi använda FFMPEG -codec?

Placera ett prov

input_video.mp4

videofil i en katalog. Vi vill testa om vi kan:

  • läs denna.mp4 -videofil och
  • skriva ut en ny videofil (kan vara.avi eller.mp4 etc.)

För att göra detta måste vi ha en testpythonkod, kalla den test.py. Placera den i samma katalog som provet

input_video.mp4

fil.

Det här är vad

test.py

kan se ut (Obs: stort tack till Petes och Warrens förslag i kommentarsfältet - jag har bytt ut min ursprungliga testkod med hans - testa den själv och meddela oss om detta fungerar bättre):

importera cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = läs video framgångsrikt. Falskt - misslyckas med att läsa video. fourcc = cv2. VideoWriter_fourcc (*'XVID') ut = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) skriv ut out.isOpened () # True = skriv ut video framgångsrikt. Falskt - misslyckas med att skriva ut video. cap.release () out.release ()

Detta test är MYCKET VIKTIGT. Om du vill bearbeta videofiler måste du se till att Anaconda / Spyder IDE kan använda FFMPEG (videokodec). Det tog mig dagar att få det att fungera. Men jag hoppas att det tar mycket mindre tid!:) Obs: ytterligare ett mycket viktigt tips när du använder Anaconda Spyder IDE. Se till att du kontrollerar Current Working Directory (CWD) !!!

Steg 5: Skapa kod för ansiktsigenkänning

Skapa kod för ansiktsigenkänning
Skapa kod för ansiktsigenkänning
Skapa kod för ansiktsigenkänning
Skapa kod för ansiktsigenkänning

Mål

I denna session,

  • Vi kommer att se grunderna för ansiktsigenkänning med hjälp av Haar Feature-baserade Cascade Classifiers
  • Vi kommer att förlänga detsamma för ögondetektering etc.

Haar-kaskaddetektion i OpenCV

Här kommer vi att hantera upptäckt. OpenCV innehåller redan många förutbildade klassificerare för ansikte, ögon, leende etc. Dessa XML-filer lagras i opencv/data/haarcascades/mapp. Låt oss skapa ansikts- och ögondetektor med OpenCV. Först måste vi ladda de XML -klassificerare som krävs. Ladda sedan vår inmatningsbild (eller video) i gråskala eller ELLER vi kan använda kameran (för ansiktsigenkänning i realtid)

importera 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 haar.xml ') cap = cv2. VideoCapture (0) medan 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansikten = face_cascade.detectMultiScale (grå, 1.5, 5) för (x, y, w, h) i ansikten: 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] ögon = eye_cascade.detectMultiScale (roi_gray) för (ex, ey, ew, eh) i ögon: cv2.rektangel (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (ansikten)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Steg 6: Skapa kod för att skapa datauppsättning

Skapa kod för att skapa datauppsättning
Skapa kod för att skapa datauppsättning
Skapa kod för att skapa datauppsättning
Skapa kod för att skapa datauppsättning

Vi gör ansiktsigenkänning, så du behöver några ansiktsbilder! Du kan antingen skapa din egen dataset eller börja med en av de tillgängliga ansiktsdatabaserna, https://face-rec.org/databases/ ger dig en uppdaterad översikt. Tre intressanta databaser är (delar av beskrivningen citeras från

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Utökad Yale Facedatabase B

HÄR använder jag min egen dataset ….med hjälp av kod som ges nedan:

importera 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; medan 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansikten = face_cascade.detectMultiScale (grå, 1.3, 5) för (x, y, w, h) i ansikten: sampleN = prov N+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) om provN> 20: break cap.release () cv2.destroyAllWindows ()

Steg 7: Skapa kod för att utbilda igenkännaren

Skapa kod för att utbilda igenkännaren
Skapa kod för att utbilda igenkännaren

Skapa funktionen för att förbereda träningsuppsättningen

Nu kommer vi att definiera en funktion

getImagesWithID (sökväg)

som tar den absoluta sökvägen till bilddatabasen som inmatningsargument och returnerar tupel med 2 listor, en som innehåller de detekterade ansiktena och den andra som innehåller motsvarande etikett för det ansiktet. Om till exempel ith -indexet i ansiktslistan representerar den femte individen i databasen, har motsvarande ith -plats i etikettlistan ett värde lika med 5.

Konvertera nu datasetsytorna (som skapas i steg 6) till.yml -fil med hjälp av koden som ges nedan:

importera os

importera numpy som np importera cv2 från PIL import Bild # För ansiktsigenkänning kommer vi LBPH Face Recognizer identifier = 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 (sökväg) ansikten = ID = =] för imagePath i imagePaths: # Läs bilden och konvertera till gråskala ansiktenImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Hämta etiketten för bild-ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Upptäck ansiktet i bildens ansikten.append (faceNP) IDs.append (ID) cv2.imshow ("Lägga till ansikten för traning", faceNP) cv2.waitKey (10) returnera np.array (ID), ansikten Ids, ansikten = getImagesWithID (sökväg) identifierer.train (ansikten, Id) igenkännare.spara ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

genom att använda den här koden omvandlas all ansiktsdataset till en enda.yml -fil …..vägsplats är ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Steg 8: Skapa kod för att känna igen ansikten och resultatet

Guyzz detta är det sista steget där vi kan skapa koden för att känna igen ansikten med hjälp av din webbkameraINDETTA STEGET ÄR Två VERKSAMHETER SOM KOMMER ATT UTFÖRA …. 1. fånga videon från cam 2. jämföra den med din.yml -fil

importera 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) medan 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansikten = face_cascade.detectMultiScale (grå, 1,5, 5) för (x, y, w, h) i ansikten: 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 ()

och slutligen kommer resultatet att komma framför dina ögon … … du kan också ladda ner zip -filen från nedanför länken: Klicka här för att ladda ner koder Så, i denna instruerbara utförde vi uppgiften att ansiktsigenkänning+igenkänning med OpenCV …..om du som den här instruerbara … plzzz prenumerera på mig och rösta på mig …. tack vänner:)

Rekommenderad: