Распознавание гарнитуры шрифта

 

    Всем знакома проблема, когда необходимо подобрать шрифт, идентичный образцу. Как ни странно, хотя эта задача програмно решается гораздо проще и требуется даже чаще, чем распознавание текста, программ для распознавания текста множество, а для распознавания шрифта - практически нет. Существующие программы распознавания текста (FineReader и т.д.) гарнитуру распознанного текста распознают очень убого. Лично для меня задача осложняется еще и тем, что обычно в данный момент из всех шрифтов, имеющихся на компьютере, подключено только несколько необходимых, а остальные тысячи шрифтов разбросаны по множеству шрифтовых папок. Поэтому приходится часами сидеть и подбирать руками шрифт через ATM или FontLister. Можно, конечно, написать вопрос в шрифтовую эху или MyFonts, но какой смысл, если подскажут шрифт, которого в наличии нет, а задача состоит именно в том, чтобы подобрать максимально похожий шрифт из имеющихся на компьютере? Облазив весь интернет, я обнаружил, что лучше всего для решения данной проблемы подходит программа Font Expert. Программа очень сырая, до коммерческого вида, судя по всему, так и не была доведена. Похоже, проект провалился десять лет назад. И тем не менее, ничего более подходящего для автоматического подбора шрифтов я не нашел, хотя есть море фонтменеджеров, просмотрщиков и каталогизаторов шрифтов а так же OCR программ.В Font Expert можно выделить отдельный символ на растровом изображении, задать ему в соответствии символ из таблицы, после чего, нажав на кнопку Result, получить список шрифтов, подходящих для этого символа с процентом соответствия и тут же просмотреть их. Затем, при желании, выбирая несколко характерных символов из шрифта, уточнить распознанный результат. Несмотря на то, что программа была написана еще в 1996 году на 16-битном Delphy 1.0, алгоритм распознавания достаточно мощный, я проверял на базе из 3000 шрифтов гарнитура распознается мгновенно и практически безошибочно. Основной недостаток лежащей в интернете демоверсии в том, что к ней прилагается шрифтовая база из практически бесполезных 17 шрифтов, а возможность генерировать собственную базу отсутствует. Это подвигло меня на написание такого конвертера, который, имея на входе каталог со шрифтами (TrueType или Type1) создает шрифтовую базу под программу Font Expert, при помощи которой можно автоматически подбирать шрифт из этого каталога. Возможно создать несколько баз для разных шрифтовых каталогов и подключать их к программе Font Expert по очереди. Ниже я постараюсь описать процесс инсталляции, создание шрифтовой базы и распознавание шрифтов при помощи данных программ.

Инсталляция программ.

    Демо версию программы Font Expert можно взять на сайте производителя, кому лень искать, можно скачать отсюда. Это обычный ZIP архив, его достаточно распаковать в любой каталог. Как я уже говорил, это практически бесполезная демоверсия программы, шрифтовая база которой содержит 17 шрифтов, русские символы отсутствуют. Чтобы она полноценно работала, для нее нужно создать шрифтовую базу из имеющихся на компьютере шрифтов. Для этого и создана программа Font base creator. Ее достаточно просто переписать на компьютер безо всякой инсталляции. Для работы ей требуется стандартная MFC библиотека MFC42.DLL, которая практически у всех установлена, а если и нет, то легко находится в интернете.

