1. Reconocimiento facial con inteligencia artificial (1)
- Hola a todos.Una vez finalizado el curso de google, vamos a entrenar un modelo para hacer un ejemplo de identificación facial.Este ejemplo lo dividiremos en dos vídeos, que estructuraremos de la siguiente manera.
- En este primer vídeo preparamos la estructura del proyectos y los datos de entrenamiento de nuestro ejemplo:
- Os dejo el código visto en el vídeo:
import cv2 #importamos modulo OpenCV 
import os #importamos módulo de lectura de directorio de datos de formación y rutas
import numpy as np
#Listado de personas a identificar
personas = ["Zidane","JAP SOFTWARE", "Will Smith"]
#funcion para detectar caras
def dameCaras(img):
    #convertimos imagen a la escala de grises
    gris = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # cargo el detector de caras de OpenCV 
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
    # detectemos la multiescala (algunas imágenes pueden estar más cerca de la cámara que #otras)
    caras = face_cascade.detectMultiScale(gris, scaleFactor=1.2, minNeighbors=5);
    #Si no detectamos caras en la imagen devuelvo esto
    if (len(caras) == 0):
        return None, None
    #Extraemos el area donde esta la cara
    (x, y, w, h) = caras[0]
    #devuelvo la parte de la iamgen donde esta la cara
    return gris[y:y+w, x:x+h], caras[0]
# esta función leerá las imágenes de entrenamiento de todas las personas, detectará la cara 
#de cada imagen  y devolverá dos listas del mismo tamaño, una lista
# de caras y otra lista de etiquetas para cada cara
def prepararDatosEntrenamiento(ruta):
    #Obtengo la lista de directorios
    directorios = os.listdir(ruta)
    #lista para las caras
    caras = []
    #lista para los nombres
    labels = []
    #Recorremos la lista de directorios
    for nombreDire in directorios:
        #cada nombre de directorio debe ser un número que identifique a 
        #a la persona
        label = int(nombreDire)
        #construimos la ruta del directorio de cada persona
        rutaDirectorioPersona = ruta + "/" + nombreDire
        #obtenemos las imagens de cada sujeto
        listaImagenesPersona = os.listdir(rutaDirectorioPersona)
        #recorremos las imágenes de cada carpeta
        for nombreImagen in listaImagenesPersona:
            rutaImagen = rutaDirectorioPersona + "/" + nombreImagen
            #leer imagen
            imagen = cv2.imread(rutaImagen)
            #mostramos la imagen
            cv2.imshow("Entrenando............", imagen)
            cv2.waitKey(100)
            #detectar cara
            face, rect = dameCaras(imagen)
            #agregamos las caras detectadas a las lista de imagens y de etiquetas
            if face is not None:
                caras.append(face)
                labels.append(label)
    cv2.destroyAllWindows()
    cv2.waitKey(1)
    cv2.destroyAllWindows()
    return caras, labels
#obtenemos la listas con las caras y con su nombre
print("Preparandos datos...")
caras, labels = prepararDatosEntrenamiento("training-data")
print("Datos preparados")
print("Total caras: ", len(caras))
print("Total labels: ", len(labels))

 
 
Hola gracias por el tutorial!!! me esta ayudando bastante con la tesis de postgrado... tengo una duda sobre los directorios porque despues de
ResponderEliminarprint("Preparandos datos...")
caras, labels = prepararDatosEntrenamiento("training-data")
print("Datos preparados")
print("Total caras: ", len(caras))
print("Total labels: ", len(labels))
Me sale un error asi FileNotFoundError: [WinError 3] El sistema no puede encontrar la ruta especificada: 'training-data'
Yo he seguido todos los pasos los directorios estan en el mismo lugar que lo indicò pero no entiendo el porquè de ese eror
Hola ,
EliminarChequea que las rutas estén correctas y en la misma unidad. No deberías tener problemas con esto. Espero que los vídeos sean de utilidad.
Saludos