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

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

Объект исследования: методы распознавания изображений.

Предмет исследования: процесс обнаружения и распознавания автомобильного номера на цифровых изображениях с использованием метода Виолы-Джонса

Цель: разработка библиотеки, реализующей автоматическое распознавание российских автомобильных номеров.

Задачи:

  1. Изучить методы распознавания и классификации фрагментов изображения.
  2. Изучить метод Виолы-Джонса как основу для разработки модифицированного алгоритма для поиска идентифицируемых областей в изображении автомобильного номера.
  3. Осуществить обучение каскадов в виде классификаторов Хаара и выполнить анализ структуры результатов в XML-формате.
  4. Разработать алгоритмы поиска границ выделенного автомобильного номера
  5. Разработать алгоритм нормализации угла наклона автомобильного номера
  6. Разработать алгоритм нормализации и выделения связанных областей в изображении автомобильного номера.
  7. Опубликовать статью о сборке библиотеки Tesseract OCR под MinGW
  8. Опубликовать статью о процессе обучения классификатора Хаара
  9. Рассмотреть распознавание найденных символов автомобильного номера на примере работы с TesseractOCR.
  10. Разработать библиотеку для автоматизации распознавания российских автомобильных номеров и апробировать ее для разработки программного обеспечения, осуществляющего анализ номеров в реальных условиях.




1. Поиск области автомобильного номера

1.1 Метод Виолы-Джонса

В настоящее время метод Виолы–Джонса является популярным методом для поиска объекта на изображении в силу своей высокой скорости и эффективности. В основу метода Виолы–Джонса положены: интегральное представление изображения по признакам Хаара, построение классификатора на основе алгоритма адаптивного бустинга и способ комбинирования классификаторов в каскадную структуру. Эти идеи позволяют осуществлять поиск объекта в режиме реального времени. Рассмотрим их более подробно.

Интегральное представление изображения – это матрица, одинаковая по размерам с исходным изображением. В каждом элементе матрицы хранится сумма интенсивностей всех пикселов, находящихся левее и выше данного элемента – правого нижнего угла прямоугольной области (0,0) до (x,y). Элементы матрицы L можно рассчитать по формуле:

где I(i,j) – яркость пиксела исходного изображения.

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

Элементы матрицы рассчитываются по формуле:

С помощью интегрального представления изображения можно быстро рассчитать суммарную яркость произвольной прямоугольной области на изображении. Пример вычисления приведен в приложении «А».

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

Признак-отображение, где Df —множество допустимых значений признака. Если заданы признаки f1,…, fn, то вектор признаков x=(f1(x),…,fn(x)) называется признаковым описанием объекта x. Признаковые описания допустимо сопоставлять с самими объектами. При этом множество X=Df1*…*Dfn называют признаковым пространством.

Признаки делятся на следующие типы в зависимости от множества Df:

  • бинарный признак, Df={0,1};
  • номинальный признак: Df — конечное множество;
  • порядковый признак: Df — конечное упорядоченное множество;
  • количественный признак: Df — множество действительных чисел.
C:\Users\KostyaKulakov\YandexDisk\ANPR\821151e7.jpg
Рисунок 1 – Примитивы Хаара

Признак Хаара вычисляется по смежным прямоугольным областям. В стандартном методе Виолы–Джонса используются прямоугольные примитивы, изображенные на рисунке 1.

Вычисляемым значением F признака Хаара будет где X – сумма значений яркостей точек, закрываемых светлой частью примитива, Y –сумма значений яркостей точек, закрываемых темной частью. Для вычисления используется понятие интегрального изображения, рассмотренное выше, и признаки Хаара могут вычисляться быстро, за постоянное время. Использование признаков Хаара дает точечное значение перепада яркости по оси X и Y соответственно.

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

Классификатор строится на основе алгоритма бустинга (от англ. boost–улучшение, усиление) для выбора наиболее подходящих признаков для искомого объекта на данной части изображения. В общем случае бустинг — это комплекс методов, способствующих повышению точности аналитических моделей. Эффективная модель, допускающая мало ошибок классификации, называется       «сильной». «Слабая» же, напротив, не позволяет надежно разделять классы или давать точные предсказания, делает большое количество ошибок. Поэтому бустинг означает «усиление» «слабых» моделей и является процедурой последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов.

В результате работы алгоритма бустинга на каждой итерации формируется простой классификатор вида:

– направление знака неравенства, — значение порога,– вычисленное значение признака,– окно изображения размером 24×24 пикселов.

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



Поиск автомобильного номера на цифровом изображении

Для поиска объекта на цифровом изображении используется обученный классификатор, представленный в формате xml. Классификатор формируется на примитивах Хаара.

