Rompiendo captchas

Por cosas de la vida, últimamente ando trasteando con las arañas, crawleando cosas varias... y al final era inevitable toparse con los CAPTCHAs, así que se me ha presentado la ocasión de intentar vencerlos, por ahora esto es lo poco que he conseguido [ captcha_baker.py ], lo poco que hace el propio script es leer los pixels de la primera línea y pasar a blanco los que estén cerca de estos, y a negro el resto. Después corta las letras por las columnas en blanco.

El valor de la "cercanía" es modificable (de hecho la idea viene del parámetro "umbral" de la selección de color de GIMP).

Depende de Image Magick para convertir las imágenes a BMP, Python_Image Library para recortar las letras y tesseract-ocr para reconocer las letras.

No funciona demasiado bien, pero estoy bastante contento con el resultado para ser una primera prueba.

Los parámetros son:

===============================================================================

./captcha_baker.py []

===============================================================================

El número de letras no es realmente necesario, se puede poner a 0 para no considerarlo. El umbral por defecto es 15. Por último unas muestras.

El tipo de captchas para el que esta pensado:

===============================================================================

$ ./captcha_baker.py img.png 0 75 Convirtiendo a img.bmp ... 24 Leyendo primera fila Aplicando un umbral de 75 Guardando base: output.bmp Partiendo nosecuantas letras Letra 1: L Letra 2: L Letra 3: I Letra 4: B Resultado: LLIB

===============================================================================

Uno que me encotré por ahí [ Python_ocr_or_How_to_break_captchas ]:

===============================================================================

$ ./captcha_baker.py captcha.bmp 0 75 24 Leyendo primera fila Aplicando un umbral de 75 Guardando base: output.bmp Partiendo nosecuantas letras Letra 1: W Letra 2: 6 Letra 3: 8 Letra 4: 8 Letra 5: H Letra 6: P Resultado: W68HP

===============================================================================

Y uno que no consigue separar las letras porque no hay columnas en blanco, pero algo hace...

===============================================================================

$ ./captcha_baker.py img.jpeg 0 150 Convirtiendo a img.bmp ... 24 Leyendo primera fila Aplicando un umbral de 150 Guardando base: output.bmp Partiendo nosecuantas letras Letra 1: \ Resultado: \ $

===============================================================================

Peeero si se ve el archivo intermedio, antes de cortar:

se puede ver que el que escribe metió la pata al programar la clase BMP ... ah! y que algo sí que limpia.

Nos vemos

untagged

Acelerenado `route`, `netstat` y parecidos [tip] » « Historias desde los confines de random()