Desarrollo de algoritmo Eigenfaces: primera etapa

Autor: | Última modificación: 15 de noviembre de 2022 | Tiempo de Lectura: 2 minutos

En este ejercicio vamos a ver como aplicar PCA al reconocimiento facial por medio del algoritmo Eigenfaces. Vamos a descargamos un dataset público con miles de imágenes de más de 5000 personas. Cada imagen tiene tiene una resolución de 250x250px y ha sido colocada de tal forma que la cara siempre se encuentra en la misma posición.

Con esto vamos a hacer un algoritmo que nos diga si una foto pertenece a George W. Bush o no.

En esta sección, desarrollaremos las dos primeras fases del algoritmo Eigenfaces: la descarga de datos y la carga de imágenes.

Descarga de datos

Primero creamos el directorio donde se descargarán las imágenes.

Después, con la función curl_download, descargamos la fotos comprimidas en formato tgz. Ocupa unos 233Mbytes. La imágenes descomprimidas ocuparán unos 289Mbytes.

Primero lo que haremos será descargar el dataset de fotos:

#algoritmo Eigenfaces
ext_dir <- 'data/faces dir.create (ext_dir)
library (curl)
out_file <- 'data/faces/faces.tgz'
curl_download ("http://vis-www.cs.umass.edu/Lfw/Lfw-funneled.tgz', out_file, quiet = FALSE)
#Con untar descomprimimos el dataset
untar (out_file, exdir = ext_dir)
#aquí enseñamos el contenido
list.files (ext_dir)

‘faces.tgz’ . ‘lfw_funneled’

ext_dir <- 'data/faces'
list.files (paste0 (ext_dir, '/lfw_funneled'))
algoritmo Eigenfaces

Carga de imágenes

Vamos a usar la libreria jgpeg para cargar las imágenes.

Creamos una función que convierte las imágenes de color a blanco y negro.

El readJPEG nos permite ir leyendo las fotos que hay en el directorio.

Al final, pasaremos las imágenes a blanco y negro por medio de la variable bw.

#algoritmo Eigenfaces
library (jpeg)
get_pic <- function (name, id, root_path = ext_dir, bw = FALSE) {
img <- tryCatch (
readJPEG (paste0 (root_path, '/lfw_funneled/', name, ' / ', name, ' / ', sprintf ('%04d', id), '.jpg')), error = function (e) return (NULL))
if (!is.null (img) && bw) {
img <- (img [ , 1] + img [ , , 2] + img [ , , 3]) / 3
}
img
}
#Creamos una matriz que nos enseñe el número de la foto que busquemos. En este caso es la foto número 2.
img <- get_pic ('Tony Blair', id = 2, bw = TRUE, root_path = ext_dir)
paste ("Dimesiones:", paste0 (dim (img), collapse = 'x'))
paste ("Tipo:", class (img))

options (repr.plot.height = 4, repr.plot.width = 4)
plot (1 : 2, type = 'n')
rasterImage (img, 1, 1, 2, 2)

‘Dimensiones : 250 x 250’

‘Tipo: matrix’ . ‘Tipo: array’

Desarrollo de algoritmo Eigenfaces: primera etapa 1
dim (img) <- c (1, 250 * 250)
dim (img)

1 . 62500

hist (img)
Desarrollo de algoritmo Eigenfaces: primera etapa 2

¿Qué sigue?

Ahora que hemos visto las dos primeras fases del reconocimiento facial con el algoritmo Eigenfaces, podemos avanzar a la siguiente fase, que es la transformación de imágenes.

¿Quieres seguir aprendiendo? Para ello, dejamos a tu disposición nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, con el cual aprenderás todo lo necesario para incursionar rápidamente en el mundo laboral. ¡Solicita más información y cambia tu vida!

👉 Descubre más del Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp ¡Descarga el temario!

👉 Prueba el Bootcamp Gratis por una Semana ¡Empieza ahora mismo!

👉 Conoce nuestros otros Bootcamps en Programación y Tecnología

[email protected]

¿Trabajo? Aprende a programar y consíguelo.

¡No te pierdas la próxima edición del Aprende a Programar desde Cero Full Stack Jr. Bootcamp!

 

Prepárate en 4 meses, aprende las últimas tecnologías y consigue trabajo desde ya. 

 

Solo en España hay más de 120.400 puestos tech sin cubrir, y con un sueldo 11.000€ por encima de la media nacional. ¡Es tu momento!

 

🗓️ Próxima edición: 13 de febrero

 

Reserva tu plaza descubre las becas disponibles.