Pacotes

library(captchaReceita)
library(dplyr)
library(ggplot2)
library(tidyr)
library(stringr)
library(caret)

Baixar

for(i in 1:100) {
 dest = sprintf("data-raw/captchas/captcha%05d.jpeg", i)
 download(dest)
 Sys.sleep(1)
}

Classificar

tmp <- tempfile()
for(i in 1:100) {
  download(tmp)
  d <- ler(tmp)
  print(desenhar(d))
  classificar_raw(d, 'data-raw/salvos')
}
file.remove(tmp)
rm(tmp)

BD treino

arqs <- dir('data-raw/salvos', full.names = TRUE)
d <- montar_bd_treino(arqs)
d <- d[!is.na(d$letra), ]
saveRDS(d, 'data-raw/treino.rds')

Modelo

data(treino)
set.seed(123)
modelo <- ajustar_modelo(d, prop = .8)
saveRDS(modelo, 'data-raw/modelo.rds')

Tabela de acertos na base de teste

data(modelo)
modelo$d_teste$pred <- predict(modelo$modelo, modelo$d_teste)
acertos <- table(modelo$d_teste$pred, modelo$d_teste$letra)

# pander::pander(acertos)

Decodificar

tema <- theme(axis.text = element_blank(),
              axis.ticks = element_blank(),
              axis.title = element_blank())

modelo2 <- readRDS('data/modelo_SVM.rds')
m_stack <- readRDS('data/m_stack.rds')


l <- dir('data-raw/captchas', full.names = TRUE)
a <- sample(l, 1)
a %>% ler() %>% desenhar()
decodificar_stack(a, modelo, modelo2, m_stack)


for(i in 1:100) {
  arq <- download()
  d <- arq %>% ler
  (d %>% desenhar() + tema) %>% print
  saveRDS(d, 'x.rds')
  arrumar_bd('x.rds', spr = F) %>% desenhar
  system.time(res <- decodificar_stack(arq, modelo, modelo2, m_stack))
  print(res)
}
# d_stack <- data.frame(y = factor(treino$letra),
#                       x1 = predict(modelo$modelo, treino),
#                       x2 = predict(modelo2$modelo, treino))
# 
# in_train <- createDataPartition(d_stack$y, p = 0.7)[[1]]
# d_stack_train <- d_stack[in_train, ]
# d_stack_test <- d_stack[-in_train, ]
# 
# m_stack <- train(y~., data = d_stack_train, method = 'rf')
# tab <- table(d_stack_test$y, predict(m_stack, d_stack_test))
# sum(diag(tab))/nrow(d_stack_test)

Aprender online

classificar_online(100, 
                   'data-raw/online/temp', 
                   'data-raw/online/corretos', 
                   'data-raw/online/errados')

corrigir_errados('data-raw/online/errados', 'data-raw/online/corretos')


jtrecenti/captchaReceita documentation built on May 20, 2019, 3:16 a.m.