Nothing
Sys.setenv(GL_AUTH = "auth.json")
Sys.setenv(GCV_AUTH_FILE = "auth.json")
# nolint start
library(shiny)
library(googleAuthR)
library(googleLanguageR)
library(googleCloudVisionR)
library(shinythemes)
library(shinydashboard)
ui <- navbarPage(
title = "Image Talker",
windowTitle = "Turn images into speech using machine learning",
theme = shinytheme("sandstone"),
footer = helpText("Demo via MarkEdmondson1234/googleCloudRunner"),
tabPanel(title = "Talking Images",
sidebarLayout(
sidebarPanel(
helpText("Upload an image, have it spoken back to you"),
radioButtons("input_choice", "Where is the image?",
choices = c("URL", "Upload"), inline = TRUE),
uiOutput("input_ui"),
actionButton("do_image", "Get/Change Image"),
br()
),
mainPanel(
uiOutput("show_image"),
br()
))
),
tabPanel(title = "Examples",
)
)
server <- function(input, output, session){
output$input_ui <- renderUI({
if(input$input_choice == "Upload"){
fileInput("image_input", "Upload an image",
accept = c("jpeg", "png", "gif"))
} else {
textInput("image_input", label = "Paste in URL to image",
value = "https://bit.ly/2IhUzdE")
}
})
image_source <- eventReactive(input$do_image, {
if(input$input_choice == "Upload"){
message("An uploaded image")
if(is.null(input$image_input$datapath)) return(NULL)
# 2MB limit
if(file.info(input$image_input$datapath)$size > 2000000){
stop("Image is too large - limit to under 2MB", call. = FALSE)
}
if(is.null(input$image_input$datapath)) return(NULL)
# copy to www folder
src <- tempfile("img", "www")
file.copy(input$image_input$datapath, src)
} else {
message("A URL to copy")
# download to temp file
tmp <- tempfile()
download.file(input$image_input, tmp)
src <- tmp
}
src
})
output$show_image <- renderUI({
shiny::req(image_source())
message("image_source(): ", image_source())
if(input$input_choice == "Upload"){
src <- gsub("www/", "", image_source())
} else {
src <- input$image_input
}
if(!is.null(input$input_choice) &&
input$input_choice == "Upload" &&
!is.character(input$image_input) &&
is.null(input$image_input$datapath)){
return(
shinydashboard::box(
title = "Upload an image",
background = "olive",
width = 12,
br()
)
)
}
shinydashboard::box(
title = isolate(input$say_me),
background = "olive",
width = 12,
fluidRow(
column(width = 8,
tags$img(src = src, width = "100%", height = "100%")
),
column(width = 4,
actionButton("do_apis", "Speak this image"),
textInput("override_label", "Override image label" ,
placeholder = "Provide your own image label to talk"),
uiOutput("image_labels")
)),
gl_talk_shinyUI("image_talk")
)
})
annotations <- reactive({
shiny::req(image_source())
message("upload:", image_source())
message("Calling vision API")
gcv_get_image_annotations(
image_source(),
feature = "LABEL_DETECTION",
maxNumResults = 5
)
})
output$image_labels <- renderUI({
shiny::req(annotations())
choices <- annotations()$description
if(!is.null(input$override_label) && input$override_label != ""){
message("User provided label")
choices <- c(input$override_label, choices)
}
radioButtons("say_me", "Choose what to say" ,
choices = choices)
})
talk_me <- eventReactive(input$do_apis, {
shiny::req(input$say_me)
input$say_me
})
output$big_text <- renderText({
shiny::req(input$say_me)
input$say_me
})
callModule(gl_talk_shiny, "image_talk",
transcript = talk_me, name = "en-GB-Wavenet-A")
}
shinyApp(ui = ui, server = server)
# nolint end
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.