Pop

Tensorflow. Identificación facial con inteligencia artificial (1/2)

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))

2 comentarios:

  1. Hola gracias por el tutorial!!! me esta ayudando bastante con la tesis de postgrado... tengo una duda sobre los directorios porque despues de
    print("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

    ResponderEliminar
    Respuestas
    1. Hola ,
      Chequea 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

      Eliminar

Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...