2014-08-16 5 views
0

Представьте короткий видеоролик, как этот: черный фон, линия белого текста в центре, которая постепенно заполняется красным цветом, а не буква буквами, но каждая отдельная буква заполняется постепенно. Вот упрощенное изображение, которое иллюстрирует это:Признавая текст на картинке

enter image description here

(Существует куча кадров между ними, но они опущены для простоты.)

Таким образом, по прошествии некоторого времени (например, 10 секунд) вся строка будет красной.

Теперь задача, которую я должен решить:

  • Я должен признать начальную строку, таким образом, я должен получить «привет мир» в качестве результата.
  • Не только это. Для каждый письмо Я должен узнать, в какой момент он начинает заполняться, и в какой момент он полностью заполнен.

Вывод может быть такой:

H,0ms,1000ms E,1000ms, 1500ms L,1500,2500ms L,2500ms,3500ms O,3500ms,4000ms

... и так далее.

Скорость может отличаться для разных букв. Размер шрифта и шрифта всегда один и тот же. Набор символов включает буквы нижнего и верхнего регистра.

Я рассмотрел два подхода: распознавание распознавания или нейронную сеть. У меня тоже мало опыта.

Я предполагаю, что подход OCR позволит мне легко распознать текст. Но как я узнаю не заполненные и заполненные письма?

Подход нейронной сети, вероятно, позволит мне распознать как незаполненные/заполненные буквы, но для этого я должен разбить изображение на отдельные буквы, что само по себе может быть сложной задачей.

Есть ли другие варианты? Или заданы два варианта выше, какой из них вы бы порекомендовали и как бы вы обошли проблемы, изложенные для двух подходов?

+0

См., Например, http://www.mathworks.com/help/vision/examples/automatically-detect-and-recognize-text-in-natural-images.html. – user1929959

+0

Pvael, что ты в итоге сделал? –

ответ

0

При использовании специально настроенного OCR или другого алгоритма распознавания образов был бы наиболее эффективный подход, вероятно, это потребует значительного объема работы с вашей стороны, чтобы получить право.

Вместо этого, как насчет использования простого фильтра изображений для разделения каждого кадра на два слоя? Один слой со всеми белыми частями превратился в черный, а один со всеми красными деталями превратился в черный. В вашем третьем примере кадра первый слой будет содержать только красный H на черном фоне, а второй будет содержать белый ELLO WORLD на черном фоне.

Затем вы можете использовать алгоритм OCR для получения букв из каждого слоя, четко разделенных на заполненную и незаполненную группу. Использование OCR на исходном фрейме даст вам весь текст, так что будет легко обрабатывать частично заполненные буквы, отображающиеся (искаженные) в обоих слоях.

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

0

Вы можете попробовать с Tesseract двигателем OCR и работы с символьными (символьными уровнями) значениями достоверности (см. examples). По мере того, как цвет/заполнение символов изменяется, это, вероятно, также влияет на доверие.

0

Я проверил ваше изображение в мощном коммерческом приложении OCR. Для простоты я тестировал сразу все три кадра, так как это не влияет на чтение всех одновременно или по одному. Сегментация обрабатывает это автоматически и считывает каждую зону отдельно. Результат выглядит следующим образом (игнорируйте синюю подсветку): enter image description here

То, что вы видите, является фактическими цифровыми символами/строками. Программное обеспечение обнаружило белый текст на черном фоне. Ака перевернутый текст.

Моя забота перед тестом, подтвержденная тестом, касалась тех частично заполненных символов. OCR будет читать текст и все, что похоже на текст. Вы можете получить частичные символы, такие как I (см. Выше в 2-м кадре), точку с запятой (частичный C), периоды (частичный L), V (частичный W) и т. Д. Пока вы фильтруете для тех, которые, я полагаю, ...

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

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

Так что, в конце концов, я думаю, что оба они необходимы для элегантного и надежного решения.

Как об этом:

  1. Использование первого кадра (один, без красных пикселей), чтобы получить всю строку с помощью OCR, а также ограничивающую поле координат для каждого символа. (Вы не остались, но кажется, что положение персонажей остается неизменным от кадра к кадру.) Система OCR, которую я тестировал, дает вам точные координаты каждого символа в XML. Другие OCR должны быть в состоянии сделать это также.

  2. С левой стороны проанализируйте каждый ограничивающий символ символ (рассматривая каждого как небольшое отдельное изображение на несколько пикселей в ширину и высокий, но используйте точные координаты) для наличия хотя бы одного красного пикселя. Бум - это ваше заполнение для этого персонажа.

  3. Проанализируйте те же самые поля для последнего белого пикселя. Бум - это ваш конец заполнения для этого персонажа.

Повторите для всех символов.

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

Смежные вопросы