Структура классификатора:

Рисунок 2 – Структура классификатора

где maxWeakCountколичество слабых классификаторов;

stageTheresholdмаксимальный порог яркости;

weakClassifiers набор слабых классификаторов, на основе которых выносится решение о том, находится объект на изображении или нет;

internalNodes и leafValues параметры конкретного слабого классификатора.

Первые два значения в internalNodes не используются, третье — номер признака в общей таблице признаков (она располагается в XML-файле под тегом features), четвертое — пороговое значение слабого классификатора. Если значение признака Хаара меньше порога слабого классификатора, выбирается первое значение leafValues, если больше — второе.

На рисунке 3 продемонстрированы результаты работы классификаторов первого каскада. Белые пятна обозначают предполагаемый участок для дальнейшего поиска.

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

На рисунке 3.1 продемонстрированы результаты поиска с использованием классификатора.

Рисунок 3 – Результат работы классификаторов первого каскада
Рисунок 3 – Результат работы классификаторов первого каскада
Рисунок 3 – Результат работы классификаторов первого каскада
Рисунок 3 – Результат работы классификаторов первого каскада
D:\Programing\DataBase\Задний номер\Test.jpg
Рисунок 3.1 – Результат работы поиска автомобильного номера

 

 

 

 

 

Ознакомиться с процессом обучения каскада Хаара можно по ссылки на статью в моём личном блоге: https://kostyakulakov.ru/2015/07/04/opencv-обучение-каскада-хаара/ или в приложении «Б».

2. Подготовка к распознаванию автомобильного номера

2.1 Алгоритм нормализации угла наклона

Рисунок 4 – Максимальные углы.

После того как мы нашли автомобильный номер (Рисунок 3), нам нужно подготовить его к распознаванию, для этого мы должны нормализировать угол наклона автомобильного номера.

Рисунок 5 – результат работы алгоритма. Угол 1.4°

Предположим, что номер может иметь диапазон поворота от -10° до +10°. При этом мы будем обрабатывать каждый раз новый кадр с шагом в 0.1°. С каждым кадром будем работать независимо. Какая гипотеза по повороту даст лучший результат, та и победит. Максимальные углы наклона приведены на рисунке 4. Для каждого кадра рассчитывается нижняя граница изображения. После работы алгоритма выигрывает угол, для которого была рассчитана самая верхняя граница. Это и будет искомый угол. Результат работы алгоритма отображён на рисунке 5. Подробнее про алгоритм поиска нижней границы можно ознакомиться в главе 2.2. Полная блок-схема алгоритма приведена в приложении «В».

2.2 Алгоритм поиска нижней границы автомобильного номера

После того как мы нашли угол наклона автомобильного номера, нам нужно найти его границы. Поиск нижней границы автомобильного номера строится на анализе гистограммы яркости.

Рисунок 6 – принцип построения гистограммы

Для начала изображение обрабатывается с помощью определенного правила, которое задаёт условие разделение пикселей на чёрные и белые. Данная операция называется бинаризация изображения. После бинаризации мы считаем в каждой колонке кол-во чёрных пикселей и на основе полученной информации строим гистограмму изображения. Принцип построения гистограммы отображён на рисунке 6. Пример бинаризированного автомобильного номера и его гистограммы приведён на рисунке 7.

D:\YandexDisk\Скриншоты\2015-07-12 15-42-07 Скриншот экрана.png
Рисунок 7 – бинаризация автомобильного номера и гистограмма

Из рисунка видно, что имеются резкие возрастания уровня гистограммы в начале и конце автомобильного номера. В алгоритме анализируются данные возрастания.

На их основе строится гипотеза о нижней границе автомобильного номера.

Полная блок-схема алгоритма поиска нижней границы приведена в приложении «Г».

2.3 Алгоритм поиска верхней границы автомобильного номера

OpenCV
Рисунок 8 – работа алгоритма поиска верхней границы автомобильного номера

Во время тестов опытным путём установлено, что гипотеза с использованием гистограммы яркости для поиска верхней границы, а/н[1] работает в 50% случаев, что не приемлемо для нашей системы. В связи с этим было решено обучить каскад Хаара на каждую букву и проанализировать верхние границы букв, тем самым мы сможем получить верхнюю границу автомобильного номера. Подробнее про процесс обучения каскада Хаара для поиска букв автомобильного номера можно ознакомиться в моём личном блоге: https://kostyakulakov.ru/2015/07/04/opencv-обучение-каскада-хаара или в приложении «Б». Пример работы алгоритма приведён на рисунке 8. Полная блок-схема алгоритма поиска верхней границы приведена в приложении «Д».

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

