上一篇文章介绍了如何使用TensorFlow和R语言进行图像识别,今天的文章将展示如何使用shiny将其包装成一个小程序。
shiny程序由两部分组成:ui.R
和 server.R
。ui.R
负责前端展示,而 server.R
负责服务器端逻辑处理。
我最初在Windows系统上编写了ui.R
,并计划在Linux系统上编写server.R
。为了使界面更加美观,我在ui.R
中添加了一些CSS样式,效果如下所示。然而,在Linux系统上,由于CSS的问题,背景图片无法正常显示,因此背景色被设置为单一颜色。
接下来,我们来看一下程序的效果。用户可以通过点击“选择图片”按钮,从本地选择一张图片进行识别。识别过程大约需要7到20秒的时间。下面是识别过程的截图:
首先,我们分享一下ui.R
的代码:
```r library(shiny)
shinyUI( fluidPage( includeCSS("style.css"), div(style="text-align:center", headerPanel("图像识别")), sidebarLayout( sidebarPanel( fileInput("image", label="上传图片", accept=c(".png",".jpg"), buttonLabel="点击选择图片", placeholder="未选择") ), mainPanel( plotOutput("distPlot") ) ) ) ) ```
以下是针对不同系统的CSS代码:
Linux系统CSS代码
css
h1 {}
body {
background-color: #225E79;
}
Windows系统CSS代码
css
h1 {}
body {
background-image: url(back.jpg);
background-size: 100% 100% auto;
position: absolute;
background-repeat: no-repeat;
}
最后,以下是server.R
的代码:
```r library(shiny) library(tensorflow) library(magrittr) library(jpeg) library(readr) library(ggplot2) library(grid)
names = readdelim("imagenetclasses.txt", "t", escapedouble = FALSE, trimws = TRUE, col_names = FALSE) slim = tf$contrib$slim
shinyServer(function(input, output) { observeEvent(input$image, { img <- input$image if (!is.null(img)) { imgpath <- img$datapath imgdata <- readJPEG(img_path) # 图像识别的后续处理步骤... } }) }) ```
以上代码展示了如何使用shiny框架将TensorFlow和R语言结合起来,实现图像识别功能。希望这些内容对您有所帮助。