上传多张人脸图像(5-10 张人脸图像,相同尺寸),更改为矩阵并在 R shiny 中从头开始执行 PCA

Uploading multiple images of faces (5-10 face images, same dimensions), change to matrix and perform PCA from scratch in R shiny

请帮忙。我是编程新手,有点困惑。

我需要上传 5 -10 张图片并从头开始对它们执行 PCA。但是我的第二个选项卡的绘图输出没有呈现 prop table 。 ** 所有图​​像在第一个选项卡上显示良好**,问题出现在之后的过程中。我很欣赏关于如何使用 Rshiny 的一些清晰度,我觉得我缺少一些基本的东西。

library(shiny)
library(EBImage)

#ui

ui <- fluidPage(
    
    titlePanel("Eigenfaces"),
    sidebarLayout(
        sidebarPanel (
            fileInput("images","Upload images", multiple = T, accept = c('image/png',"image/jpeg"))
        ),
        
        mainPanel(  
            tabsetPanel(
                tabPanel('Images for PCA', plotOutput("image")),
                tabPanel('Matrix', plotOutput("matrix"))
            )
        )
        
        
        
    ))

server <- function(input, output) {
    
    img <- reactive ({
        f<- input$images
        if(is.null(f))
            return(NULL)
      readImage(f$datapath)
       
        
    })
    
    
    output$image <- renderPlot({
        req(img())
        plot(img(), all = TRUE)
        
    })
    
    
    output$matrix <- renderPlot({
        
        req(img())
        image_matrix <-do.call('cbind',lapply(img(),as.numeric))
        #covaraince matrix
        im <-scale(image_matrix, center = TRUE)
        images <- cov(im)
        #eigen computation
        eigen_comp<-eigen(images)
        #eigen vectors
        eigen_vec <-eigen_comp$vectors
        #eigen values        
        eigen_values <-eigen_comp$values
        #proportion of eigen values
        y = round(prop.table(eigen_values),3)
        plot(y, type ="b")
       
        
       
    })
    
}    


# Run the application 
shinyApp(ui = ui, server = server)

使用 as.list 功能,我能够将图像引入并获取绘图

matrices <- reactive ({
     req(img)
        if(is.null(img()))
            return(NULL)
        f<- input$images
        faces <- as.list(f$datapath)
        image_list= lapply(faces,readImage)
        image_matrix <-do.call('cbind',lapply(image_list,as.numeric))
        y <-scale(image_matrix, center= TRUE)   
    })
    

faces for PCA

Variance plot