Indholdsfortegnelse:
- Trin 1: Installer Anaconda
- Trin 2: Download Open CV Package
- Trin 3: Angiv miljøvariabler
- Trin 4: Test for at bekræfte
- Trin 5: Lav kode til ansigtsregistrering
- Trin 6: Opret kode for at oprette datasæt
- Trin 7: Opret kode for at træne genkenderen
- Trin 8: Opret kode for at genkende ansigter og resultat
Video: Ansigtsregistrering+genkendelse: 8 trin (med billeder)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette er et enkelt eksempel på kørende ansigtsregistrering og genkendelse med OpenCV fra et kamera. BEMÆRK: Jeg lavede dette projekt til sensorkonkurrence, og jeg brugte kameraet som en sensor til at spore og anerkende ansigter. Så, vores mål i denne session, 1. Installer Anaconda 2. Download Åben CV -pakke 3. Indstil miljøvariabler 4. Test for at bekræfte 5. Lav kode til ansigtsgenkendelse 6. Lav kode for at oprette datasæt 7. Lav kode for at træne genkenderen 8. Lav kode for at genkende ansigter og resultat.
Trin 1: Installer Anaconda
Anaconda er i det væsentlige en pænt pakket Python IDE, der leveres med masser af nyttige pakker, såsom NumPy, Pandas, IPython Notebook osv. Det synes at blive anbefalet overalt i det videnskabelige samfund. Tjek Anaconda for at få det installeret.
Trin 2: Download Open CV Package
For det første skal du gå til det officielle OpenCV -websted for at downloade den komplette OpenCV -pakke. Vælg en version, du kan lide (2.x eller 3.x). Jeg er på Python 2.x og OpenCV 2.x - hovedsageligt fordi det er sådan OpenCV -Python Tutorials er opsat/baseret på.
I mit tilfælde har jeg hentet pakken (hovedsagelig en mappe) direkte til mit F -drev. (F: / opencv).
Trin 3: Angiv miljøvariabler
Kopier og indsæt cv2.pyd -filen
Biblioteket Anaconda Site-packages (f.eks. F: / Program Files / Anaconda2 / Lib / site-pakker i mit tilfælde) indeholder de Python-pakker, du kan importere. Vores mål er at kopiere og indsætte cv2.pyd -filen i denne mappe (så vi kan bruge import cv2 i vores Python -koder.).
For at gøre dette skal du kopiere filen cv2.pyd …
Fra dette OpenCV -bibliotek (begyndelsesdelen kan være lidt anderledes på din maskine):
# Python 2.7 og 64-bit maskine: F: / opencv / build / python / 2.7 / x64# Python 2.7 og 32-bit maskine: F: / opencv / build / python / 2.7 / x84
Til dette Anaconda -bibliotek (begyndelsesdelen kan være lidt anderledes på din maskine):
F: / Program Files / Anaconda2 / Lib / site-packages
Efter at have udført dette trin skal vi nu kunne bruge import cv2 i Python -kode. MEN vi skal stadig gøre lidt mere arbejde for at få FFMPEG (videocodec) til at fungere (for at vi kan gøre ting som at behandle videoer.)
Højreklik på "Denne computer" (eller "Denne pc" i Windows 8.1)-> venstreklik på Egenskaber-> venstreklik på "Avanceret" fanen-> venstreklik på "Miljøvariabler …". Tilføj en ny brugervariabel for at pege på OpenCV (enten x86 for 32-bit system eller x64 for 64-bit system.) Jeg er i øjeblikket på en 64-bit maskine.
32-bit OPENCV_DIRC: / opencv / build / x86 / vc12
64-bitOPENCV_DIRC: / opencv / build / x64 / vc12
Tilføj %OPENCV_DIR %\ bin til brugervariabelstien.
For eksempel ser min PATH -brugervariabel sådan ud …
Før:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts
Efter:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin
Det er det, vi er færdige! FFMPEG er klar til brug!
Trin 4: Test for at bekræfte
Vi skal teste, om vi nu kan gøre disse i Anaconda (via Spyder IDE):
- Importer OpenCV -pakke
- Brug FFMPEG -værktøjet (til at læse/skrive/behandle videoer)
Test 1: Kan vi importere OpenCV?
For at bekræfte, at Anaconda nu er i stand til at importere OpenCV-Python-pakken (nemlig cv2), udsted disse i IPython -konsollen:
import cv2
print cv2._ version_
Hvis pakken cv2 er importeret ok uden fejl, og cv2 -versionen er udskrevet, så er vi alle gode!
Test 2: Kan vi bruge FFMPEG codec?
Placer en prøve
input_video.mp4
videofil i et bibliotek. Vi vil teste, om vi kan:
- læs denne.mp4 -videofil og
- skrive en ny videofil (kan være.avi eller.mp4 osv.)
For at gøre dette skal vi have en test -python -kode, kald den test.py. Placer det i samme bibliotek som prøven
input_video.mp4
fil.
Det er hvad
test.py
kan se ud (Bemærk: mange tak til Petes og Warrens forslag i kommentarfeltet - jeg har erstattet min originale testkode med hans - prøv det selv og lad os vide, om dette fungerer bedre):
import cv2
cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = læs video med succes. Falsk - undlader at læse video. fourcc = cv2. VideoWriter_fourcc (*'XVID') ud = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) udskrives.isOpened () # True = skriv video ud med succes. Falsk - undlader at skrive video ud. cap.release () out.release ()
Denne test er MEGET VIGTIG. Hvis du gerne vil behandle videofiler, skal du sikre, at Anaconda / Spyder IDE kan bruge FFMPEG (videocodec). Det tog mig dage at få det til at fungere. Men jeg håber, det ville tage dig meget mindre tid!:) Bemærk: endnu et meget vigtigt tip, når du bruger Anaconda Spyder IDE. Sørg for at tjekke den nuværende arbejdsmappe (CWD) !!!
Trin 5: Lav kode til ansigtsregistrering
Mål
I denne session,
- Vi vil se det grundlæggende i ansigtsgenkendelse ved hjælp af Haar Feature-baserede Cascade Classifiers
- Vi udvider det samme til øjenpåvisning osv
Haar-cascade Detection i OpenCV
Her vil vi beskæftige os med afsløring. OpenCV indeholder allerede mange foruddannede klassifikatorer til ansigt, øjne, smil osv. Disse XML-filer gemmes i opencv/data/haarcascades/mappe. Lad os oprette ansigts- og øjendetektor med OpenCV. Først skal vi indlæse de nødvendige XML -klassifikatorer. Indlæs derefter vores inputbillede (eller video) i gråtonetilstand ELLER vi kan bruge kamera (til ansigtsregistrering i realtid)
import 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/haarcascade.xml ') cap = cv2. VideoCapture (0) mens 1: ret, img = cap.read () grå = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) ansigter = face_cascade.detectMultiScale (grå, 1.5, 5) for (x, y, w, h) i ansigter: 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] øjne = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) i øjne: cv2.rektangel (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "fundet" +str (len (ansigter)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()
Trin 6: Opret kode for at oprette datasæt
Vi laver ansigtsgenkendelse, så du skal bruge nogle ansigtsbilleder! Du kan enten oprette dit eget datasæt eller starte med en af de tilgængelige ansigtsdatabaser, https://face-rec.org/databases/ giver dig en opdateret oversigt. Tre interessante databaser er (dele af beskrivelsen er citeret fra
- AT&T Facedatabase
- Yale Facedatabase A
- Udvidet Yale Facedatabase B
HER bruger jeg mit eget datasæt …. Ved hjælp af kode, som er angivet nedenfor:
import 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) ansigter = face_cascade.detectMultiScale (grå, 1.3, 5) for (x, y, w, h) i ansigter: 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 ()
Trin 7: Opret kode for at træne genkenderen
Opret funktionen for at forberede træningssættet
Nu vil vi definere en funktion
getImagesWithID (sti)
der tager den absolutte sti til billeddatabasen som inputargument og returnerer tupel af 2 liste, den ene indeholder de detekterede ansigter og den anden indeholder den tilsvarende etiket for dette ansigt. For eksempel, hvis ith -indekset på ansigtslisten repræsenterer det femte individ i databasen, har den tilsvarende ith -placering på listen over etiketter en værdi svarende til 5.
Konverter nu datasættets ansigter (som oprettes i trin 6) til.yml -fil ved hjælp af kode, som er angivet nedenfor:
import os
import numpy as np import cv2 fra PIL import Billede # Til ansigtsgenkendelse vil vi LBPH Face Recognizer -genkenderen = 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) ansigter = ID'er = for imagePath i imagePaths: # Læs billedet og konverter til gråtoner ansigterImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Få etiketten til billed-ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Find ansigtet i billedet ansigter. Tilføj (faceNP) IDs.append (ID) cv2.imshow ("Tilføjelse af ansigter til traning", faceNP) cv2.waitKey (10) returner np.array (ID'er), ansigter Ids, ansigter = getImagesWithID (sti) anerkender.train (ansigter, Ids) anerkender.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()
ved hjælp af denne kode konverteres alle ansigtsdatasæt til en enkelt.yml -fil …..baneplacering er ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")
Trin 8: Opret kode for at genkende ansigter og resultat
Guyzz, dette er det sidste trin, hvor vi kan oprette koden til at genkende ansigterne ved hjælp af dit webcam I DETTE TRIN ER DER TO OPERATIONER, DER SKAL UDFØRE…. 1. optagelse af videoen fra cam 2. sammenligne den med din.yml -fil
import numpy as 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) ansigter = face_cascade.detectMultiScale (grå, 1,5, 5) for (x, y, w, h) i ansigter: 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), skrifttype, 255) cv2.imshow ('img', img) hvis cv2.waitKey (1) == ord ('q'): afbryd cap.release ()
cv2.destroyAllWindows ()
og endelig vil resultatet komme foran dine øjne …. du kan også downloade zip -filen fra nedenstående link: Klik her for at downloade koderne Så i denne instruktive udførte vi opgaven med ansigtsgenkendelse+genkendelse ved hjælp af OpenCV …..hvis du som denne instruerbare …. plzzz abonnere mig og stemme på mig …. tak venner:)
Anbefalede:
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: 7 trin (med billeder)
Sådan gør du: Installation af Raspberry PI 4 Headless (VNC) med Rpi-imager og billeder: Jeg planlægger at bruge denne Rapsberry PI i en masse sjove projekter tilbage i min blog. Tjek det gerne ud. Jeg ville tilbage til at bruge min Raspberry PI, men jeg havde ikke et tastatur eller en mus på min nye placering. Det var et stykke tid siden jeg konfigurerede en hindbær
Opencv ansigtsregistrering, træning og genkendelse: 3 trin
Opencv ansigtsregistrering, træning og genkendelse: OpenCV er et open source computer vision -bibliotek, som er meget populært til at udføre grundlæggende billedbehandlingsopgaver som sløring, billedblanding, forbedring af billede samt videokvalitet, tærskelværdi osv. Ud over billedbehandling, det beviser
Micro: bit MU Vision Sensor for begyndere - Etiketværdier og genkendelse af nummerkort: 6 trin
Micro: bit MU Vision Sensor til begyndere - Etiketværdier og nummerkortgenkendelse: Dette er min anden guide til MU vision sensor. I dette projekt programmerer vi micro: bit til at genkende de forskellige nummerkort ved hjælp af etiketværdier
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: 7 trin (med billeder)
Sådan styrer du husholdningsapparater med fjernsyn med fjernbetjening med timerfunktion: Selv efter 25 års introduktion til forbrugermarkedet er infrarød kommunikation stadig meget relevant i de seneste dage. Uanset om det er dit 55 tommer 4K -fjernsyn eller dit billydsystem, har alt brug for en IR -fjernbetjening for at reagere på vores
Flersproget genkendelse med AIY: 4 trin
Flersproget genkendelse med AIY: I ydre rumstationer. Der er mange astronauter derovre. N ~ astronauterne kommer fra mange planeter (lande). så derfor burde AI fungere på mange sprog derovre