E novamente sobre o captcha

Aqui no Habré costumamos encontrar artigos sobre o reconhecimento de captcha. Sempre os li com muito interesse e hoje foi a minha vez de escrever. O caminho de uma implementação ingênua com Tesseract para um serviço da web com uma rede neural complexa me levou cerca de um ano. O número de erros de reconhecimento foi reduzido de 90 para menos de 1%.





Depois que um serviço de hospedagem de arquivos bastante conhecido, mais uma vez, mudou algo no algoritmo e, antes de fazer o download, uma janela de entrada de captcha começou a aparecer no programa de download. Era irritante e as velhas soluções alternativas pareciam não funcionar mais. Comecei a pensar em como resolver o problema. Com o plug-in conectado ao programa, tudo ficou simples, fica por conta do reconhecimento do próprio captcha. Consistia em 4 símbolos coloridos (letras, números) de tamanhos diferentes girados até 30 graus em ambas as direções em um fundo colorido com linhas retas finas. Como resultado de pesquisas, encontrei o programa de OCR Tesseract, salvei vários arquivos com captchas e tentei reconhecê-los. Uma solução ingênua deu cerca de 10% de resultados corretos, rapidamente tornou-se possível definir uma lista de caracteres permitidos - isso aumentou o percentual de acertos para 20. Já é possível trabalhar com isso - escreveu em Pythonum programa que envia captchas para reconhecimento e retorna o resultado para o programa de download. Ao longo do caminho, comecei a experimentar o processamento gráfico de imagens para melhorar a precisão do reconhecimento. No início tentei convertê-los para preto e branco, mas devido à baixa resolução e algum gradiente de cor, as bordas do símbolo acabaram sendo cortadas. Parei de diminuir o croma descartando os 6 bits menos significativos de cor. Também tive a ideia de processar a imagem personagem por personagem, quebrando a imagem em partes e fazendo várias tentativas em diferentes ângulos de rotação. A rotação de -30 a 30 com um passo de 5 graus com a seleção do resultado mais comum deu uma precisão de 30-40%, mas o tempo para um captcha aumentou para 12 segundos.





Tesseract . , - . OCR .





, , 3 . , . - , . , , . , 40-50%. .





- OpenCV NumPy . , , . 70-80%, 85 . - , . .





, MNIST . ( 2500), 2828 , 25% - 9000 . , Keras Tensorflow, 100% 75% . - 1,8 . , NumPy, . "Python Machine Learning" , .





. , , . , . , - . , , . , , . 90%.





, 6000 . , 2 , . - , - - "How to implement an OCR model using CNNs, RNNs and CTC loss". Keras.





, "" , 2%. "", , 20 . - , ( ), . , , - 15000 . - - , 2 . 1 250 . Keras Tensorflow . 3 2 , . - Flask, .





, . , .





:









  1. - - ,





  2. ,





  3. - -





  4. " , . , , , " ()








All Articles