Pop

Tensorflow. Reconocimiento facial con inteligencia artificial (1/3)

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

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