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)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
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:)
Rekommenderad:
Ta fantastiska bilder med en iPhone: 9 steg (med bilder)
Ta fantastiska bilder med en iPhone: De flesta av oss har en smartphone med oss överallt nuförtiden, så det är viktigt att veta hur du använder din smartphone -kamera för att ta fantastiska bilder! Jag har bara haft en smartphone i ett par år, och jag har älskat att ha en bra kamera för att dokumentera saker jag
Hur: Installera Raspberry PI 4 Headless (VNC) med Rpi-imager och bilder: 7 steg (med bilder)
Hur: Installera Raspberry PI 4 Headless (VNC) med Rpi-imager och bilder: Jag planerar att använda denna Rapsberry PI i ett gäng roliga projekt tillbaka i min blogg. Kolla gärna in det. Jag ville börja använda mitt Raspberry PI men jag hade inte ett tangentbord eller en mus på min nya plats. Det var ett tag sedan jag installerade en hallon
Hur man digitaliserar bilder och filmnegativ med en DSLR: 12 steg (med bilder)
Hur man digitaliserar diabilder och filmnegativ med en DSLR: En mångsidig och stabil inställning för digitalisering av diabilder och negativ med en DSLR eller en kamera med ett makroalternativ. Denna instruerbara är en uppdatering av Hur man digitaliserar 35 mm negativ (uppladdad juli 2011) med flera förbättringar för att utöka dess
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter - Rc helikopter - RC -plan med Arduino: 5 steg (med bilder)
Trådlös fjärrkontroll med 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sändarmottagare för Quadcopter | Rc helikopter | Rc -plan med Arduino: Att driva en Rc -bil | Quadcopter | Drone | RC -plan | RC -båt, vi behöver alltid en mottagare och sändare, antag att för RC QUADCOPTER behöver vi en 6 -kanals sändare och mottagare och den typen av TX och RX är för dyr, så vi kommer att göra en på vår
Hur man tar isär en dator med enkla steg och bilder: 13 steg (med bilder)
Hur man tar isär en dator med enkla steg och bilder: Detta är en instruktion om hur man demonterar en dator. De flesta av de grundläggande komponenterna är modulära och lätt att ta bort. Det är dock viktigt att du är organiserad kring det. Detta hjälper dig att inte förlora delar, och även för att göra ommonteringen