Уведомления

Группа в Telegram: @pythonsu

#1 Июль 31, 2012 12:46:47

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

Помогите распознать номер телефона с картинки.
Вот примеры:
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5PwkT/
http://krasnodar.krd.slando.ru/ajax/misc/phoneimage/5Pv1f/



Отредактировано tibs (Июль 31, 2012 12:48:29)

Офлайн

#2 Июль 31, 2012 13:32:57

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

+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)

Офлайн

#3 Июль 31, 2012 14:15:19

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

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

Отредактировано EBFE (Июль 31, 2012 16:08:03)

Офлайн

#4 Июль 31, 2012 15:15:22

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

Спасибо за ссылки.

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

И что все вот эти капчи может распознать данный модуль?



Офлайн

#5 Июль 31, 2012 16:00:52

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

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/

Отредактировано EBFE (Июль 31, 2012 16:01:23)

Офлайн

#6 Авг. 5, 2012 15:43:31

cpu
От:
Зарегистрирован: 2011-12-29
Сообщения: 58
Репутация: +  1  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)



Офлайн

#7 Авг. 9, 2012 14:08:24

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)

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

Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.



Отредактировано tibs (Авг. 9, 2012 14:30:25)

Прикреплённый файлы:
attachment phones.zip (144,4 KБ)

Офлайн

#8 Авг. 9, 2012 15:43:09

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

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

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)

Офлайн

#9 Авг. 9, 2012 23:15:01

tibs
От:
Зарегистрирован: 2011-06-30
Сообщения: 57
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

Я пользовался приведенным выше

image_to_string(resizer(img1,10))



Офлайн

#10 Авг. 13, 2012 21:31:02

fttk
Зарегистрирован: 2012-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Распознание номера телефона с картинки

tibs
cpu
ты определись, тебе телефон распознать или ломать все капчи сразу (ХАЛК ЛОМАТЬ!!1!!!)

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

Не все распознаются к сожалению, иногда вместо 8 - $, 0 - O. Можно как-то улучшить?
Прикрепил архив с телефонами.
Мне кажется, $ всегда будет подразумевать восьмерку, а О — ноль.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version