Что я должен использовать для распознавания моноширинных цифр?

Мне нужно распознавать цифры на изображении из видеопотока и есть еще несколько вещей, которые должны облегчить распознавание:
1) это фиксированный шрифт 6x8, все символы одинаковой ширины
2) я знаю точное положение цифр цифры, они всегда прямоугольные, не повернуты/перекошены/масштабированы, но возможны некоторые искажения из-за сбоя радиопередачи.
3) Это только цифры и .
4) фон цифр получерный (50 % непрозрачность)

Я пробовал tesseract v2 и v3, но обертки .NET не идеальны, и ошибка распознавания была очень большой, даже если я тренировался с пользовательским шрифтом, насколько я понимаю, это из-за небольшого разрешения.

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

Я пытался обучить AForge с помощью ActivationNetwork с BackPropagationLearning, и он не сошелся (эта статья первая часть, если мне не нужно масштабирование и несколько шрифтов http://www.codeproject.com/Articles)./11285/Neural-Network-OCR, насколько я понимаю, код в статье предназначен для более старой версии AForge), плохо то, что этот проект больше не поддерживается, форум закрыт и гугл группы я так понимаю тоже.

Я знаю, что есть порт OpenCV для .NET, насколько я вижу, у него разные сетевые подходы, чем у AForge, поэтому вопрос в том, какой подход подойдет лучше всего.

Итак, есть ли какая-либо платформа .NET, которая поможет мне в этом, и если она поддерживает более одной реализации нейронной сети, какая реализация подойдет лучше всего?


person Giedrius    schedule 28.09.2012    source источник
comment
Одна вещь, которую можно попробовать с Tesseract, - это увеличить ваши изображения до того, что вы получили бы, если бы ваши изображения были получены из отсканированных книжных изображений с разрешением 300 точек на дюйм. Мне удалось заставить Tesseract работать на китайском языке шириной 12 пикселей, масштабируя их до ширины 100 пикселей.   -  person Yaroslav Bulatov    schedule 30.09.2012


Ответы (3)


Для шрифтов фиксированного размера при фиксированном увеличении вы, вероятно, можете обойтись менее сложным подходом OCR, основанным на сопоставлении шаблонов. См. здесь пример того, как для сопоставления шаблонов с использованием OpenCV (не .NET, но, надеюсь, достаточно, чтобы вы начали.) Основная идея заключается в том, что вы создаете шаблон для каждой цифры, затем пытаетесь сопоставить все шаблоны в вашем целевом местоположении, выбирая тот, который соответствует больше всего счет. Поскольку вы знаете, где расположены цифры, вы можете искать каждую цифру в очень небольшой области. Дополнительную информацию о теории сопоставления шаблонов см. в этой вики-статье о взаимной корреляции. .

На самом деле это основа для упрощенных приложений OCR (обычно для распознавания специальных шрифтов OCR, таких как стандартные шрифты SEMI, используемые для печати серийных номеров на кремниевых пластинах). базовые методы практически одинаковы.

person Dan Bryant    schedule 28.09.2012
comment
Я полностью согласен, поскольку вы находитесь в такой контролируемой среде (фиксированный размер, известное местоположение и т. д.), сопоставления шаблонов может быть достаточно, не прибегая к реальному распознаванию символов. - person remi; 29.09.2012
comment
Получив название подходящего алгоритма, я обнаружил, что он реализован в AForge, так что я использовал его, и он отлично справляется со своей работой, большое спасибо. - person Giedrius; 04.10.2012

Попробуйте просмотреть этот проект и этот проект тоже. Оба проекта объясняют, как работает OCR, и показывают, как реализовать его на C# и .NET.

person Icemanind    schedule 28.09.2012
comment
@Giedrius - Извините, я не уловил вторую ссылку. Вот еще один хотя это работает с использованием Microsoft Office 2007 OCR, если на вашем компьютере установлен Microsoft Office. - person Icemanind; 28.09.2012

Если вы никуда не торопитесь, я бы посоветовал вам сначала поискать метод, решающий проблему. У меня хорошие впечатления от WEKA. Используя WEKA, вы можете довольно быстро протестировать множество алгоритмов. Как только вы нашли алгоритм, решающий вашу проблему, вы можете либо перенести его на .NET, создать оболочку, поискать реализацию или (если это простой алгоритм) пересобрать его в .NET.

person Locked    schedule 18.10.2012