2.4 Алгоритм поиска боковых границ автомобильного номера

На данном этапе мы уже обрезали автомобильный номер по верхней и нижней границе, остаётся определить боковые границы автомобильного номера. В данном случае, мы будем применять метод построения гистограммы яркости, но у нас появляется проблема: цвет автомобиля. Если автомобиль белого цвета, то после бинаризации изображение по краям будет иметь белый цвет, а если автомобиль чёрного цвета, то края будут чёрные, а сам номер белым. Отсюда следует вывод, что нам следует использовать две гипотезы на каждый бок, одна для поиска границы на белой машине и вторая для поиска на чёрной границе. Выигрывает та гипотеза результатом исследования, которой является результат ближайший к центру автомобильного номера. Для улучшения качества поиска боковых границ автомобильного номера, перед построением гистограммы яркости мы проводим основные морфологические преобразования:

  • Erode — размывание (операция сужения).
  • Dilate — растягивание (операция расширения).
Рисунок 9 – Бинаризированные кадры белого и чёрного автомобиля.

Пример бинаризации кадра белой и чёрной машины приведён на рисунке 9. Полная блок-схема алгоритма поиска боковых границ приведена в приложении «Е».

3. Сегментации автомобильного номера на символы

Рисунок 10 – Результат выполнения алгоритма поиска границ а/н.
Рисунок 11 – шаги преобразования

Результатом работы алгоритма поиска боковых границ автомобильного номера, является изображение номера, для которого применим алгоритма сегментации на символы. Пример полученного автомобильного номера после выполнения алгоритма поиска боковых границ приведён на рисунке 10.

Для поиска символов автомобильного номера мы используем стандартные методы библиотеки OpenCV. Вначале нам необходимо перевести изображение в чёрно-белый формат и бинаризировать его. После бинаризации мы обрабатываем изображения фильтром средних частот, чтобы убрать помеховую составляющую. Следующим действием будет процесс размытие изображения с использованием метода Гаусса. Размытие необходимо для сглаживания краёв символов как показали тесты, данное преобразование существенно увеличивает вероятность успешного поиска символа. В следующем шаге мы воспользуемся самым популярным методом для выделения границ – детектором границ Кенни. Алгоритм детектора достаточно тривиален и заключается в следующем:

  1. Убрать шум и лишние детали из изображения
  2. Рассчитать градиент изображения
  3. Сделать края тонкими
  4. Связать края в контуры
Рисунок 13 – номер с помеховой составляющей
Рисунок 12 – выделение символов

Результаты и шаги преобразования автомобильного номера отображены на рисунке 11. После выделения границ мы используем стандартную функцию для поиска связанных областей. Окончательным этапом поиска связанных областей является сравнения найденной области с шаблоном символа автомобильного номера и отбрасыванием некорректных областей. Результат выделения символов приведён на рисунке 12. К тому же, данный способ позволяет корректно определять символы автомобильного номера на изображении с повышенной помеховой составляющей, пример приведён на рисунке 13. Блок схема алгоритма приведена в приложении «Ё».

 

4. Распознавание символов автомобильного номера

tesseract ocrРаспознавание символов является заключительным этапом работы библиотеки, на текущий момент мы имеем массив с выделенными символами автомобильного номера. Для распознавания символов было принято решение использовать готовый, проверенный временем, продукт от компании Google – Tesseract OCR. Библиотека для распознавания символов Tesseract OCR использует нейронную сеть, которую нам пришлось обучить с учётом шаблона символа автомобильного номера. Во время сборки Tesseract OCR под компилятор mingw32 мы столкнулись с определенными проблемами. Мы просмотрели множество it ресурсов и не обнаружили подробной инструкции для сборки под mingw, поэтому мы решили написать статью и опубликовали её на habrahabr, ссылка на статью и сама статья расположена в приложении «Ж». Блок-схема алгоритма распознавания символов автомобильного номера приведена в приложении «З».

5. Основные методы библиотеки

В данном пункте описаны основные методы библиотеки распознавания автомобильных номеров.

Имя методаВходные данныеВыходные данныеОписание
recognizeИзображениеТекстРаспознавание изображения
getLicenseTextТекстВозвращение распознанного автомобильного номера
getFramesИзображениеВозвращение найденной области с автомобильным номером
findLettersИзображениеКоординатыВыделение связанных областей и нормализация изображения
setImageИзображениеУстановка изображения для распознавания
showSymbolдемонстрация на экран изображений с найденными символами на автомобильном номере
saveSymbolsСохраняет на диск пользователя найденные символы на области автомобильного номера
saveFrameСохраняет на диск пользователя найденные области на автомобильном номере
recognizeLettersКоординатыТекстРаспознание найденных символов
showNormalImageДемонстрация изображения для распознавания