Создание шрифтовой базы.

  Запустите t1.exe. Интерфейс достаточно прост.

    Для выбора каталога со шрифтами нужно нажать кнопку Fonts folder. Выбирать надо любой файл из каталога содержащего шрифты TTF или пары PFM-PFB файлов. После выбора список доступных шрифтов из каталога появится в левом окне.

    Для выбора програмного каталога Font Expert нужно нажать кнопку Fexpert folder. При этом выбирается файл fontexpt.exe. После выбора он прописывается в реестр и повторно выбирать его уже не требуется.

    Для создания шрифтовой базы необходимо нажать кнопку Make base, предварительно выбрав шрифтовой каталог. Для генерации базы в каталоге должен быть как минимум один доступный шрифт. Программа запросит каталог для создания базы - необходимо выбрать любой файл из такого каталога. Если в таком каталоге уже есть база (она находится в подкаталоге FEXDATA) то программа спросит, добавлять ли шрифты в существующую базу. При ответе Yes шрифты добавляются в конец базы, при ответе No база перезаписывается заново, имеющиеся там шрифты теряются, при ответе Cancel можно выбрать другой каталог, в котором базы нет. База генерируется достаточно долго, но эту операцию нужно проделать всего один раз для каждого каталога, последующее подключение каталогов и распознавание практически мгновенно. Советую перед добавлением шрифтов в существующую базу сохранить старую (весь каталог FEXDATA), потому как, если во время добавления в базу произойдет сбой, то база испортится. Процесс генерации базы отображается двумя ползунками внизу, верхний - обработка текущего шрифта, нижний - весь каталог шрифтов. В принципе, можно переписать все шрифты, имеющиеся на компьютере в один каталог, и потом использовать для распознавания базу, сгенерированную на основе него. Какого-то ограничения на количество шрифтов в шрифтовой базе я не заметил, однако в программе-генераторе максимальное количество шрифтов 5000. На скорость распознавания количество шрифтов в базе тоже практически не влияет, разве что, необходимо приблизительно прикинуть место на диске, занимаемое базой, потому что каждый шрифт прибавляет к базе примерно 50 килобайт. То есть, база, состоящая из 1000 шрифтов, будет занимать на диске около 50 мегабайт. В конце процесса программа спросит, индексировать ли сгенерированую базу. При индексации в базе упорядочиваются шрифты и выбрасываются одинаковые. Какие именно шрифты были выброшены в ходе этого процесса, подробно можно посмотреть по завершению, в файле index.log, который создается в корне выбранного каталога.

    Подключить уже сгенерированую шрифтовую базу к программе Font Expert можно кнопкой Select base. При этом нужно выбрать каталог FEXDATA базы, в котором находится файл fontlist.all. Этот каталог просто скопируется на соответствующее место в программу Font Expert. При этом в рабочем каталоге программы Font Expert создается и русская версия программы Fontexru.exe, распознающая только кириллические символы, о которой речь пойдет ниже. Следует заметить, что создание и выбор базы, а так же создание русской версии возможно для приведенной здесь версии программы Font Expert 2.0 E Demo размером 568976 байт. Для других версий программа будет выдавать ошибку "Unknown version FEXPERT".

Программа Font Expert

    Я не буду переводить здесь полное руководство пользователя по программе Font Expert, кто хочет, может найти его на сайте производителя или в програмном каталоге (файл manual.wri), а просто приведу свои краткие рекомендации по распознаванию шрифта. Как я уже говорил, принцип работы в следующем: загружается растровое изображение, на нем выбирается символ, ему ставится в соответствие символ из таблицы, после чего появляется список более-менее подходящих шрифтов с процентом соответствия. Для уточнения списка выбирается следующий символ и вся процедура повторяется, пока не подберется шрифт, более-менее подходящий под все требуемые символы. Интерфейс программы выглядит так:

    Сверху на панели Tools видны следующие инструменты для выбора символа (слева направо-сверху вниз):

    Волшебная палочка. Ей удобнее всего выбирать символ, если он стоит отдельно от других и ни с чем не соприкасается, в противном случае будет выделен и соприкасающийся с ним кусок и распознавание будет неточным.

    Криволинейное выделение. Выделение произвольного фрагмента изображения не прямоугольной формы.

    Выделение прямоугольного фрагмента.

    При всех трех приведенных выше способах выделения текста клавиша Shift работает аналогично Photoshop, при удерживаемом Shift можно выделять одновременно несколько не связанных фрагментов растрового изображения, что удобно, скажем, при выборе символов "i" или "ы".

    Резинка. Ей можно удалять лишние фрагменты с выделяемого изображения.

    Инверсия. Этим инструментом удобно пользоваться при распознавании белого текста на темном фоне или при распознавании изображения не в монохромном формате, об этом будет написано ниже.

    Поворот изображения на произвольный угол. Практически бесполезная опция, к тому же работает крайне медленно. Проще повернуть изображение в Photoshop или другой программе перед тем, как поместить его в Font Expert.

    Просмотреть подключенную к программе базу базу шрифтов можно, выбрав пункт меню Window->Database. В окне отображается список шрифтов с картинкой на каждый. Можно перейти на нужный шрифт по первым буквам названия, используя кнопку Search:

