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