Inhoudsopgave:
- Stap 1: installeer Anaconda
- Stap 2: Download Open CV Pakket
- Stap 3: Omgevingsvariabelen instellen
- Stap 4: Test om te bevestigen
- Stap 5: maak een code voor gezichtsdetectie
- Stap 6: maak code om dataset te maken
- Stap 7: Maak code om de herkenning te trainen
- Stap 8: Maak een code om de gezichten en het resultaat te herkennen
Video: Gezichtsdetectie + herkenning - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Dit is een eenvoudig voorbeeld van het uitvoeren van gezichtsdetectie en -herkenning met OpenCV vanaf een camera. OPMERKING: IK HEB DIT PROJECT GEMAAKT VOOR SENSORWEDSTRIJD EN IK GEBRUIK DE CAMERA ALS SENSOR OM GEZICHTEN TE VOLGEN EN HERKENNEN. Dus, ons doel In deze sessie: 1. Installeer Anaconda 2. Download Open CV-pakket 3. Stel omgevingsvariabelen in 4. Test om te bevestigen 5 Maak code voor gezichtsdetectie 6. Maak code om dataset te creëren 7. Maak code om de herkenner te trainen 8. Maak code om de gezichten te herkennen &Resultaat.
Stap 1: installeer Anaconda
Anaconda is in wezen een mooi verpakte Python IDE die wordt geleverd met tal van nuttige pakketten, zoals NumPy, Panda's, IPython Notebook, enz. Het lijkt overal in de wetenschappelijke gemeenschap te worden aanbevolen. Bekijk Anaconda om het te installeren.
Stap 2: Download Open CV Pakket
Ga eerst naar de officiële OpenCV-site om het volledige OpenCV-pakket te downloaden. Kies een versie die je leuk vindt (2.x of 3.x). Ik gebruik Python 2.x en OpenCV 2.x - vooral omdat dit de manier is waarop de OpenCV-Python-zelfstudies zijn ingesteld/gebaseerd.
In mijn geval heb ik het pakket (in wezen een map) rechtstreeks naar mijn F-schijf uitgepakt. (F:\opencv).
Stap 3: Omgevingsvariabelen instellen
Kopieer en plak het bestand cv2.pyd
De map Anaconda Site-packages (bijvoorbeeld F:\Program Files\Anaconda2\Lib\site-packages in mijn geval) bevat de Python-pakketten die u kunt importeren. Ons doel is om het bestand cv2.pyd naar deze map te kopiëren en te plakken (zodat we de import cv2 in onze Python-codes kunnen gebruiken).
Kopieer hiervoor het bestand cv2.pyd…
Vanuit deze OpenCV-directory (het begingedeelte kan iets anders zijn op uw computer):
# Python 2.7 en 64-bit machine: F:\opencv\build\python\2.7\x64# Python 2.7 en 32-bit machine: F:\opencv\build\python\2.7\x84
Naar deze Anaconda-directory (het begingedeelte kan iets anders zijn op uw computer):
F:\Program Files\Anaconda2\Lib\site-packages
Na het uitvoeren van deze stap kunnen we nu import cv2 gebruiken in Python-code. MAAR, we moeten nog een beetje meer werk doen om FFMPEG (videocodec) te laten werken (om ons in staat te stellen dingen te doen zoals het verwerken van video's.)
Klik met de rechtermuisknop op "Deze computer" (of "Deze pc" in Windows 8.1) -> klik met de linkermuisknop op Eigenschappen -> klik met de linkermuisknop op het tabblad "Geavanceerd" -> klik met de linkermuisknop op de knop "Omgevingsvariabelen…". Voeg een nieuwe gebruikersvariabele toe om naar de OpenCV te verwijzen (ofwel x86 voor 32-bits systeem of x64 voor 64-bits systeem.) Ik ben momenteel op een 64-bits machine.
32-bitOPENCV_DIRC:\opencv\build\x86\vc12
64-bitOPENCV_DIRC:\opencv\build\x64\vc12
Voeg %OPENCV_DIR%\bin toe aan de gebruikersvariabele PATH.
Mijn PATH-gebruikersvariabele ziet er bijvoorbeeld zo uit …
Voordat:
F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts
Na:
F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin
Dit is het, we zijn klaar! FFMPEG is klaar voor gebruik!
Stap 4: Test om te bevestigen
We moeten testen of we dit nu kunnen doen in Anaconda (via Spyder IDE):
- OpenCV-pakket importeren
- Gebruik het FFMPEG-hulpprogramma (om video's te lezen/schrijven/verwerken)
Test 1: Kunnen we OpenCV importeren?
Om te bevestigen dat Anaconda nu het OpenCV-Python-pakket (namelijk cv2) kan importeren, geef deze uit in de IPython-console:
import cv2
print cv2._versie_
Als het pakket cv2 goed is geïmporteerd zonder fouten, en de cv2-versie is uitgeprint, dan zijn we allemaal in orde!
Test 2: Kunnen we de FFMPEG-codec gebruiken?
Plaats een monster
input_video.mp4
videobestand in een map. We willen testen of we:
- lees dit.mp4-videobestand, en
- een nieuw videobestand wegschrijven (kan.avi of.mp4 enz. zijn)
Om dit te doen, hebben we een testpython-code nodig, noem deze test.py. Plaats het in dezelfde map als het voorbeeld
input_video.mp4
het dossier.
Dit is wat
test.py
eruit kan zien (Opmerking: veel dank aan de suggesties van Pete en Warren in het opmerkingenveld - ik heb mijn originele testcode vervangen door de zijne - test het alstublieft zelf en laat ons weten of dit beter werkt):
import cv2
cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = video met succes gelezen. False - kan video niet lezen. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = video succesvol wegschrijven. False - kan video niet wegschrijven. cap.release() uit.release()
Deze test is ZEER BELANGRIJK. Als je videobestanden wilt verwerken, moet je ervoor zorgen dat Anaconda / Spyder IDE de FFMPEG (videocodec) kan gebruiken. Het kostte me dagen om het werkend te krijgen. Maar ik hoop dat het je veel minder tijd kost!:)Opmerking: nog een zeer belangrijke tip bij het gebruik van de Anaconda Spyder IDE. Zorg ervoor dat u de Current Working Directory (CWD) controleert!!!
Stap 5: maak een code voor gezichtsdetectie
Doel
In deze sessie,
- We zullen de basis van gezichtsdetectie zien met behulp van op Haar Feature-based Cascade Classifiers
- We zullen hetzelfde uitbreiden voor oogdetectie enz
Haar-cascadedetectie in OpenCV
Hier gaan we het hebben over detectie. OpenCV bevat al veel vooraf getrainde classificaties voor gezicht, ogen, glimlach enz. Die XML-bestanden worden opgeslagen in de map opencv/data/haarcascades/. Laten we een gezichts- en oogdetector maken met OpenCV. Eerst moeten we de vereiste XML-classificaties laden. Laad vervolgens onze invoerafbeelding (of video) in grijswaardenmodus OF we kunnen de camera gebruiken (voor realtime gezichtsdetectie)
importeer numpy als 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/haarcascade.xml') cap = cv2. VideoCapture(0)while 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(grey, 1.5, 5) for (x, y, w, h) in vlakken: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = grey[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "gevonden" +str(len(gezichten)) +" gezicht(en)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
Stap 6: maak code om dataset te maken
We doen aan gezichtsherkenning, dus je hebt wat gezichtsafbeeldingen nodig! U kunt uw eigen dataset maken of beginnen met een van de beschikbare gezichtsdatabases, https://face-rec.org/databases/ geeft u een actueel overzicht. Drie interessante databases zijn (delen van de beschrijving zijn geciteerd uit
- AT&T Facedatabase
- Yale Facedatabase A
- Uitgebreide Yale Face-database B
HIER gebruik ik mijn eigen dataset … met behulp van de onderstaande code:
importeer numpy als 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('voer gebruikers-ID in') sampleN=0; terwijl 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(grey, 1.3, 5) for (x, y, w, h) in faces: sampleN =steekproefN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", grijs[y:y+h, x: x+w]) cv2.rechthoek(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) als sampleN > 20: break cap.release() cv2.destroyAllWindows()
Stap 7: Maak code om de herkenning te trainen
Maak de functie om de trainingsset voor te bereiden
Nu gaan we een functie definiëren
getImagesWithID(pad)
dat neemt het absolute pad naar de afbeeldingendatabase als invoerargument en retourneert tupel van 2 lijsten, één met de gedetecteerde gezichten en de andere met het bijbehorende label voor dat gezicht. Als de i-de index in de lijst met gezichten bijvoorbeeld de 5e persoon in de database vertegenwoordigt, heeft de corresponderende e-locatie in de lijst met labels een waarde die gelijk is aan 5.
Converteer nu de dataset-gezichten (die in stap 6) zijn gemaakt naar een.yml-bestand met behulp van de onderstaande code:
importeer os
importeer numpy als np importeer cv2 uit PIL importeer Image # Voor gezichtsherkenning gebruiken we de LBPH Gezichtsherkenningsherkenner = 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(path) faces = ID's = voor imagePath in imagePaths: # Lees de afbeelding en converteer naar grijswaarden facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Haal het label van de afbeelding op ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Detecteer het gezicht in de afbeelding faces.append(faceNP) IDs.append (ID) cv2.imshow("Gezichten toevoegen voor training", faceNP) cv2.waitKey(10) return np.array(IDs), faces Ids, faces = getImagesWithID(path) herkenner.train(faces, Ids) herkenner.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()
door deze code te gebruiken, is alle gezichtsgegevensset geconverteerd naar een enkel.yml-bestand…..padlocatie is ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")
Stap 8: Maak een code om de gezichten en het resultaat te herkennen
Guyzz dit is de laatste stap waarin we de code kunnen maken om de gezichten te herkennen met behulp van je webcam. IN DEZE STAP ZIJN ER TWEE BEWERKINGEN DIE GAAN UITVOEREN…. 1. het vastleggen van de video van de cam 2. vergelijk het met je.yml-bestand
import numpy als npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); 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) terwijl 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(grey, 1.5, 5) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(grijs[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), lettertype, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break cap.release()
cv2.destroyAllWindows()
en uiteindelijk zal het resultaat voor je ogen komen … je kunt het zipbestand ook downloaden van onder de link: Klik hier om de codes te downloaden Dus in deze instructable hebben we de taak van gezichtsdetectie + herkenning uitgevoerd met OpenCV ….. als je zoals deze instructable … plzzz abonneer me en stem op me … bedankt vrienden:)
Aanbevolen:
Opencv Gezichtsdetectie, training en herkenning: 3 stappen
Opencv-gezichtsdetectie, training en herkenning: OpenCV is een open source computer vision-bibliotheek die erg populair is voor het uitvoeren van elementaire beeldverwerkingstaken zoals vervaging, beeldmenging, verbetering van zowel de beeld- als videokwaliteit, drempelwaardering enz. Naast beeldverwerking, het bewijst
Meertalige herkenning met AIY: 4 stappen
Meertalige herkenning met AIY: In kosmische ruimtestations. Er zijn daar veel astronauten. De astronauten komen van veel planeten (landen). dus daarom zou AI daar in veel talen moeten werken