Este artículo tiene como objetivo crear rápidamente un programa de reconocimiento facial de Python para entrenar fácilmente varias imágenes por persona y comenzar a reconocer rostros conocidos en una imagen.
En este artículo, el código utiliza la API de reconocimiento facial de ageitgey para Python. Esta API se crea con los algoritmos de reconocimiento facial de dlib y permite al usuario implementar fácilmente la detección facial, el reconocimiento facial e incluso el seguimiento facial en tiempo real en sus proyectos o desde la línea de comandos.
Instalación de la biblioteca:
al principio, asegúrese de que las bibliotecas requeridas estén instaladas en su computadora.
pip install face_recognition Scikit-learn dlib docopt
Si desea que dlib use CUDA en GPU, asegúrese de que CUDA y cuDNN estén instalados correctamente y luego instale dlib usando pip. Para obtener instrucciones detalladas para la instalación en diferentes plataformas, consulte la Guía de instalación de face_recognition .
Ahora, crea un directorio con las imágenes de entrenamiento para cada persona en el siguiente formato. Asegúrese de tener suficientes imágenes de entrenamiento (al menos 5 para cada persona); de lo contrario , el clasificador de vectores de soporte (SVC) (que se usa en este programa produce resultados sin sentido en conjuntos de datos muy pequeños).
Estructura del archivo:
face_recognize.py test_image.jpg train_dir/ person_1/ person_1_face-1.jpg person_1_face-2.jpg . . person_1_face-n.jpg person_2/ person_2_face-1.jpg person_2_face-2.jpg . . person_2_face-n.jpg . . person_n/ person_n_face-1.jpg person_n_face-2.jpg . . person_n_face-n.jpg
Codificación facial:
la API face_recognition genera codificaciones faciales para el rostro que se encuentra en las imágenes. Una codificación facial es básicamente una forma de representar la cara utilizando un conjunto de 128 medidas generadas por computadora. Dos imágenes diferentes de la misma persona tendrían una codificación similar y dos personas diferentes tendrían una codificación totalmente diferente.
Una vez que se generan todas las codificaciones faciales, el Clasificador de vectores de soporte (SVC) con scikit-learn se entrena en las codificaciones faciales junto con sus etiquetas de todas las caras conocidas en el directorio de capacitación. Finalmente, la API detecta todas las caras en la imagen de prueba que proporciona y el SVC entrenado predice todas las caras conocidas en la imagen de prueba.
Código: Para reconocer varias caras.
""" Usage: face_recognize.py -d <train_dir> -i <test_image> Options: -h, --help Show this help -d, --train_dir =<train_dir> Directory with images for training -i, --test_image =<test_image> Test image """ # importing libraries import face_recognition import docopt from sklearn import svm import os def face_recognize(dir, test): # Training the SVC classifier # The training data would be all the # face encodings from all the known # images and the labels are their names encodings = [] names = [] # Training directory if dir[-1]!='/': dir += '/' train_dir = os.listdir(dir) # Loop through each person in the training directory for person in train_dir: pix = os.listdir(dir + person) # Loop through each training image for the current person for person_img in pix: # Get the face encodings for the face in each image file face = face_recognition.load_image_file( dir + person + "/" + person_img) face_bounding_boxes = face_recognition.face_locations(face) # If training image contains exactly one face if len(face_bounding_boxes) == 1: face_enc = face_recognition.face_encodings(face)[0] # Add face encoding for current image # with corresponding label (name) to the training data encodings.append(face_enc) names.append(person) else: print(person + "/" + person_img + " can't be used for training") # Create and train the SVC classifier clf = svm.SVC(gamma ='scale') clf.fit(encodings, names) # Load the test image with unknown faces into a numpy array test_image = face_recognition.load_image_file(test) # Find all the faces in the test image using the default HOG-based model face_locations = face_recognition.face_locations(test_image) no = len(face_locations) print("Number of faces detected: ", no) # Predict all the faces in the test image using the trained classifier print("Found:") for i in range(no): test_image_enc = face_recognition.face_encodings(test_image)[i] name = clf.predict([test_image_enc]) print(*name) def main(): args = docopt.docopt(__doc__) train_dir = args["--train_dir"] test_image = args["--test_image"] face_recognize(train_dir, test_image) if __name__=="__main__": main()
Cómo ejecutarlo en la terminal:
python face_recognize.py -d train_dir -i test_image.jpg
Producción:
Publicación traducida automáticamente
Artículo escrito por anandbaburajan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA