Найти - Пользователи
Полная версия: Распознание номера телефона с картинки
Начало » Python для экспертов » Распознание номера телефона с картинки
1 2
tibs
Помогите распознать номер телефона с картинки.
Вот примеры:
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5PwkT/
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5Pv1f/
fata1ex
+7 918 965 17 14
89615815813

http://code.google.com/p/pytesser/
http://code.google.com/p/python-tesseract/
EBFE
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 Фильтром тоже хромает)

http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html
tibs
Спасибо за ссылки.

EBFE
http://www.debasish.in/2012/01/bypass-captcha-using-python-and.html

И что все вот эти капчи может распознать данный модуль?
EBFE
tibs
И что все вот эти капчи может распознать данный модуль?
Ну вообще-то ссылка была на код. Как использовать PIL + pytesser

А так, без предварительной обработки, 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'

кстати, только с PIL:
http://ptigas.com/blog/2011/02/18/simple-captcha-solver-in-python/
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)
tibs
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)

Мне только телефоны распознать надо.

Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.
EBFE
Неплохо бы на код взглянуть. Самый простой вариант:
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
tibs
Я пользовался приведенным выше
image_to_string(resizer(img1,10))
fttk
tibs
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)

Мне только телефоны распознать надо.

Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.
Мне кажется, $ всегда будет подразумевать восьмерку, а О — ноль.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB