Решил я научиться распознавать самую простую капчу, какая только существует. Вот она:
. Это png-изображение с размерами 90x25. То есть каждый символ занимает 18 пикселей, всего 5 символов. Весь алфавит этой капчи состоит из 16 символов: 0123456789abcdef. Таким образом мне пришлось собрать все картинки для этого алфавита, нарезать из них буковки, а затем склеить в одну картинку:
. Ну и весь алгоритм сводится к тому, чтобы сравнивать все символы по очереди с алфавитом. Для этого я воспользовался библиотекой PIL:


from PIL import Image, ImageColor def cmp_image(img1,img2): return list(img1.getdata()) == list(img2.getdata()) def decode(img): # Весь алфавит bigimg = Image.open(r"all.png") # Соответсвие букв изображениям alpha = "0123456789abcdef" res = "" for x in xrange(5): tmp = Image.new('RGB', (18, 25)) tmp.paste( img.crop((x*18,0,x*18+18,25))) letter = "a" for y in xrange(16): ideal = Image.new('RGB', (18, 25)) ideal.paste(bigimg.crop((y*18,0,y*18+18,25))) rms = cmp_image(ideal,tmp) if rms: letter = alpha[y] break res += letter return res img = Image.open(r"e:\image.png") print decode(img)