библиотека декодера python captcha

Мне нужен Captcha-декодер для python, чтобы читать простые изображения, такие как следующее изображение:

CAPTCHA,

простой captcha

CAPTCHA,

Вы знаете о библиотеке, которая может помочь мне прочитать эту капчу?

Если вы не знаете библиотеку для чтения captchas, не могли бы вы помочь мне прочитать это (и другие подобные этому) с PIL?

Я надеюсь, что этот captcha нигде не используется.

Ниже приведен фиктивный способ его декодирования. В основном вам нужны шаблоны от 0 до 9, присутствующие в этих капчах. Из ваших примеров у меня есть только шаблоны для 0 3 4 5 7 8. Так как все на них установлено, вы знаете, где разделить каждого персонажа. Вы также знаете, что каждый символ представляет собой фиксированный размер и фиксированный шрифт. Если он также содержит буквы или больше символов, но фиксированный размер и шрифт, то следующий код может быть легко адаптирован.

Что делает код: a) загружать шаблоны (я считал, что они называются n0.png, n1.png, …); б) разбить капчу на части NUMS; c) делать сумму квадратов различий между каждым рисунком и каждым количеством сплит; г) принять решение о том, что число сплит – это число с наименьшей суммой. Он возвращает список для каждого номера, чтобы он присутствовал в captcha. Чтобы получить исходные шаблоны, вы можете раскомментировать строки, которые сохраняют разделенные числа, поместить результат после этой части и настроить имена файлов.

 import sys from PIL import Image, ImageOps PAT_SIZE = (8, 10) NUMS = 3 FIRST_NUM_OFFSET = 5 NUM_OFFSET = (1, 3) NUMBERS = [] for i in xrange(10): try: NUMBERS.append(Image.open('n%d.png' % i).load()) except IOError: print "I do not know the pattern for the number %d." % i NUMBERS.append(None) def magic(fname): captcha = ImageOps.grayscale(Image.open(fname)) im = captcha.load() # Split numbers num = [] for n in xrange(NUMS): x1, y1 = (FIRST_NUM_OFFSET + n * (NUM_OFFSET[0] + PAT_SIZE[0]), NUM_OFFSET[1]) num.append(captcha.crop((x1, y1, x1 + PAT_SIZE[0], y1 + PAT_SIZE[1]))) # If you want to save the split numbers: #for i, n in enumerate(num): # n.save('%d.png' % i) def sqdiff(a, b): if None in (a, b): # XXX This is here just to handle missing pattern. return float('inf') d = 0 for x in xrange(PAT_SIZE[0]): for y in xrange(PAT_SIZE[1]): d += (a[x, y] - b[x, y]) ** 2 return d # Calculate a dummy sum of squared differences between the patterns # and each number. We assume the smallest diff is the number in the # "captcha". result = [] for n in num: n_sqdiff = [(sqdiff(p, n.load()), i) for i, p in enumerate(NUMBERS)] result.append(min(n_sqdiff)[1]) return result print magic(sys.argv[1]) 

Это хороший проект для академических целей, мне это было интересно некоторое время назад. У вас есть несколько вариантов:

  1. Вы пишете свои собственные с помощью этого сайта: http://www.wausita.com/captcha/

  2. Вы используете OpenCV для выполнения сопоставления.

Если подумать, что есть специальная библиотека для сопоставления изображений нейронной сети, но я не могу ее найти.

В основном, как говорили другие, вы хотите удалить шум, разделить на отдельные символы и сравнить его с использованием выбранной техники для символов модели.

Надеюсь, вы используете его добросовестно, и вы никому не нанесете вреда (или спама).

Я не буду писать вам сценарий и не перенаправлять вас на внешний плагин. Но если вы пишете это самостоятельно, это может помочь:

  • Если вы пытаетесь декодировать определенный шаблон captcha, вы должны собрать все символы (я видел из приведенных вами примеров, что это только цифры, поэтому не должно быть много работы).
  • Поместите все символы в один файл и проанализируйте его с помощью PIL
  • Сохраните в массиве каждый символ, его положение и его значение.
  • Получите изображение Captcha – при необходимости очистите фоновый шум.
  • Разделите изображение Captcha на размер char и переместите его через свой самодельный словарь символов.