Bypass Captcha decoding
1.- [login to view URL]
[login to view URL]
2.- [login to view URL]
[login to view URL]
Se requiere un código fuente que a través de la url ya proporcionada, de la imagen que genera el captcha, se pueda obtener el texto en la imagen que debe ser coincidente con el captcha para poder ingresarlo de forma automatizada.
Se requiere un código fuente que a través de la url ya proporcionada, de la imagen que genera el captcha, se pueda obtener el texto en la imagen que debe ser coincidente con el captcha para poder ingresarlo de forma automatizada.
Datos de ingreso:
Url imagen captcha,
Datos de salida:
JSON que ponga el código obtenido del captcha
Adjunto un código que actualmente tenemos para otro servicio de captcha.
#!/usr/bin/env python2.7
# -*- coding: utf-8 -*-
import [login to view URL]
import [login to view URL]
from [login to view URL] import json_encode
import urllib2 as urllib
from PIL import Image
from cStringIO import StringIO
import numpy as np
import tesserwrap
import cv2
import base64
class MainHandler([login to view URL]):
def get(self):
print "El sistema correra"
# Url de búsqueda de imagen
url = self.get_query_arguments('url')
# Tiene resultados (?)
if not len(url):
return
# Decodificamos el contenido de url
_url_decode = [login to view URL](url[0])
# Obtenemos el captcha
url = _url_decode
print url
#url = "[login to view URL]"
file = StringIO([login to view URL](url).read())
original = [login to view URL](file)
# Convertimos formato PIL a CV2
cv_img = [login to view URL](original)[:,:,::].copy()
# Convertimos imagen a scala de grises.
gray = [login to view URL](cv_img, cv2.COLOR_BGR2GRAY)
# Aplicamos filtro Canny para eliminar lineas.
edges = [login to view URL](gray, 60, 200, apertureSize = 3)
# Obtenemos las lineas.
lines = [login to view URL](edges, 1, [login to view URL] / 180, 1, None, 0, 0)
# Dibujamos las lineas encontradas en color blanco.
for x1, y1, x2, y2 in lines[0]:
[login to view URL](cv_img, (x1, y1), (x2, y2), (255,255,255 ), 2)
# Creamos una copia de nuestra imagen limpia sin lineas.
processed = [login to view URL](cv_img, cv2.COLOR_BGR2GRAY)
# Aplicamos un desenfoque gaussiano.
blur = [login to view URL](processed, (3, 3), 0)
# Aplicamos threshold.
threshold = [login to view URL](blur, 128, 255, cv2.THRESH_BINARY)[1]
# Aplicamos transformación morfologica.
kernel = [login to view URL](cv2.MORPH_ELLIPSE, (6, 6))
morph = [login to view URL](threshold, cv2.MORPH_OPEN, kernel)
# Convertimos nuestra imagen final procesada a PIL.
pil_img = [login to view URL](morph)
# Iniciamos tesseract y leemos la imagen.
tesseract = [login to view URL]()
tesseract.set_variable("tessedit_char_whitelist", "0123456789abcdefghijklmnopqrstuvwxyz")
tesseract.set_page_seg_mode(8)
try:
tesseract.ocr_image(pil_img)
except Exception as e:
print "Excepción", e
return
text = tesseract.ocr_image(pil_img)
responseAsJson = {
'code': [login to view URL](),
'status': 'success'
}
# Enviamos la respuesta
[login to view URL](json_encode(responseAsJson))
#application = [login to view URL]([
# (r"/", MainHandler),
#])
if __name__ == "__main__":
application = [login to view URL]([
(r"/", MainHandler),
])
[login to view URL](8888)
[login to view URL]().start()