我下面有一个闪亮的应用程序,可以进行图像识别。我上传了下面的图片,并且您将看到它的显示。问题是我想在stack()
函数中使用此文件的名称(“ DJI_0104.jpg”)来创建图像堆栈。然后我绘制结果(纹理)。基本上,我正在寻找一种仅使用上载图像名称的方法,例如在R104()中有效的方法。您可以找到.jpg here
library(shiny)
library(base64enc)
library(raster)
library(glcm)
options(shiny.maxRequestSize = 30*1024^2)
ui <- fluidPage(
fileInput("upload", "Upload image", accept = "image/png"),
uiOutput("image"),
plotOutput("textures")
)
server <- function(input, output){
base64 <- reactive({
inFile <- input[["upload"]]
if(!is.null(inFile)){
dataURI(file = inFile$datapath, mime = "image/png")
}
})
output[["image"]] <- renderUI({
if(!is.null(base64())){
tags$div(
tags$img(src= base64(), width="100%"),
style = "width: 400px;"
)
}
})
#That does not work
R105 <- reactive({
stack(base64())
})
#That works
R104 <- reactive({
stack("DJI_0104.jpg")
})
textures <- reactive({
glcm(raster(R105(), layer=3))
})
output$textures<-renderPlot({
#Create a stack of the image
plot(textures())
})
}
shinyApp(ui, server)
答案 0 :(得分:1)
您可以找到更多详细信息here,但这是一个解决方案:在base64()
反应式中,inFile
是在fileInput()
的输出之后构建的,输出具有4字段:name
,size
,type
和datapath
(请参见上面的链接)。
正如Stéphane Laurent所强调的那样,使用inFile$name
将使您的ShinyApp正常工作。
最好。