Распознавание номеров железнодорожных вагонов на основе iANRCR SDK

Распознавание с помощью iANRCR SDK очень просто, поскольку используется библиотека OpenCV. Предположим с камеры поступает стабильное, обрезанное так, как нам нужно изображение:

в формате матрицы OpenCV Mat image.
Переводим изображение в градации серого
Mat gray;
cvtColor(image, gray, CV_BGR2GRAY);



( Читать дальше )

Жизненный цикл разработки оптимального программного обеспечения для распознавания образов в реальном времени

Выдержка из книги Кручинин, А.Ю. Оптимальный подход к распознаванию протяженных объектов в реальном времени. – М.: АНО Изд. Дом «Науч. обозрение», 2016. – 305 с.

Жизненный цикл разработки современного программного обеспечения обычно представляется спиральной моделью Боэма, выделяя последовательность итераций [138]:
  • определение требований;
  • анализ;
  • разработка;
  • проектирование следующей фазы.
Эта модель наиболее подходит и для разработки программного обеспечения распознавания образов. Если руководствоваться классической постановкой задачи распознавания образов (параграф 1.1), то применимо к разработке программного обеспечения для распознавания эти итерации выглядят так:
• определение требований к эффективности распознавания образов;
• анализ и выбор информативных признаков;
• разработка программы, которая вычисляет информативные признаки и по ним соотносит неизвестный образ с одним из эталонов, в том числе проводится тестирование;
• анализ результатов тестирования и проектирование следующей последовательности итераций (коррекция требований, модифицированные информативные признаки, другая реализация алгоритма распознавания).


( Читать дальше )

Решение проблемы низкой FPS на некоторых USB камерах

Столкнулся с проблемой в Windows, что камеры на новых ноутбуках и некоторые новые камеры при разрешениях выше 640x480 дают низкое значение FPS использованием видеопотока OpenCV (неважно Си или Си++ интерфейс).
В моем случае было 3 камеры (2 внешние и одна ноутбука), которые ставили разрешение 1280x760, но только одна при этом давала 30 FPS, остальные две камеры давали значение 10 FPS.

Естественно первая идея — установить FPS с помощью CV_CAP_PROP_FPS, но оно не работает для камер. Тогда пришлось смотреть исходники OpenCV и выяснять в каких режимах работает камера.


( Читать дальше )

Распознавание и слежение за знаком скорости

Распознавание знака скорости и слежение за ним. Все выполняется довольно быстро — на 1 ядре процессора AMD FX(tm)-6100 Six-Core выделенная зона распознается за 0.017с. (полное FullHD изображение где-то в среднем на одном ядре за 0.032с — но анализ всего изображения не нужен. Достаточно распознавать указанную область).

Контурный анализ - детектирование зашумленного бинарного объекта

Бинарный объект

Бинарный объект – это объект, созданный человеком, и находящийся в поле зрения камеры. К таким объектам относятся дорожные знаки, автомобильные номера, баркоды и т.п. Часто эти объект имеют контур, по которому они достаточно хорошо детектируются. Однако возникают ситуации, когда объекты серьезно наклонены к оси камеры в нескольких плоскостях, а при этом на них накладывается шум:

Здесь: (а) исходный объект, (б) искаженный объект в результате поворота к камере, (в) зашумленный объект
Для правильного распознавания объекта необходимо провести перспективное преобразование. Но для этого необходимо получить 4 точки бинарного объекта.
Цель данной публикации: определить 4 точки в зашумленном объекте изначальной прямоугольной формы.


( Читать дальше )

Максимально стабильные экстремальные области

В компьютерном зрении, максимально стабильные экстремальные регионы (MSER) используются в качестве метода обнаружения больших двоичных объектов в изображениях. Предложен в работе:
J. Matas, O. Chum, M. Urban, and T. Pajdla. «Robust wide baseline stereo from maximally stable extremal regions.» Proc. of British Machine Vision Conference, pages 384-396, 2002.
http://cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf
В OpenCV есть пример их использования mser_sample.cpp, текст которого приведен ниже


( Читать дальше )

Потоковое распознавание автомобильных номеров

В версии 1.21 iANPR SDK планируется изменить потоковый модуль, добавив дополнительную функциональность: траектория номера, пересечение траектории номера линий. На следующем видео показано, как будет работать пример:

Ускоренное сравнение с шаблоном

Здесь http://recog.ru/blog/opencv/57.htm показано, как использовать функции OpenCV cvMatchTemplate для сравнения с эталоном.
Недавно появилась статья «Tirui Wu, Alexander Toet Speed-Up Template Matching Through Integral Image Based Weak Classifiers // Journal of Pattern Recognition Research 1 (2014) 1-12.» (http://www.jprr.org/index.php/jprr/article/viewFile/516/193), в которой показано, как можно значительно ускорить процесс поиска шаблона.
Алгоритм работы следующий:
1. Шаблон и само изображение переводится к интегральному виду (т.е. в дальнейшем используются интегральные изображения).
2. Для шаблона вычисляется множество «слабых» бинарных блоков. Что такое «слабый» (weak) бинарный блок можно понять из следующего рисунка:



( Читать дальше )

Распознавание индустриальных баркодов DataMatrix с произвольным углом наклона и поворота камеры

Представлен алгоритм распознавания двумерных индустриальных кодов DataMatrix, позволяющий идентифицировать коды, нанесённые ударно-точечным или капельным методами на поверхности со сложным фоном. Алгоритм может адаптироваться в случаях изменения фона на основе смены режима бинаризации.
http://www.computeroptics.smr.ru/KO/PDF/KO38-4/380442.pdf

Нормальный Байесовский классификатор в OpenCV

Байесовский классификатор является самым простым методом обучения и часто достаточным при правильном использовании – при правильном выборе признаков распознавания. Классическая задача Байесовского классификатора – это определение наиболее вероятного образа из двух возможных.
Возьмем два образа нормального распределения (здесь и далее я не вдаюсь в подробности, предполагая, что читатель знает об одномерном распознавании образов).
Образ1: мат. ожидание = 10, среднее квадратичное отклонение = 1
Образ2: мат. ожидание = 12, среднее квадратичное отклонение = 1
Если построить для них распределения, то они будут выглядеть следующим образом:


( Читать дальше )