21. 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 reconocimiento facial.Este ejemplo lo dividiremos en tres vídeos, que estructuraremos de la siguiente manera.
- En el primer vídeo que podéis ver a continuación nos centramos en explicar la estructura del proyecto.Y además implementamos el código necesario para detectar las caras que aparecen en una foto.
- A continuación os dejo el código visto en el vídeo.
#importamos las librerias necesarias
import numpy as np
import matplotlib.pyplot as plt
import math
import cv2 # Libreria OpenCV.En el caso de tenerla instalada.Ponera via Conda
from PIL import Image
import time
from keras.models import load_model
# funciones auxiliares
def cargaImagen(ruta):
""" Método que carga una imagen de una ruta"""
imagen = cv2.imread(ruta)
imagen = cv2.cvtColor(imagen, cv2.COLOR_BGR2RGB)
return imagen
def dibujarImagen(imagen, title=''):
"""Funcion que muestra imagen """
fig = plt.figure(figsize = (8,8))
ax1 = fig.add_subplot(111)
ax1.set_xticks([])
ax1.set_yticks([])
ax1.set_title(title)
ax1.imshow(imagen)
def dameCaras(imagen):
"""A partir de una imagen detecta las cara y devuelve un rectangulo en la posición que se ubica la cara
"""
copiaImagen = np.copy(imagen)
# Filtro para escala de grises
gray = cv2.cvtColor(copiaImagen, cv2.COLOR_RGB2GRAY)
# Extraemos un detector de caras frontales preentrenado desde un fichero xml
clasificadorCaras = cv2.CascadeClassifier('Detectores/haarcascade_frontalface_default.xml')
# Detectar caras de la imagen
caras = clasificadorCaras.detectMultiScale(gray, 1.2,4)
return caras
def pintarCaras(imagen, caras=None, plot=True):
""" Pinta una imagen con las cara detectadas.
"""
if caras is None:
faces = dameCaras(imagen)
imagenConCaras = np.copy(imagen)
# Obtener el cuadro delimitador para cada cara detectada y pintar un cuadro
for (x,y,w,h) in caras:
cv2.rectangle(imagenConCaras, (x,y), (x+w,y+h), (255,0,0), 3)
if plot is True:
dibujarImagen(imagenConCaras)
else:
return imagenConCaras
def pintarPuntosClave(imagen, informacionImagen):
"""Traza los puntos clave dados en formato (x, y)
"""
fig = plt.figure(figsize = (8,8))
ax1 = fig.add_subplot(111)
for (cara, keypoints) in informacionImagen:
for (x,y) in keypoints:ax1.scatter(x, y, marker='o', c='c', s=10)
ax1.set_xticks([])
ax1.set_yticks([])
ax1.imshow(imagen)
imagen = cargaImagen('imagenes/clubdelalucha.jpg')
caras = dameCaras(imagen)
print("Caras detectadas: {}".format(len(caras)))
pintarCaras(imagen, caras)
No hay comentarios:
Publicar un comentario