Detección de rostros usando Python y OpenCV con cámara web

OpenCV es una biblioteca que se utiliza para realizar el procesamiento de imágenes utilizando lenguajes de programación como python. Este proyecto utiliza la biblioteca OpenCV para realizar una detección de rostros en tiempo real utilizando su cámara web como cámara principal.
Los siguientes son los requisitos para ello: – 
 

  1. Python 2.7
  2. OpenCV
  3. entumecido
  4. Clasificadores de cara frontal Haar Cascade

Enfoque/Algoritmos utilizados: 
 

  1. Este proyecto utiliza el algoritmo LBPH (histogramas de patrones binarios locales) para detectar rostros. Etiqueta los píxeles de una imagen mediante el umbral de la vecindad de cada píxel y considera el resultado como un número binario.
  2. LBPH usa 4 parámetros: 
    (i) Radio: el radio se usa para construir el patrón binario local circular y representa el radio alrededor del 
    píxel central. 
    (ii) Vecinos: el número de puntos de muestra para construir el patrón binario local circular. 
    (iii) Cuadrícula X: el número de celdas en la dirección horizontal. 
    (iv) Cuadrícula Y: el número de celdas en la dirección vertical.
  3. El modelo construido se entrena con las caras con la etiqueta que se les da, y más tarde, la máquina recibe datos de prueba y la máquina decide la etiqueta correcta para ella.

Cómo utilizar : 
 

  1. Cree un directorio en su PC y asígnele un nombre (por ejemplo, proyecto)
  2. Cree dos archivos python llamados create_data.py y face_recognize.py, copie el primer código fuente y el segundo código fuente respectivamente.
  3. Copie haarcascade_frontalface_default.xml al directorio del proyecto, puede obtenerlo en opencv o desde 
    aquí .
  4. Ahora está listo para ejecutar los siguientes códigos.

Python

# Creating database
# It captures images and stores them in datasets
# folder under the folder name of sub_data
import cv2, sys, numpy, os
haar_file = 'haarcascade_frontalface_default.xml'
 
# All the faces data will be
#  present this folder
datasets = 'datasets' 
 
 
# These are sub data sets of folder,
# for my faces I've used my name you can
# change the label here
sub_data = 'vivek'    
 
path = os.path.join(datasets, sub_data)
if not os.path.isdir(path):
    os.mkdir(path)
 
# defining the size of images
(width, height) = (130, 100)   
 
#'0' is used for my webcam,
# if you've any other camera
#  attached use '1' like this
face_cascade = cv2.CascadeClassifier(haar_file)
webcam = cv2.VideoCapture(0)
 
# The program loops until it has 30 images of the face.
count = 1
while count < 30:
    (_, im) = webcam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 4)
    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2)
        face = gray[y:y + h, x:x + w]
        face_resize = cv2.resize(face, (width, height))
        cv2.imwrite('% s/% s.png' % (path, count), face_resize)
    count += 1
     
    cv2.imshow('OpenCV', im)
    key = cv2.waitKey(10)
    if key == 27:
        break

El siguiente código debe ejecutarse después de que el modelo haya sido entrenado para las caras:
 

Python

# It helps in identifying the faces
import cv2, sys, numpy, os
size = 4
haar_file = 'haarcascade_frontalface_default.xml'
datasets = 'datasets'
 
# Part 1: Create fisherRecognizer
print('Recognizing Face Please Be in sufficient Lights...')
 
# Create a list of images and a list of corresponding names
(images, labels, names, id) = ([], [], {}, 0)
for (subdirs, dirs, files) in os.walk(datasets):
    for subdir in dirs:
        names[id] = subdir
        subjectpath = os.path.join(datasets, subdir)
        for filename in os.listdir(subjectpath):
            path = subjectpath + '/' + filename
            label = id
            images.append(cv2.imread(path, 0))
            labels.append(int(label))
        id += 1
(width, height) = (130, 100)
 
# Create a Numpy array from the two lists above
(images, labels) = [numpy.array(lis) for lis in [images, labels]]
 
# OpenCV trains a model from the images
# NOTE FOR OpenCV2: remove '.face'
model = cv2.face.LBPHFaceRecognizer_create()
model.train(images, labels)
 
# Part 2: Use fisherRecognizer on camera stream
face_cascade = cv2.CascadeClassifier(haar_file)
webcam = cv2.VideoCapture(0)
while True:
    (_, im) = webcam.read()
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2)
        face = gray[y:y + h, x:x + w]
        face_resize = cv2.resize(face, (width, height))
        # Try to recognize the face
        prediction = model.predict(face_resize)
        cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 3)
 
        if prediction[1]<500:
 
           cv2.putText(im, '% s - %.0f' %
(names[prediction[0]], prediction[1]), (x-10, y-10),
cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0))
        else:
          cv2.putText(im, 'not recognized',
(x-10, y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0))
 
    cv2.imshow('OpenCV', im)
     
    key = cv2.waitKey(10)
    if key == 27:
        break

Nota: los programas anteriores no se ejecutarán en el IDE en línea. 
 

Capturas de pantalla del programa

Puede parecer algo diferente porque había integrado el programa anterior en el marco del matraz.
La ejecución del segundo programa produce resultados similares a la imagen a continuación: 
 

face detection

Detección de rostro

Almacenamiento de conjuntos de datos: 
 

data_sets

conjuntos_de_datos

Publicación traducida automáticamente

Artículo escrito por vschs007 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *