Форум сайта python.su
Помогите распознать номер телефона с картинки.
Вот примеры:
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5PwkT/
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5Pv1f/
Отредактировано tibs (Июль 31, 2012 12:48:29)
Офлайн
+7 918 965 17 14
89615815813
http://code.google.com/p/pytesser/
http://code.google.com/p/python-tesseract/
Отредактировано fata1ex (Июль 31, 2012 13:33:41)
Офлайн
pip install pil (нужен с поддержкой zlib)
Для виндовс проще взять готовый пакет: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pil
+
http://code.google.com/p/tesseract-ocr/
http://code.google.com/p/pytesser/
(для виндовс: распаковка в X:\…\Python27\Scripts вполне работает)
=
>>> from cStringIO import StringIO >>> from pytesser import image_to_string >>> from urllib2 import urlopen >>> from PIL import Image >>> img1 = Image.open(StringIO(urlopen('http://krasnodar.krd.slando.ru/ajax/misc /phoneimage/5PwkT/').read())) >>> img2 = Image.open(StringIO(urlopen('http://krasnodar.krd.slando.ru/ajax/misc /phoneimage/5Pv1f/').read())) >>> def resizer(img, scale): ... x,y = img.size ... return img.convert("RGB").resize((x*scale, y*scale), Image.BILINEAR) ... >>> image_to_string(resizer(img1,2)) '+7 918 965 17 14\n\n' >>> image_to_string(resizer(img2,2)) '89615815813\n\n' >>> image_to_string(resizer(img1,2)) '+7 918 965 17 14\n\n' >>> image_to_string(resizer(img1,4)) '+7 918 965 17 14\n\n' >>> image_to_string(resizer(img1,1)) '\n'
Отредактировано EBFE (Июль 31, 2012 16:08:03)
Офлайн
Спасибо за ссылки.
EBFE
http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html
Офлайн
tibsНу вообще-то ссылка была на код. Как использовать PIL + pytesser
И что все вот эти капчи может распознать данный модуль?
>>> from cStringIO import StringIO >>> from pytesser import image_to_string >>> from PIL import Image >>> from urllib2 import urlopen >>> img1 = Image.open(StringIO(urlopen('http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5PwkT/').read())) >>> '#'*70 '######################################################################' >>>image_to_string(img1) '\n' >>> image_to_string(img1.convert("RGB")) '\n' >>> img1.mode 'P' >>> img1.size (160, 15) >>> image_to_string(img1.resize((160*3,15*3),Image.NEAREST) ... ) "+]' 918 965 1]' 1-*1-\n\n" >>> image_to_string(img1.resize((160*3,15*3),Image.BICUBIC)) "+]' 918 965 1]' 1-*1-\n\n" >>> image_to_string(img1.resize((160*30,15*30),Image.BICUBIC)) "-I-T!` 'gls 965 J.? 14\n\n" >>> image_to_string(img1.convert("RGB").resize((160*30,15*30),Image.BICUBIC)) '+7 9].8 965 17 14\n\n' >>> image_to_string(img1.convert("RGB").resize((160,15),Image.BICUBIC)) '\n' >>> image_to_string(img1.convert("RGB").resize((160*3,15*3),Image.BICUBIC)) '+7 918 965 17 14\n\n' >>> image_to_string(img1.convert("RGB").resize((160*3,15*3),Image.NEAREST)) '+? 918 965 1? 14\n\n' >>> image_to_string(img1.convert("RGB").resize((160*3,15*3),Image.BILINEAR)) '+7 918 965 17 14\n\n' >>> image_to_string(img1.convert("RGB").resize((160*30,15*30),Image.BILINEAR)) '-{-7 918 965 17 14\n\n'
Отредактировано EBFE (Июль 31, 2012 16:01:23)
Офлайн
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Офлайн
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Отредактировано tibs (Авг. 9, 2012 14:30:25)
Прикреплённый файлы:
phones.zip (144,4 KБ)
Офлайн
Неплохо бы на код взглянуть. Самый простой вариант:
fails = [] allowed = set("0123456789-/+") tel_str = get_tel_from_image(image_url) if not set(tel_str) <= allowed: # issubset of allowed ? fails.append(tel_str, image_url, set(tel_str) - allowed) #add string, image url and difference
fails = [] allowed = set("0123456789-/+") repl_dict = {'o' : '0', '$' : '8'} tel_str = get_tel_from_image(image_url) tel_str = "".join([repl_dict.get(c, c) for c in tel_str.lower()]) # dict.get(x, default_if_not_in_dict) if not set(tel_str) <= allowed: # issubset of allowed ? fails.append(tel_str, image_url, set(tel_str) - allowed) #add string, image url and difference
Отредактировано EBFE (Авг. 9, 2012 15:45:43)
Офлайн
Я пользовался приведенным выше
image_to_string(resizer(img1,10))
Офлайн
tibsМне кажется, $ всегда будет подразумевать восьмерку, а О — ноль.cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Мне только телефоны распознать надо.
Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.
Офлайн