Desarrollo de algoritmo Eigenfaces: primera etapa

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

Algunos de nuestros reconocimientos:

Premios KeepCoding

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.

¿Qué encontrarás en este post?

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’

dim (img) <- c (1, 250 * 250)
dim (img)

1 . 62500

hist (img)

¿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!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado