The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Как научить OCR Tesseraсt русскому языку. (ocr rus lang translate)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ocr, rus, lang, translate,  (найти похожие документы)
From: Игорь Власов <igorvlassov@narod.ru.> Newsgroups: email Date: Mon, 4 Sep 2007 14:31:37 +0000 (UTC) Subject: Как научить OCR Tesseraсt русскому языку. Искал я тут недавно OCR для одного англоязычного проекта. И попутно ознакомился с состоянием дел относительно родного языка. Свободной OCR, способной распознавать родную речь, я не обнаружил. Зато наткнулся на проект tesseract. Это бывшая коммерческая многоплатформенная OCR, разработанная Hewlett Packard. Теперь она, во-первых, распространяется под лицензией Apache версии 2.0. А во-вторых, ее можно попытаться обучить какому-нибудь новому языку, что мы и попробуем сделать. Итак, читаем мануал под названием TrainingTesseract: Первым шагом должно быть определение полного набора символов, который будет использован, и создания текстового файла или файла текстового процессора с примерами. При подготовке тренировочного файла надо помнить следующее: - требуется минимальное количество примеров каждого символа. 10 - хорошо, но 5 - достаточно для редких символов, а для часто встречающихся надо хотя бы 20; - нельзя группировать небуквенные символы все вместе, надо делать текст более реалистичным, например: в чащах юга жил-был цитрус да но фальшивый экземпляр. 0123456789 !@#$%^&(),.[]{}<>/? - ужасно. Гораздо лучше: в чащах {юга} жил-(был) цитрус, да! но? <фальшивый> $3456.78 экземпляр #90 "апельсин"/помидор' 12.5% - неплохо бы растянуть текст с помощью увеличения межстрочного и межсимвольного интервалов; - тренировочные данные должны умещаться на одной странице; - нет необходимости тренироваться на нескольких размерах, достаточно на шрифте размером 10. Но для высоты текста меньше 15 пикселов нужно тренировать отдельно или увеличить изображение до распознавания. Далее надо напечатать и отсканировать или использовать какой-нибудь другой метод для получения картинки тренировочной страницы. Может быть до 32 страниц использовано. Лучше всего создавать страницы со смешением шрифтов и стилей, включая жирный и наклонный. Я попробую сделать это только для шрифта Thorndale AMT, который на моем десктопе под SUSE10 в OpenOffice выглядит точно как Times New Roman под Виндой. Итак, делаю отдельный файлик с выше приведенным текстом про цитрус fontfile.odt, с помощью GIMPа фоткаю его с экрана, правлю и сохраняю в черно-белый BMP fontfile.bmp. Следующий шаг - это создание файла с координатами прямоугольников, в которых заключен каждый символ. К счастью, tesseract может сделать файл требуемого формата, хоть набор символов и не будет соответствовать нашему. Поэтому потом надо будет поправить файл вручную, введя правильные символы. Итак, делаем: tesseract fontfile.bmp fontfile batch.nochop makebox В результате получился файл fontfile.txt, который надо переименовать в fontfile.box Вот что у меня там: B 13 137 29 154 Y 46 142 56 154 I 54 137 63 154 Z 67 137 82 154 M 85 132 111 154 Z 114 137 130 154 X 133 137 150 154 { 170 130 180 162 m 186 137 210 154 r 214 137 228 154 a 233 137 248 154 } 254 130 264 162 M 284 137 306 154 ... и т.д. Теперь самая суровая часть - надо этот файлик отредактировать в редакторе, в котором можно заменить неправильные символы на нужные. Я использую Kate. Опс, похоже, щ заменилось 2-мя символами: Z 67 137 82 154 M 85 132 111 154 в этом случае надо объединить описывающие прямоугольники следующим образом: Первый номер (левый) должен быть минимальным из 2-х строк (67) Второй номер (низ) должен быть минимальным из 2-х строк (132) Третий номер (правый) должен быть максимальным из 2-х строк (111) Четвертый номер (верх) должен быть максимальным из 2-х строк (154) итак: щ 67 132 111 154 Замечание: координатная система, используемая в этом файле, начинается с (0,0) и направлена снизу вверх и слева направо. Фух, кажется, поправил. Теперь запускаем tesseract в обучающем режиме: tesseract fontfile.bmp junk nobatch box.train и смотрим stderr (или tesseract.log под Виндой). Если есть ошибки вида FATALITY, это значит что tesseract не нашел ни одного образца символа, указанного в координатном файле. У меня он выдал ошибку: APPLY_BOXES: FATALITY - 0 labelled samples of "%" - target is 2 APPLY_BOXES: Boxes read from boxfile: 89 Initially labelled blobs: 87 in 3 rows Box failures detected: 2 Duped blobs for rebalance: 0 "%" has fewest samples: 0 Total unlabelled words: 1 Final labelled words: 87 Generating training data TRAINING ... Font name = UnknownFont. Generated training data for 87 blobs Однако fontfile.tr сгенерился. Ладно, обойдусь пока без знака % Вообще надо было сделать побольше всех символов, хотя бы повторить эту фразу пяток раз. По идее я должен повторять эту процедуру для разных шрифтов и получить несколько разных файлов, а затем создать прототипы с помощью команд вида: mftraining fontfile_1.tr fontfile_2.tr ... в результате должны получиться 2 файла: inttemp (прототипы форм) и pffmtable, затем cntraining fontfile_1.tr fontfile_2.tr ... создаст normproto файл (прототипы для нормализации символов?). Делаю это над одним моим файлом. Что-то получилось. Теперь надо указать tesseract'у множество символов, которое он может вывести. Используем команду unicharset_extractor чтобы сгенерить файл unicharset: unicharset_extractor fontfile_1.box fontfile_2.box ... Делаем. В полученном файле необходимо указать тип символа с помощью маски, маска такая: если буква - 1, если маленькая буква - 1, если большая буква - 1, если цифра -1, иначе 0. Например, б - маленькая буква. Еее маска 0011 или шестнадцатеричная 3 ; - не буква, не цифра. Маска = 0 7 - просто цифра. Маска 1000 или шестнадцатеричная 8. Ь - большая буква. Маска 0101 или шестнадцатеричная 5 и т.д. у меня все буквы маленькие. Меняю им маску на 3. Теперь надо где-то взять два списка, один - часто встречающихся слов, второй - остальных слов и преобразовать их в DAWG-формат с помощью еще одной утилитки: wordlist2dawg frequent_words_list freq-dawg wordlist2dawg words_list word-dawg Я просто пока набил в каждый по 5 произвольных слов. Утилитка сия весьма нетороплива, и круто грузит комп. Третий файл, user-words обычно пустой. Последний файл, который надо сделать, называется DangAmbigs В нем описываются случаи ошибочной замены одного файла на другой, например 1 Ш 2 1И первая цифра - количество символов в первой группе, 2-я - кол-во символов во 2-й. Эта строка показывает, что 1И может иногда распознаваться неправильно как Ш. Этот файл тоже м.б. пустым. Теперь все собираем вместе. Файлы freq-dawg word-dawg user-words inttemp normproto pffmtable unicharset DangAmbigs снабжаем префиксом rus и помещаем в туда, где остальные словари, у меня это /usr/local/share/tessdata Все!!! Пробуем распознать какой-нибудь файлик. Я попробую для начала свой про цитрус: tesseract image.bmp output -l rus Вот что у меня получилось: в чыаьах {юга} жшл-(был) цштрус, да! но? <(1ьалвьшвый> $3456.78 экземпляр #90 капелвсшнм/помшдор' 12.5й Конечно, не супер, но для первого раза, и столь скудных образца и словаря, я думаю, неплохо! Как видите, реализовать OCR для родного языка можно даже своими силами. Удачи!

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, glyph (?), 16:36, 04/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Достойно уважения. Так держать!
     
  • 1.2, vadiml (?), 17:00, 04/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так получается можно хорошенько потренировать программу, а потом выложить результат в инет и будет более-менее нормальная распознавалка для линукса
     
     
  • 2.3, HarryPotter (ok), 17:49, 04/09/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Совершенно верно!
     

  • 1.4, vehn (?), 00:30, 05/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Отличная статья
     
  • 1.5, Ник (??), 19:46, 06/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо! Но лучше всего, ИМХО, обучать всем вместе и выложить результат на оф.сайт...
     
     
  • 2.6, HarryPotter (??), 20:36, 06/09/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Для этого уже и создана группа на Гугле
    http://groups.google.com/group/tesseract-ocr-russian/

    Милости просим всех желающих!

     

  • 1.7, Дмитрий (??), 22:35, 15/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В статье есть ошибка: лицензия, под которой распространяется код tesseract - это лицензия Apache версии 2.0, а не GPL.
     
     
  • 2.8, HarryPotter (ok), 10:30, 16/09/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Согласен, исправил.
     

  • 1.9, Robot (?), 20:10, 21/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А что группа сдохла???
     
  • 1.10, Дима (??), 21:58, 03/02/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Огромное спасибо Мужик! Затрахался читать английскую версию
     
  • 1.11, watson (?), 17:16, 26/10/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    в версии 3.01 собирается из всех файлов один , к примеру rus.trainddata , есть ли возможность дообучить существующий язык? Тоесть получить filename.tr из этого файла и уже добавить к нему свой ,тем самым расширить словарь или добавить новые шрифты.
     
     
  • 2.12, Денис (??), 19:04, 07/11/2013 [^] [^^] [^^^] [ответить]  
  • +/
    Тоже интересен этот вопрос. Нашли решение?
     
     
  • 3.13, kik11 (?), 14:36, 01/08/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Как вариант - не удалять .box, и при появлении новых образцов вместе с ними обновлять .traineddata
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру