En un post anterior iniciamos el desarrollo de un algoritmo Eigenfaces en el cual desarrollamos las dos primeras etapas: la descarga de datos y la carga de imágenes.
Para ello, creamos el directorio donde se iban a descargar las imágenes del dataset y, posteriormente, las descargamos. Acto seguido, creamos una matriz que nos enseñara el número de la foto que buscáramos.
En este artículo seguiremos con dicho ejercicio y la siguiente etapa es la transformación de esas imágenes que hemos cargado previamente.
Transformación de imágenes
Convertimos la matriz de todas las imágenes de 250×250 en 1×62500.
Cargamos todas las imágenes de George W. Bush y de otros personajes y las guardamos en un array de N x 62500.
A continuación, dividimos esa matriz en dos, una para entrenamiento y otra para testing.
#Desarrollo de un algoritmo Eigenfaces img <- rbind (img, img) dim (img)
2 . 62500
#Desarrollo de un algoritmo Eigenfaces get all pics for <- function { i <- 0 list imgs-list() repeat { i <- i + 1 img <- get_pic (name, id = 1, bw = TRUE)} if (is.null (img)){ break } dim (img) <- c (1, 250 * 250) list_imgs [[i]] <- img } do.call ("rbind", list_imgs) } name <- 'George W Bush' pics_bush <- get_all_pics_for (name) dim (pics_bush)
530 . 62500
#Desarrollo de un algoritmo Eigenfaces pics_other <- get_all_pics_for ('Ariel Sharon') for (name in c ('Jose Maria Aznar', 'Hugo Chavez', 'Tony Blair', 'Colin Powell', 'Donald Rumsfeld', 'Vladimir Putin', 'Junichiro Koizumi', 'Arnold Schwarzenegger' )) { imgs <- get_all_pics_for (name) pics_other <- rbind (pics_other, imgs) } d dim (pics_other) set.seed(1) idx_bush <- sample (1 : nrow (pics_bush), 0.7 * nrow (pics_bush),) train_bush <- pics_bush [idx_bush,] test_bush <- pics_bush [-idx_bush,] idx other <- sample (1 : nrow (pics_other), 0.7 * nrow (pics_other),) train other <- pics_other [idx_other,] test_other <- pics_other [-idx_other,] train matrix <- rbind (train_bush, train_other) dim (train_matrix) test matrix <- rbind (test_bush, test_other) dim (test matrix)
[Train]
947 . 62500
[Test]
406 . 62500
rownames (train_matrix) <- c (rep ("bush", nrow (train_bush)), rep("other", nrow(train_other))) rownames (test_matrix) <- c (rep ("bush", nrow (test_bush)), rep ("other", nrow (test_other))) train_matrix [sample (1 : nrow (train_matrix),10), 1 : 10]
plot_row_image <- function (row) { img <- matrix (row, ncol = sqrt (length (row))) plot (1 : 2, type = 'n') rasterImage (img, 1, 1, 2, 2) } plot_row_image (train_matrix [800 , ])
Así, damos por terminado el desarrollo de un algoritmo Eigenfaces.
Si te ha gustado este ejercicio, recuerda que en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp tenemos muchos más. Esta es una formación intensiva en la que aprenderás todo lo necesario para incursionar rápidamente en el mundo laboral y conseguir un mejor empleo. ¡Anímate y solicita más información!