Innehållsförteckning:
- Steg 1: Installera Anaconda
- Steg 2: Ladda ner Open CV Package
- Steg 3: Ställ in miljövariabler
- Steg 4: Testa för att bekräfta
- Steg 5: Skapa kod för ansiktsigenkänning
- Steg 6: Skapa kod för att skapa datauppsättning
- Steg 7: Skapa kod för att utbilda igenkännaren
- Steg 8: Skapa kod för att känna igen ansikten och resultatet
Video: Ansiktsigenkänning+igenkänning: 8 steg (med bilder)
2025 Författare: John Day | [email protected]. Senast ändrad: 2025-01-13 06:58
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
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
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
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
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
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
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 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:)