Como usar o pacote Captcha SAJ

if(!require(captchasaj)) {
  devtools::install_github('jtrecenti/captchasaj')
}
library(captchasaj)

Baixar

A função baixar simplesmente faz o download de uma imagem de captcha do Tribunal de Justiça de São Paulo e salva em um arquivo temporário. O valor retornado é o caminho do arquivo.

arq <- baixar()
arq

Ler

A função ler utiliza a função readPNG do pacote png para carregar a imagem no R a partir de um caminho de arquivo especificado. A cor branca é retirada da imagem. O valor retornado é um data.frame como no exemplo abaixo:

d <- ler(arq)

knitr::kable(head(d, 10))

Desenhar

A função desenhar não seria necessária, teoricamente, para o ajuste de um modelo preditivo para captchas. No entanto, ela é bastante útil para visualizar os captchas carregados. A função recebe um data.frame com informações da imagem e cria um gráfico usando ggplot2. Usando nosso exemplo, fazemos:

desenhar(d)

Limpar

Na grande maioria das análises de dados, a parte mais trabalhosa é a parte da manipulação de dados. Nosso caso não é muito diferente. A função limpar tem como objetivo tirar os segmentos de reta que atrapalham a interpretação das letras nas imagens.

Por sorte, o captcha do SAJ tem uma facilidade bem interessante: ele é colorido, e geralmente as cores dos segmentos são diferentes das cores das letras. Isso facilita bastante a limpeza das imagens. O problema aparece quando a imagem está na cor preta. Nesse caso, a função tenta encontrar as retas e tirá-las, mas isso nem sempre funciona. Não vamos entrar em detalhes sobre como fazemos a limpeza, mas se quiser ler e ajudar é só acessar o código no GitHub.

A função retorna um data.frame modificado e filtrado, mas com as mesmas colunas.

d_limpo <- limpar(d)
desenhar(d_limpo)

Picotar

A função picotar tenta separar as letras da imagem, adicionando uma nova coluna grupo no data.frame retornado. Também não entraremos em detalhes de como a função faz para picotar a imagem. A função

d_picotado <- picotar(d_limpo)
desenhar(d_picotado)

Classificar

A função classificar ajuda a montar uma base de dados de treino, guardando as letras classificadas em arquivos .rds. A função recebe um data.frame picotado, um character com as classificações e uma pasta para colocar as letras classificadas, e não retorna nada.

classificar(d_picotado, 'qwert', 'pasta')

Construir banco de dados

A função construir_bd recebe um conjunto de arquivos e carrega uma base de dados, preparada para .

dados <- carregar_bd('pasta')

Treinar

A função treinar tem como objetivo ajustar um modelo preditivo a partir de um banco de dados lido pela função carregar_bd. Essa função é apenas um jeito padrão de ajustar o modelo, usando a função train do pacote caret e o método de florestas aleatórias (random forests). A função ajusta o modelo em apenas uma porção da base, controlada pelo parâmetro prop, e estima o erro preditivo na parte da base que ficou de fora. A função retorna uma lista com o modelo ajustado e a estimativa do erro.

# not run, pode demorar...
modelo <- treinar('pasta', prop = .75)
# modelo que já vem no pacote
data('modelo_inicial', package = 'captchasaj')
modelo$oos

Decodificar

A função decodificar recebe como parâmetros um arquivo de imagem e o modelo ajustado, retornando o texto predito pelo modelo.

decodificar(arq, modelo$modelo)

Utilização

Se quiser criar um novo modelo, classificando as letras, rode esse código várias vezes, mudando o texto e guardando numa pasta apropriada.

d <- baixar() %>% ler()
d %>% desenhar()

d %>% 
  limpar() %>% 
  picotar() %>% 
  classificar('texto', path = 'pasta')

Para ajustar o modelo preditivo, você pode fazer da forma que quiser, mas recomendamos utilizar a função train do pacote caret.

Se tiver dúvidas ou sugestões, adicione comentários ou inicie discussões na página do GitHub. Até a próxima!



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