Rompiendo un captcha simple
Ejemplos de imágenes a resolver
Patrones encontrados:
Cada una de las imágenes del captcha presenta las siguientes características:
Fondo blanco
Tramado de fondo se mantiene (en color y trazo)
Combinaciones de letras y números
Color de letras se mantiene
Fuente de letras se mantiene
Rotación del captcha entre -90 y +90 grados
Solución propuesta:
Obtener color de fondo
Obtener color de las tramas del fondo
Obtener color de las letras
Cambiar color de las tramas por color de fondo
Encontrar angulo de rotación de las letras y rotar por el ángulo inverso
Detección de caracters (OCR)
1 Obtener color de fondo
A simple vista.
Histograma de colores (primero más predominante)
2 Obtener color de las tramas del fondo
A simple vista
Histograma de luminosidad (el segundo más luminoso; el primero es el fondo, el tercero son las letras)
Histograma de colores (segundo más predominante)
3 Obtener color de las letras
A simple vista
Histograma de luminosidad (tercero más luminoso)
Histograma de colores (tercero más predominante)
4 Cambiar color de las tramas por color de fondo
Convert (ImageMagick)
Algoritmo fuerza bruta:
Recorrer imagen pixel a pixel
Obtener color del pixel
Si el color es del entramado, pintar con el de fondo
Si el color es el del fondo, continuar
5 Encontrar rotación de las letras
Transformada de Fourier
Kernel (por ejemplo Sobel)
Algoritmo aproximado
Incrementar numero desde -90 a +90; por cada incremento:
Rotar la imagen en la cantidad de grados
Proyectar los pixeles de la imagen sobre el eje Y
Obtener distancia entre primer y último pixel -distinto del color de fondo- proyectados en eje Y, y guardar tupla [ángulo, distancia]
Obtener el ángulo con menor distancia
Rotar la imagen usando ángulo encontrado
6 Detección de caracteres
User Tesseract OCR
Ejemplos de imágenes resueltas