Taula de continguts:
- Pas 1: instal·leu Anaconda
- Pas 2: descarregueu el paquet Open CV
- Pas 3: definiu les variables ambientals
- Pas 4: prova per confirmar
- Pas 5: feu un codi per a la detecció de cares
- Pas 6: feu un codi per crear un conjunt de dades
- Pas 7: feu un codi per entrenar el reconeixedor
- Pas 8: feu un codi per reconèixer les cares i el resultat
Vídeo: Detecció de cares + reconeixement: 8 passos (amb imatges)
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:16
Aquest és un exemple senzill d’execució de detecció i reconeixement de cares amb OpenCV des d’una càmera. NOTA: HE FET AQUEST PROJECTE PER A CONCURSOS DE SENSORS I he utilitzat la càmera com a sensor per rastrejar i reconèixer les cares. Per tant, el nostre objectiu En aquesta sessió, 1. Instal·leu Anaconda 2. Descarregueu el paquet Open CV 3. Estableix les variables ambientals 4. Prova per confirmar 5 Crea un codi per a la detecció de cares 6. Crea un codi per crear un conjunt de dades 7. Crea un codi per entrenar el reconeixedor 8. Crea un codi per reconèixer les cares i el resultat.
Pas 1: instal·leu Anaconda
Anaconda és essencialment un IDE Python molt ben empaquetat que s’envia amb un munt de paquets útils, com NumPy, Pandas, IPython Notebook, etc. Sembla ser recomanable a tot arreu de la comunitat científica. Mireu Anaconda per instal·lar-lo.
Pas 2: descarregueu el paquet Open CV
En primer lloc, aneu al lloc oficial d’OpenCV per descarregar el paquet OpenCV complet. Trieu una versió que us agradi (2.x o 3.x). Estic a Python 2.x i OpenCV 2.x, principalment perquè és com es configuren / es basen els tutorials OpenCV-Python.
En el meu cas, he extret el paquet (essencialment una carpeta) directament a la meva unitat F. (F: / opencv).
Pas 3: definiu les variables ambientals
Copieu i enganxeu el fitxer cv2.pyd
El directori Anaconda Site-packages (per exemple, F: / Program Files / Anaconda2 / Lib / site-packages en el meu cas) conté els paquets Python que podeu importar. El nostre objectiu és copiar i enganxar el fitxer cv2.pyd en aquest directori (de manera que puguem utilitzar la importació cv2 als nostres codis Python).
Per fer-ho, copieu el fitxer cv2.pyd …
Des d'aquest directori OpenCV (la part inicial pot ser lleugerament diferent a la vostra màquina):
# Màquina Python 2.7 i 64 bits: F: / opencv / build / python / 2.7 / x64 # Màquina Python 2.7 i 32 bits: F: / opencv / build / python / 2.7 / x84
En aquest directori Anaconda (la part inicial pot ser lleugerament diferent a la vostra màquina):
F: / Program Files / Anaconda2 / Lib / site-packages
Després de realitzar aquest pas, ara podrem utilitzar importar cv2 al codi Python. PERUT, encara hem de fer una mica més de feina perquè FFMPEG (còdec de vídeo) funcioni (per permetre’ns fer coses com processar vídeos).
Feu clic amb el botó dret a "El meu ordinador" (o "Aquest ordinador" al Windows 8.1) -> feu clic amb el botó esquerre a Propietats -> feu clic amb el botó esquerre a la pestanya "Avançat" -> feu clic amb el botó esquerre al botó "Variables d'entorn …". Afegiu una nova variable d'usuari per assenyalar l'OpenCV (x86 per al sistema de 32 bits o x64 per al sistema de 64 bits). Actualment estic en una màquina de 64 bits.
OPENCV_DIRC de 32 bits: / opencv / build / x86 / vc12
OPENCV_DIRC de 64 bits: / opencv / build / x64 / vc12
Afegiu% OPENCV_DIR% / bin al PATH de la variable d'usuari.
Per exemple, la meva variable d'usuari PATH té aquest aspecte …
Abans:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts
Després:
F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;% OPENCV_DIR% / bin
Això és el que hem acabat! FFMPEG està a punt per utilitzar-se.
Pas 4: prova per confirmar
Hem de provar si ara podem fer-ho a Anaconda (mitjançant Spyder IDE):
- Importeu el paquet OpenCV
- Utilitzeu la utilitat FFMPEG (per llegir / escriure / processar vídeos)
Prova 1: podem importar OpenCV?
Per confirmar que Anaconda ara pot importar el paquet OpenCV-Python (concretament, cv2), publiqueu-los a la consola IPython:
importar cv2
imprimir cv2._ versió_
Si el paquet cv2 s’importa correctament sense errors i s’imprimeix la versió cv2, estem tots bé.
Prova 2: podem fer servir el còdec FFMPEG?
Col·loqueu una mostra
entrada_video.mp4
fitxer de vídeo en un directori. Volem provar si podem:
- llegiu aquest fitxer de vídeo.mp4 i
- escriviu un fitxer de vídeo nou (pot ser.avi o.mp4, etc.)
Per fer-ho, hem de tenir un codi python de prova, anomenar-lo test.py. Col·loqueu-lo al mateix directori que la mostra
entrada_video.mp4
dossier.
Això és el que
test.py
pot semblar (Nota: moltes gràcies als suggeriments de Pete i Warren al camp de comentaris: he substituït el meu codi de prova original pel seu. Proveu-ho vosaltres mateixos i feu-nos saber si funciona millor):
importar cv2
cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = llegir vídeo correctament. Fals: no es pot llegir el vídeo. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = escriu el vídeo correctament. Fals: no es pot escriure el vídeo. cap.release () out.release ()
Aquesta prova és MOLT IMPORTANT. Si voleu processar fitxers de vídeo, haureu d'assegurar-vos que Anaconda / Spyder IDE pugui utilitzar el FFMPEG (còdec de vídeo). Vaig trigar dies a funcionar. Però espero que us porti molt menys temps.:) Nota: un consell molt important quan s'utilitza l'IDE Anaconda Spyder. Assegureu-vos de comprovar el directori de treball actual (CWD) !!!
Pas 5: feu un codi per a la detecció de cares
Objectiu
En aquesta sessió,
- Veurem els fonaments bàsics de la detecció de cares mitjançant els classificadors en cascada basats en funcions Haar
- Ampliarem el mateix per a la detecció d’ulls, etc.
Detecció de cascades en OpenCV
Aquí ens ocuparem de la detecció. OpenCV ja conté molts classificadors prèviament entrenats per a cara, ulls, somriure, etc. Aquests fitxers XML s’emmagatzemen a la carpeta opencv / data / haarcascades /. Creem un detector de cares i ulls amb OpenCV. Primer hem de carregar els classificadors XML necessaris. A continuació, carregueu la nostra imatge d’entrada (o vídeo) en mode d’escala de grisos O podem utilitzar la càmera (per a la detecció de cares en temps real)
importa numpy com a 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) mentre que 1: ret, img = cap.read () gris = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gris, 1,5, 5) per a (x, y, w, h) a les cares: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = gris [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) per (ex, ey, ew, eh) als ulls: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) print "found" + str (len (faces)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff si k == 27: trenca cap.release () cv2.destroyAllWindows ()
Pas 6: feu un codi per crear un conjunt de dades
Estem fent reconeixement facial, de manera que necessitareu algunes imatges de la cara. Podeu crear el vostre propi conjunt de dades o començar amb una de les bases de dades facials disponibles, https://face-rec.org/databases/ us proporciona una visió general actualitzada. Hi ha tres bases de dades interessants (parts de la descripció es citen a
- Base de dades AT&T
- Yale Facedatabase A
- Base de dades de Yale ampliada B
AQUÍ estic fent servir el meu propi conjunt de dades … amb l'ajuda del codi que es dóna a continuació:
importa numpy com a 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; mentre que 1: ret, img = cap.read () gris = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gris, 1.3, 5) per a (x, y, w, h) en cares: sampleN = mostra N + 1; cv2.imwrite ("F: / Fitxers de programa / projectes / face_rec / facesData / Usuari." + str (id) + "." + str (sampleN) + ".jpg", gris [y: y + h, x: x + w]) cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1) si sampleN> 20: break cap.release () cv2.destroyAllWindows ()
Pas 7: feu un codi per entrenar el reconeixedor
Creeu la funció per preparar el conjunt d'entrenament
Ara definirem una funció
getImagesWithID (ruta)
que pren el camí d'accés absolut a la base de dades d'imatges com a argument d'entrada i retorna la tupla de 2 llistes, una amb les cares detectades i l'altra amb l'etiqueta corresponent per a aquesta cara. Per exemple, si l'índex enèsim de la llista de cares representa el cinquè individu de la base de dades, la posició enèsima corresponent de la llista d'etiquetes té un valor igual a 5.
Ara convertiu les cares del conjunt de dades (que es crea al pas 6) en fitxer.yml amb l'ajuda del codi que es mostra a continuació:
import os
import numpy as np import cv2 from PIL import Image # Per al reconeixement de cares, obtindrem el LBPH Face Recognizer recognizer = 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 = IDs = per a imagePath a imagePaths: # Llegiu la imatge i convertiu-la a escala de grisos facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (facesImg, 'uint8') # Obteniu l'etiqueta de la imatge ID = int (os.path.split (imagePath) [- 1].split (".") [1]) # Detecte la cara de la imatge faces.append (faceNP) IDs.append (ID) cv2.imshow ("Afegint cares per al traning", faceNP) cv2.waitKey (10) return np.array (IDs), faces Ids, faces = getImagesWithID (path) recognizer.train (faces, Ids) recognizer.save ("F: / Fitxers de programa / projectes / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()
en utilitzar aquest codi, es converteixen tots els conjunts de dades de cares convertits en un únic fitxer.yml ….. la ubicació de la ruta és ("F: / Fitxers de programa / projectes / face_rec / faceREC / trainingdata.yml")
Pas 8: feu un codi per reconèixer les cares i el resultat
Guyzz, aquest és l'últim pas en el qual podem crear el codi per reconèixer les cares amb l'ajuda de la vostra càmera web. EN AQUEST PAS HI HA DOS OPERACIONS QUE ES FARAN … 1. capturar el vídeo des de la càmera 2. comparar-lo amb el fitxer.yml
import numpy as npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Files / opencv / sources / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer (); rec.load ("F: / Fitxers de programa / projectes / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) mentre que 1: ret, img = cap.read () gris = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (gris, 1,5, 5) per a (x, y, w, h) en cares: cv2.rectangle (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.predict (gris [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) si cv2.waitKey (1) == ord ('q'): trencar cap.release ()
cv2.destroyAllWindows ()
i finalment el resultat arribarà davant dels vostres ulls … també podeu descarregar el fitxer zip des de sota de l'enllaç: Feu clic aquí per descarregar els codis. Així, en aquest instructiu hem realitzat la tasca de detecció de cares + reconeixement mitjançant OpenCV … així instructable ….. plzzz subscriu-me i vota per mi … … gràcies amics:)
Recomanat:
Intel·ligència artificial i reconeixement d’imatges mitjançant HuskyLens: 6 passos (amb imatges)
Intel·ligència artificial i reconeixement d’imatges mitjançant HuskyLens: Ei, què passa, nois! Akarsh aquí des de CETech. En aquest projecte, farem una ullada a HuskyLens de DFRobot. És un mòdul de càmera alimentat per IA que és capaç de fer diverses operacions d’Intel·ligència Artificial com ara Face Recognitio
Mirall de reconeixement facial amb compartiment secret: 15 passos (amb imatges)
Mirall de reconeixement facial amb compartiment secret: sempre he estat intrigat pels compartiments secrets sempre creatius que s’utilitzen en històries, pel·lícules i similars. Per tant, quan vaig veure el Concurs de compartiments secrets, vaig decidir experimentar jo mateixa amb la idea i fer un mirall d’aspecte normal que obrís un
Reconeixement d'imatges amb plaques K210 i Arduino IDE / Micropython: 6 passos (amb imatges)
Reconeixement d’imatges amb plaques K210 i Arduino IDE / Micropython: ja vaig escriure un article sobre com executar demostracions d’OpenMV a Sipeed Maix Bit i també vaig fer un vídeo de demostració de detecció d’objectes amb aquesta placa. Una de les moltes preguntes que la gent ha formulat és: com puc reconèixer un objecte que la xarxa neuronal no és tr
Detecció, formació i reconeixement de cares Opencv: 3 passos
Detecció, formació i reconeixement de cares Opencv: OpenCV és una biblioteca de visió per ordinador de codi obert que és molt popular per realitzar tasques bàsiques de processament d’imatges, com ara desenfocament, barreja d’imatges, millora de la imatge, qualitat de vídeo, llindars, etc. prov
Timbre amb reconeixement facial: 7 passos (amb imatges)
Timbre amb reconeixement facial: motivació Recentment, al meu país hi ha hagut una onada de robatoris dirigits a persones grans a casa seva. Normalment, l’accés el concedeixen els mateixos ocupants, ja que els visitants els convencen que són cuidadors / infermeres. És