Захват данных живого окна - PullRequest
0 голосов
/ 24 марта 2019

Я хотел бы получить данные изображения (например, значения красного, зеленого, синего для пикселей) для указанного окна приложения и периодически делать это (например, каждые 100 миллисекунд) в R для создания игрового бота. В идеале я хочу, чтобы данные были непосредственно считаны в информационный фрейм, чтобы их можно было немедленно использовать в качестве входных данных для алгоритма обучения.

Каковы некоторые предлагаемые способы сделать это? Я использую R на Ubuntu Linux.

1 Ответ

3 голосов
/ 25 марта 2019

Для начала вам понадобится способ сделать снимок экрана и сохранить его (временный) файл.Лучший способ, который я нашел (используя this и this ), это использование ImageMagick .

Если у вас установлен ImageMagick, вы можете использовать следующую функцию / скрипт R для захвата экрана, загрузки данных и отображения данных в R (вы можете настроить аргументы в зависимости от желаемого разрешения и т. Д.).

Наконец, если вы хотите сделать больше с изображением, я рекомендую пакет imager.

Сценарий и загрузите изображение в R

library(imager) # for loading and plotting of the PNG file
library(glue)   # for string parsing

capture_screen <- function(file = "screenshot.png") {
  system(glue("import -window root -resize 2560x1440 -delay 200 {file}"))
  invisible(file)
}

file <- capture_screen()

shot <- load.image(file)

shot
#> Image. Width: 2560 pix Height: 1440 pix Depth: 1 Colour channels: 3

shot[1:10, 1:10, ]
#> , , 1
#> 
#>            [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
#>  [1,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [2,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [3,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [4,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [5,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [6,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [7,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [8,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>  [9,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#> [10,] 0.3440452 0.3385519 0.3357443 0.3331807 0.3284199 0.3248798
#>            [,7]      [,8]      [,9]     [,10]
#>  [1,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [2,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [3,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [4,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [5,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [6,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [7,] 0.3221790 0.3186389 0.3138781 0.3112993
#>  [8,] 0.3221790 0.3186389 0.3138781 0.3112840
#>  [9,] 0.3221790 0.3186389 0.3138018 0.3109636
#> [10,] 0.3221942 0.3185931 0.3136797 0.3123674
#> 
#> , , 2
#> 
#>            [,1]      [,2]      [,3]      [,4]      [,5]      [,6]
#>  [1,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [2,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [3,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [4,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [5,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [6,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [7,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [8,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>  [9,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#> [10,] 0.3319905 0.3292439 0.3244831 0.3209583 0.3181506 0.3152209
#>            [,7]      [,8]      [,9]     [,10]
#>  [1,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [2,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [3,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [4,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [5,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [6,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [7,] 0.3121691 0.3096513 0.3048905 0.3013504
#>  [8,] 0.3121691 0.3096513 0.3048905 0.3013352
#>  [9,] 0.3121691 0.3096513 0.3048600 0.3008164
#> [10,] 0.3121996 0.3095750 0.3045701 0.3070420
#> 
#> , , 3
#> 
#>           [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]
#>  [1,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [2,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [3,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [4,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [5,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [6,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [7,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [8,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#>  [9,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2828412
#> [10,] 0.300679 0.2975357 0.2945907 0.2916915 0.2887007 0.2857862 0.2829328
#>            [,8]      [,9]     [,10]
#>  [1,] 0.2799268 0.2769360 0.2740215
#>  [2,] 0.2799268 0.2769360 0.2740215
#>  [3,] 0.2799268 0.2769360 0.2740215
#>  [4,] 0.2799268 0.2769360 0.2740215
#>  [5,] 0.2799268 0.2769360 0.2740215
#>  [6,] 0.2799268 0.2769360 0.2740215
#>  [7,] 0.2799268 0.2769360 0.2740215
#>  [8,] 0.2799268 0.2769360 0.2740215
#>  [9,] 0.2799268 0.2769207 0.2734569
#> [10,] 0.2796063 0.2775616 0.2841840

График изображения

plot(shot)

# render only a subset
imsub(shot, y <= 200, y >= 100, x <= 500, x >= 200) %>% plot()

Создано в 2019-03-25 по Представить пакет (v0.2.1)

Редактировать

Если вы хотите загрузить данные только без файла screenshot.png, вы также можете сделать

capture_screen2 <- function(xmin = 0, xmax = Inf, ymin = 0, ymax = Inf) {
  tmp <- tempfile(fileext = ".png")
  system(glue("import -window root -resize 2560x1440 -delay 200 {tmp}"))

  img <- load.image(tmp)
  a <- try(unlink(tmp))
  imsub(img, x >= xmin, x <= xmax, y >= ymin, y <= ymax)
}

shot <- capture_screen2()

Редактировать 2: Проблемы со скоростью

Я сделал бенчмаркинг скорости кода, самый быстрый вариант - использовать scrot (sudo apt install scrot в Ubuntu) в сочетании с пакетом png:

system(glue::glue("scrot --silent screenshot.png"))
img <- png::readPNG("screenshot.png")
dim(img)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...