LINUX.ORG.RU

Распознавание текста в изображении

 , ,


2

2

Пишу грабер на Scrapy. Понадобилось распознавать телефоны в изображении. Большинство телефонов отлично распознаются с помощью Tesseract с помощью такого кода:

def parse_phone(self, response):
    # todo: добавить контракт
    phone = Image.open(StringIO(response.body))
    phone.load()
    image = Image.new("RGB", phone.size, (255, 255, 255))
    image.paste(phone, mask=phone.split()[3])  # 3 is the alpha channel
    image = image.resize((image.size[0] * 4, image.size[1] * 4), Image.BICUBIC)
    l = response.meta['loader']
    l.add_value('author_phone', tesseract.image_to_string(image, builder=tesseract.DigitBuilder()))
    return l.load_item()

Но есть такие, которые на которых Tesseract сильно гонит по причине слипшихся символов. Особенно часто этим страдает “4” и “-” (http://i.imgur.com/7DgTS0W.png). Мне же необходимо добиться 100% распознования номеров. Как посоветуете решать задачу, ребята?

100% распознования номеров

Нанять живых операторов.
Иначе никаких 100% быть не может.

Goury ★★★★★ ()

Очевидно надо преобразовать картинку чтобы цифры разлипли. Но вонючий спамер должен сам догадаться как.

anonymous ()
Ответ на: комментарий от buddhist

Почему же, я прислушался :) Просто с Pillow плохо дружу. Сейчас пишу алгоритм.

cheerfulboy ()
Ответ на: комментарий от cheerfulboy

Goury все верно сказал.

За доллар 1000 телефонов тебе распознают.

pi11 ★★★★★ ()

Особенно часто этим страдает “4” и “-” (http://i.imgur.com/7DgTS0W.png)

У тебя там все символы одинаковые, так что, возможно, получится что-то набросать на opencv.

risenshnobel ★★★ ()
  1. Tesseract по умолчанию был обучен распознавать скан текста с большим dpi (>300).
  2. Но его можно переобучить.
  3. Только не забывай обрезать входное изображение и подгонять его под одну высоту символов.
  4. Телефоны - это ограниченный набор символов. Как следствие, простые нейронные сети могут справиться с этой задачей вполне прилично. На Хабре были про это статьи.
  5. А научные статьи по этой тематике смотрел?
AlexVR ★★★★★ ()

Мне же необходимо добиться 100% распознования номеров.

100% распознования не бывает, ибо кластеры в пространстве признаков могут пересекаться.

Как посоветуете решать задачу

В 2 этапа: предварительная сегментация, затем OCR в Linux.

P.S. Полезные книжки.

quickquest ★★★★★ ()

это ведь не связано с авито ?

Dred ★★★★★ ()

Так они, судя по картинке, одинакового размера? Тогда напрашивается решение в лоб - сегментировать на отдельные цифры и распознавать тем же Tesseract.

А если хочется взрослого секса, то смотри сюда:
http://yann.lecun.com/exdb/lenet/index.html

Bell ()

Пишу грабер на Scrapy....
необходимо добиться 100%

[yoda on] тебе не нужно добиваться 100% [yoda off] Ведь можно просто сделать реконнект.

А увеличить распознаваемость можно с помощью Imagemagick.

tesseract'y я помогал так:

    $captcha =~ s/[\r\n]//g;
    $captcha =~ tr/r/T/s;
    $captcha =~ tr/é/E/s;
    $captcha =~ tr/l/I/s;
    $captcha =~ tr/°/O/s;
    $captcha =  uc $captcha;
    $captcha =~ tr/1\\|/I/;
    $captcha =~ tr/50/SO/;
    $captcha =~ tr/ //ds;
    $captcha =~ tr/`//d;
    $captcha =~ tr/'//;
    $captcha =~ tr/‘/I/;
    $captcha =~ tr/)(/X/d;
    $captcha =~ tr/></X/d;
    $captcha =~ tr/¥/Y/;
    $captcha =~ tr/"//s;
    $captcha =~ tr/_//s;
В капче не цифры, конечно, а одни буквы. Но идея может помочь.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1 )

Какие нах нейронные сети. Картинка режется по строкам, строки пробелами и чертами на квадраты, полученные пазлы сравниваются с образцами которых не больше 1000. Все настолько однообразно, что универсальные ocr будут лажать

Но это если есть кому писать или есть чем платить.

anonymous ()

Всем спасибо за интересные мысли и за литературу. Проблему решил, разрезав изображение и склеив наново через один белый пиксель.

cheerfulboy ()
28 октября 2015 г.
Ответ на: комментарий от cheerfulboy

разрезав изображение и склеив наново через один белый пиксель

Эти пикселы лучше ресэмплить чем-нибудь типа hqx или super2xsai, а не бикьюбиком.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.