【R】pixels

1. はじめに

pixelsは、htmlwidgetShiny Gadget で簡単にピクセルデータを描画できるパッケージです。

2. インストール

CRANからインストールできます。

install.packages("pixels")

3. つかってみる

まずは、簡単な例として描いた文字、図のピクセルデータを返してくれる関数です。

library(pixels)
get_pixels()
library(pixels) get_pixels()
library(pixels)
get_pixels()

実行すると、Viewerペインに下図の画面が表示されます。28×28の領域に絵や文字をかけます。かいた後にDoneボタンを押すと、ピクセルデータを返してくれます。


  [1]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [20]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [39]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [58]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [77]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 [96]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[115]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  2.1  1.8
[134]  0.5  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[153]  0.0  0.0  0.0  0.0  0.0  1.5  3.3  3.5  3.0  2.0  0.5  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[172]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0  3.4  4.3  4.0  3.5  2.6
[191]  0.8  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[210]  0.0  0.5  1.3  2.3  3.0  4.5  4.5  3.8  2.0  0.5  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[229]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.5  1.8  2.3  2.3  2.5  2.5  3.0  3.9  2.3  0.5  0.0
[248]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.5  4.1  5.4
[267]  4.0  3.0  2.5  2.3  1.8  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[286]  0.0  0.0  0.0  0.0  0.0  1.5  6.6  9.5  8.5  6.0  3.8  2.3  1.3  0.5  0.0  0.0  0.0  0.0  0.0
[305]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.5  4.6  9.1 10.5 10.5  8.1
[324]  3.9  1.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[343]  0.0  0.0  0.0  0.8  5.2  8.0  9.5 10.1  7.5  1.5  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[362]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.5  3.0  6.0  7.6  7.1  3.0  0.0
[381]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[400]  0.0  0.0  0.0  0.5  2.8  3.7  2.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[419]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[438]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[457]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[476]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[495]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[514]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[533]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[552]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[571]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[590]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[609]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[628]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[647]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[666]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[685]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[704]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[723]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[742]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[761]  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
[780]  0.0  0.0  0.0  0.0  0.0

次のコードはShinyアプリで、描いた画像をMNISTデータセットのように、/digitsフォルダ以下にデータとして保存してくれます。ですので、自分で画像認識用のデータセットを作れることになります。

library(shiny)
ui <- fluidPage(
tags$head(
tags$style(HTML("
#pixels {
height: 270px !important;
margin-top: 10px;
}
"))
),
titlePanel("Digit Capture Application"),
textOutput("prompt"),
shiny_pixels_output("pixels"),
actionButton("captureDigit", "Capture")
)
server <- function(input, output) {
output$pixels <- shiny_render_pixels(
show_pixels()
)
digit <- reactiveVal(floor(runif(1, 1, 10)))
output$prompt <- renderText(paste0("Please draw number ", digit(), ":"))
observeEvent(input$captureDigit, {
digit_path <- file.path("digits", digit())
if (!dir.exists(digit_path)) dir.create(digit_path, recursive = TRUE)
saveRDS(input$pixels, paste0(digit_path, "/", as.numeric(Sys.time()), ".rds"))
digit(floor(runif(1, 1, 10)))
output$pixels <- shiny_render_pixels(
show_pixels()
)
})
}
shinyApp(ui = ui, server = server)
library(shiny) ui <- fluidPage( tags$head( tags$style(HTML(" #pixels { height: 270px !important; margin-top: 10px; } ")) ), titlePanel("Digit Capture Application"), textOutput("prompt"), shiny_pixels_output("pixels"), actionButton("captureDigit", "Capture") ) server <- function(input, output) { output$pixels <- shiny_render_pixels( show_pixels() ) digit <- reactiveVal(floor(runif(1, 1, 10))) output$prompt <- renderText(paste0("Please draw number ", digit(), ":")) observeEvent(input$captureDigit, { digit_path <- file.path("digits", digit()) if (!dir.exists(digit_path)) dir.create(digit_path, recursive = TRUE) saveRDS(input$pixels, paste0(digit_path, "/", as.numeric(Sys.time()), ".rds")) digit(floor(runif(1, 1, 10))) output$pixels <- shiny_render_pixels( show_pixels() ) }) } shinyApp(ui = ui, server = server)
library(shiny)

ui <- fluidPage(
  tags$head(
    tags$style(HTML("
      #pixels {
        height: 270px !important;
        margin-top: 10px;
      }
    "))
  ),
  titlePanel("Digit Capture Application"),
  textOutput("prompt"),
  shiny_pixels_output("pixels"),
  actionButton("captureDigit", "Capture")
)

server <- function(input, output) {
  output$pixels <- shiny_render_pixels(
    show_pixels()
  )
  
  digit <- reactiveVal(floor(runif(1, 1, 10)))
  output$prompt <- renderText(paste0("Please draw number ", digit(), ":"))
  
  observeEvent(input$captureDigit, {
    digit_path <- file.path("digits", digit())
    if (!dir.exists(digit_path)) dir.create(digit_path, recursive = TRUE)
    saveRDS(input$pixels, paste0(digit_path, "/", as.numeric(Sys.time()), ".rds"))
    
    digit(floor(runif(1, 1, 10)))
    output$pixels <- shiny_render_pixels(
      show_pixels()
    )
  })
}

shinyApp(ui = ui, server = server)

4. さいごに

ピクセルデータを簡単に生成できるので、自分でデータセットを作るには最適のパッケージですね。

Add a Comment

メールアドレスが公開されることはありません。