Автоматическое распознавание шрифтов с Python - PullRequest
4 голосов
/ 10 ноября 2009

Как вы, возможно, слышали, есть онлайн-служба распознавания шрифтов WhatTheFont

Мне любопытно, какие технологии стоят за этим инструментом. Я думаю, что в принципе мы можем разделить это на две части:

  1. Создание изображений из файлов шрифтов различного формата, список расширений файлов шрифтов см. В http://www.fileinfo.com/filetypes/font.

  2. Сравнить представленное изображение со всеми сгенерированными изображениями

Я благодарен вам за то, что вы поделились некоторыми советами или кодом на python для реализации двух шагов выше.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2009

Как указано в ОП, есть две части (и, вероятно, также третья часть):

  1. Используйте PIL для генерации изображений из шрифтов .

  2. Используйте инструментарий анализа изображений, например OpenCV (с привязками Python), чтобы сравнивать различные формы. Существует множество стандартных методов для сравнения различных объектов, чтобы увидеть, похожи ли они. Например, инвариантные моменты масштаба работают довольно хорошо и являются частью набора инструментов OpenCv.

  3. Большинство стандартных инструментов в # 2 предназначены для поиска похожих, но не обязательно идентичных фигур, но для сравнения шрифтов это может быть не то, что вам нужно, поскольку различия между шрифтами могут основываться на очень мелких деталях , Для детального анализа попробуйте сравнить профили x и y периметрального пути вокруг каждой буквы, конечно же, соответственно нормализованные. (Этот, или более математически сложный вариант, был успешно использован при анализе шрифтов.)

2 голосов
/ 11 ноября 2009

Я не могу предложить код Python, но вот два возможных подхода.

  1. "Собственные-символы." При распознавании лиц, учитывая большой обучающий набор нормализованных изображений лица, вы можете использовать анализ основных компонентов (PCA) для получения набора «собственных граней», которые при проецировании обучающих лиц на это подпространство демонстрируют наибольшую дисперсию. «Координаты» входных тестовых граней относительно пространства собственных граней могут использоваться в качестве вектора признаков для классификации. То же самое можно сделать с текстовыми символами, то есть со многими версиями символа «A».

  2. Динамическая деформация времени (DTW). Эта техника иногда используется для распознавания рукописного текста. Идея состоит в том, что траектория, взятая кончиком карандаша (т.е. d / dx, d / dy), аналогична для похожих символов. DTW делает инвариантными некоторые вариации между экземплярами письма одного человека. Точно так же контур персонажа может представлять траекторию. Эта траектория затем становится вектором признаков для каждого набора шрифтов. Я думаю, что часть DTW не так необходима для распознавания шрифтов, потому что машина создает символы, а не человек. Но все же может быть полезно устранить неоднозначность в пространстве.

...