if(!require(captchasaj)) { devtools::install_github('jtrecenti/captchasaj') } library(captchasaj)
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
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))
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)
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)
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)
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')
A função construir_bd
recebe um conjunto de arquivos e carrega uma base
de dados, preparada para .
dados <- carregar_bd('pasta')
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
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)
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!
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.