6. Практическое применение разработанной библиотеки: тестовый запуск программы на охраняемом объекте

В рамках проекта была разработана открытая библиотека распознавания автомобильных номеров. Программа, написанная с использованием функций библиотеки, была апробирована в частном охранном предприятии. Для проверки был записан на видео въезд машины на территорию; программа осуществила выделение автомобильного номера, текстовое представление которого может быть подвергнуто дальнейшей обработке. Для демонстрации представляю несколько кадров из видеозаписи. На рисунке 10 приведено изображение и результат работы программы по идентификации номера.

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

Рисунок 11 – Демонстрация работы программы на примере входных данных в виде видео

Заключение

Задачи, поставленные вначале работы над проектом, выполнены: в ходе проекта мы изучили методы распознавания и классификации фрагментов изображения, метод Виолы-Джонса. Разработали алгоритм поиска и нормализации угла наклона автомобильного номера, поиска верхней, нижней и боковых границ автомобильного номера, гистограммного анализа, нормализации и выделения связанных областей в изображении автомобильного номера и распознавания найденных символов. Кроме того, мы написали статью о сборке библиотеки tesseract ocr под компилятор mingw и успешно опубликовали на крупнейшем it ресурсе страны: хабрахабре(http://habrahabr.ru/) . Мы оптимизировали алгоритм распознавания и научили работать библиотеку с номерами, которые имеют мелкие помеховые составляющие. Мы разработали библиотеку для автоматизации распознавания российских автомобильных номеров, и апробировали ее в реальных условиях.

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

Исходный код в Git репозитории.

Список использованных источников

  1.  A Real-Time Mobile Vehicle License Plate Detection and Recognition Kuo-Ming Hung and Ching-Tang Hsieh : гистограммный подход при распознавании номеров [Электронный ресурс]. URL: http://www2.tku.edu.tw/~tkjse/13-4/09-IE9722.pdf (дата обращения 20.08.2014)
  2. Automated Number Plate Recognition Using Hough Lines and Template Matching Saqib Rasheed, Asad Naeem and Omer Ishaq: поиск номеров через HOG-дескрипторы вертикальных линий [Электронный ресурс]. URL: http://www.iaeng.org/publication/WCECS2012/WCECS2012_pp199-203.pdf (дата обращения 21.08.2014)
  3. Survey of Methods for Character Recognition Suruchi G. Dedgaonkar, Anjali A. Chandavale, Ashok M. Sapkal : небольшая обзорная статья про распознавание букв и цифр [Электронный ресурс]. URL: http://ijeit.com/vol%201/Issue%205/IJEIT1412201205_36.pdf (дата обращения 20.08.2014).
  4. Крашенинников В. Р. Основы теории обработки изображений: Сборник лабораторных работ [Электронный ресурс].- Ульяновск: УлГТУ, 2004. URL: http://www.ict.edu.ru/ft/005217/1319.pdf (дата обращения 21.08.2014)
  5. Работа каскада Хаара в OpenCV в картинках: теория и практика [Электронный ресурс].
    URL: http://habrahabr.ru/company/recognitor/blog/228195/ (дата обращения 20.08.2014)
  6. Сборка библиотеки Tesseract OCR под MinGW [Электронный ресурс]. Автор: Константин Кулаков.
    URL: http://habrahabr.ru/post/262483/ (дата обращения 13.08.2015)

Приложение «А»

Пример расчёта интегральной матрицы

У нас есть прямоугольник ABCD с интересующим объектом D (рисунок А.1):

Рисунок А.1

На рисунке видно, что сумму внутри прямоугольника можно выразить через суммы и разности смежных прямоугольников по следующей формуле:

Примерный подсчёт показан на рисунке А.2:

Рисунок А.2

Приложение «Б»

 

Приложение «В»

D:\GoogleDrive\Угол наклона.png

Приложение «Г»

D:\GoogleDrive\поиск нижней границы.png

Приложение «Д»

D:\GoogleDrive\Поиск верхней границы (1).png

Приложение «Е»

D:\GoogleDrive\Поиск левой границы.png

D:\GoogleDrive\Поиск правой границы.png

Приложение «Ё»

D:\GoogleDrive\Сегментация а_н.png

Приложение «Ж»

Приложение «З»

D:\GoogleDrive\Распознавание символов.png

Комментарий “Разработка библиотеки распознавания российских автомобильных номеров

Добавить комментарий

Ваш e-mail не будет опубликован.