Форум сайта python.su
FishHookПомоему с капчами как с криптографией - если не в теме, то будешь изобретать легко ломаемые велосипеды
Выглядит она трудноломаемой
from PIL import Image, ImageOps from ImageFilter import * WHITE = 255 BLACK = 0 MARGIN = 2 img = Image.open('capt.png').convert("RGB") # remove filled squares img = img.filter(MinFilter(3)).filter(CONTOUR) # to monochrome img = img.convert('1')
pixels = img.load() vert_lines = set() horiz_lines = set() # get vertical lines for x in xrange(img.size[0]): if pixels[x, MARGIN] == BLACK: vert_lines.add(x) # get horizontal lines for y in xrange(img.size[1]): if pixels[MARGIN, y] == BLACK: horiz_lines.add(y) # remove lines for x_coord in vert_lines: for y in xrange(img.size[1]): pixels[x_coord, y] = WHITE for y_coord in horiz_lines: for x in xrange(img.size[0]): pixels[x, y_coord] = WHITE # cut off the border img = ImageOps.crop(img, border = MARGIN)
img = img.filter(MinFilter(9))
>tesseract img1.bmp con digits
Tesseract Open Source OCR Engine v3.01 with Leptonica
2560
img = Image.open('capt2.png').convert("RGB")
# remove filled squares
img = ImageOps.grayscale(img)
pixels = img.load()
for y in xrange(img.size[1]):
for x in xrange(img.size[0]):
if pixels[x,y] > WHITE / 2:
pixels[x,y] = WHITE
else:
pixels[x,y] = BLACK
img = img.filter(MinFilter(3)).filter(CONTOUR)
Отредактировано EBFE (Авг. 10, 2012 23:39:12)
Офлайн
А теперь проходимся по нижним и правым, или левым пикселям картинки. Вычисляем размер сетки и гамму. В принципе не важно будет это черно-белым, или цветным, это усложнение для людей.
Затем наносим сетку на картинку и вычитаем. Получаем исходные символы.
Т.к. символы имеют хорошо выраженный пробел, их легко разделить. А дальше уже дело техники. Хоть нейронные сети, хоть векторные множества. Хотя лично я попытался бы упростить до расчета плотности в разных частях символа. Думаю такой шрифт можно определять с высокой точностью.
Надо больше искажений исходного текста.
Офлайн
Как уже раньше отметили любая графическая капча легко разпознается через OCR сервисы (где разгадывают люди).
Поэтому хорошая капча должна отвечать 2 требованиям:
1 - тяжело написать автом. распозновалку;
2 - тяжело передавать на распознование стороннему OCR сервису.
Если у вас РУ ресурс, то сделав капчу на русском вы уже сильно усложните жизнь “вредителям”, т.к. на OCR сервисах в основном хорошо разгадывают только латиницу.
Офлайн