Форум сайта python.su
0
Помогите распознать номер телефона с картинки.
Вот примеры:
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5PwkT/
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5Pv1f/
Отредактировано tibs (Июль 31, 2012 12:48:29)
Офлайн
52
+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)
Офлайн
20
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'
(без resize распозновать вообще ничего не будет, без convert(RGB) или с Image.NEAREST Фильтром тоже хромает)Отредактировано EBFE (Июль 31, 2012 16:08:03)
Офлайн
0
Спасибо за ссылки.
EBFE
http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html
Офлайн
20
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
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Офлайн
0
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Отредактировано tibs (Авг. 9, 2012 14:30:25)
Прикреплённый файлы:
phones.zip (144,4 KБ)
Офлайн
20
Неплохо бы на код взглянуть. Самый простой вариант:
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)
Офлайн
0
Я пользовался приведенным выше
image_to_string(resizer(img1,10))
Офлайн
0
tibsМне кажется, $ всегда будет подразумевать восьмерку, а О — ноль.cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
Мне только телефоны распознать надо.
Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.
Офлайн