Загрузка растрового изображения в программу Font Expert.

    Создатели программы довольно небрежно отнеслись к этому моменту. Теоретически, через пункт меню File->Open можно открывать растровые файлы форматов BMP,JPG,GIF и PCX, однако, у меня реально получилось нормально загружать только монохромные BMP файлы, остальные выдают какую-то странную ошибку. Конвертировать каждый файл в монохромный BMP для загрузки в Font Expert довольно неудобно, поэтому я даже собирался переделать программу в виде Plugin к Photoshop, но, к счастью, программа может работать с клипбоардом. То есть, если в любой графической программе выделить фрагмент изображения, сделать ему Copy, затем перейти в программу Font Expert и сделать Edit->Paste (которое почему-то разработчики назвали Pate ;-), то искомый фрагмент появится в окне распознавания, которое даже размер свой под него изменит. Это касается и векторного изображения. Скажем, бывают случаи, когда текст переведен в кривые, но необходимо узнать, каким шрифтом был набран этот текст изначально. Для этого необходимо сначала в исходной программе увеличить текстовый размер до 5-7 сантиметров в высоту и скопировать в клипбоард.

    После этого необходимо перейти в программу Font Expert и сделать Edit->Paste. Но тут есть небольшая сложность. Как видно из рисунка, даже если исходный фрагмент был монохромным, переноска через клипбоард делает его цветным. Визуально это видно плохо, однако на панели Tools в этом случае не активны кнопки прямоугольного и кривоугольного выделения и поворота. Беда не велика, но и текст в этом случае не однородно черный, и при попытке выделить его волшебной палочкой, буквы рассыпаются.

    Тут нам и пригодится инструмент "негатив". Выбираем его и тыкаем в любое место на белом фоне:

    Как видно, изображение практически не испортилось, но стало монохромным. Проделаем эту операцию еще раз и текст можно смело распознавать.

    Для более корректного распознавания шрифта необходимо правильно задать размер. Как я уже говорил, для векторных символов оптимальной является высота 5-7 сантиметров. Для растрового изображения вполне достаточно сканирования текста с разрешением 300-600 dpi, но после этого, для лучшего распознавания неплохо увеличить изображение так, чтобы каждая буква была высотой 150-200 пикселов. К сожалению, гарнитура не распознается, если шрифт был каким-то образом искажен (сжат, растянут, сдвинут, повернут) или каким-то другим способом изменены его пропорции.

Процесс распознавания гарнитуры шрифта.

    После того, как фрагмент был помещен в программу Font Expert и нужный символ был выделен волшебной палочкой или каким-либо другим способом, ему надо поставить в соответствие символ из таблички, нажав на соответствующую клетку:

    В данном примере мы распознаем русские символы, поэтому используется программа Fontexru.exe. Это русская версия программы, которая создается в програмном каталоге Font Expert при выборе шрифтовой базы. Она отличается от Fontexpt.exe панелью выбора символов:

    Как видно, на ее панели только русские символы, в то время как на панели Fontexpt.exe только английские символы и цифры:

    Нажав на кнопку Result мы получаем искомый шрифт и процент соответствия, в данном случае это однозначно Baltica - вариант практически идеальный.

    Не стоит пугаться, что нет 100% соответствия, как показывает практика, лучшее соответствие - максимум 97-98%. Гораздо чаще встречаются варианты, когда текст или слишком плохого качества или у него каким-то способом испортились пропорции или выбран нехарактерный символ или же просто шрифт отсутствует в базе, но отдельные символы разбросаны по разным шрифтам. В данном примере выбранному символу "Э" лучше всего соответствует шрифт, отличный от того, которым этот текст был набран. Используя кнопку "Simular fonts" выбираем шрифт из похожих:

    Список похожих шрифтов может быть достаточно длинным, следует помнить, что шрифты с соответствием менее 91% скорее всего совершенно не подходят. Насколько я понимаю, сравнение любого шрифта с любым не дает соответствия ниже 50%. Однако, не стоит сбрасывать со счетов и шрифты менее 91%, бывает так, что искомый шрифт лежит именно в этой области. Вообще, очень ускоряет процесс распознавания выбор символов с очень характерным начертанием (наличие засечек, декоративных элементов в необычных для стандартных символов местах). Чаще всего именно на этих символах гарнитура распознается с первой попытки. Если же шрифт сам по себе мало отличается от многих подобных (например Arial, Pragmatica и т.д.), то распознанный шрифт надо уточнять по другим символам. В нижеприведенном примере по символу "В" шрифт распознается с очень хорошим соответствием, как PragmaticaKMM:

    Однако, если продолжить процесс и распознать букву "А", то по этим двум буквам шрифт правильно распознается, как Arial:

    К распознаванию гарнитуры нужно подходить творчески - программа если даже и не распознает гарнитуру, то сужает список шрифтов для поиска, попутно подсказывая в количественном отношении процент "похожести" данного шрифта, предоставляя пользователю самому судить, подходит данный шрифт ему или нет.

    Свои вопросы и пожелания пишите мне на mikhail_kondakov@mail.ru.
Hosted by uCoz