Taula de continguts:

Detecció de cares + reconeixement: 8 passos (amb imatges)
Detecció de cares + reconeixement: 8 passos (amb imatges)

Vídeo: Detecció de cares + reconeixement: 8 passos (amb imatges)

Vídeo: Detecció de cares + reconeixement: 8 passos (amb imatges)
Vídeo: Собаку бросили в лесу с коробкой макарон. История собаки по имени Ринго. 2024, Juliol
Anonim
Image
Image
Detecció de cares + reconeixement
Detecció de cares + reconeixement

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

Instal·leu Anaconda
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

Descarregueu el paquet Open CV
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

Estableix variables ambientals
Estableix 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

Prova per confirmar
Prova per confirmar
Prova per confirmar
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

Crea codi per a la detecció de cares
Crea codi per a la detecció de cares
Crea codi per a la detecció de cares
Crea 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

Feu codi per crear un conjunt de dades
Feu codi per crear un conjunt de dades
Feu codi per crear un conjunt de dades
Feu 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

Feu codi per entrenar el reconeixedor
Feu 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: