Experiência de OCR: Quebrando captcha com 26 linhas de código Python!

AGRADEÇA AO AUTOR COMPARTILHE!

Durante este último mês, estive desenvolvendo uma solução GED utilizando a biblioteca de OCR Pytesser aliada à já conhecida e poderosa biblioteca de manipulação de imagens do Python, a PIL, que é utilizada em larga escala em soluções como Google Maps, Yahoo Maps e até mesmo no Youtube. Originalmente inspirado por um post[0] da Bonsai Security resolvi tentar a quebra de um captcha simples utilizando Pytesser e PIL.

CAPTCHA é um acrônimo da expressão “Completely Automated Public Turing test to tell Computers and Humans Apart” (teste de Turing público completamente automatizado para diferenciação entre computadores e humanos): um teste de desafio cognitivo, utilizado como ferramenta anti-spam, desenvolvido pioneiramente na universidade de Carnegie-Mellon. Como o teste é administrado por um computador, em contraste ao teste de Turing padrão que é administrado por um ser humano, este teste é na realidade corretamente descrito como um teste de Turing reverso.

O consenso geral é que isso seria fácil, mas o problema é conseguir uma solução de quebra de captcha que qualquer um possa fazer download e rodar em seu computador; Então o pessoal da Bonsai criou em alguns minutos um simples script Python que eu testei com vários exemplos de imagens e acabei utilizando o mesmo conceito para outras aplicações. A grande sacada está em utilizar httplib ou urllib para fazer a chamada aos arquivos de imagem. Antes de qualquer coisa tenha em mente: Isso é uma experiência didática. Geralmente não encontramos captchas fracos por ai e neste exemplo trabalharemos exclusivamente com este tipo de catpcha:

  • As letras não são rotacionadas
  • As letras possuem a mesma largura
  • As imagens são do mesmo tamanho
  • Não sofrem deformações
  • Plano de fundo é o mesmo para toda a imagem

Agora, vamos entender o código que quebra este captcha:

resultado:

Esta simples código, quebra 90% de qualquer captcha que utilize esta implementação. Aconselho fortemente aos programadores Pythonistas, para ficarem de olho no Pytesser, uma biblioteca excelente para OCR, com a qual tenho tido muito sucesso ultimamente! :)

[0] Bonsai

Aconselho a leitura deste post -> http://under-linux.org/blogs/magnun/brincando-com-python-e-pil-392/

Abraços

AGRADEÇA AO AUTOR COMPARTILHE!

Bruno Rocha

Mais artigos deste autor »

Desenvolvedor e consultor web. Possui mais de 9 anos de experiência em desenvolvimento web e já trabalhou com as linguagens C, PHP, ASP, C#.

Atualmente, ministra treinamentos, palestras e desenvolve soluções com Python para web com os frameworks Pylons e web2py.

Um dos colaboradores do http://web2pybrasil.appspot.com e as vezes escreve também no blog http://rochacbruno.com.br

Além dos projetos com Python, atua como desenvolvedor e coordenador de projetos (ScrumMaster) na empresa GENTE - http://servicogente.com.br

Contato:
http://twitter.com/rochacbruno / rochacbruno[gmail.com]


9 Comentários

walter
3

ola bruno
gostaria de conversar com voce
sobre um trabalho deste nivel
como poderiamos fazer?
obrigado
aguardo

Michael
9

Boa Noite, estou necessitando quebrar um captcha simples utilizando c#.

Teria como me auxiliar?

Grato

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">