стартерnuggets.capable/post/692421…, воспроизводится и указывается источник
GitHub
Прямо к делу, помнитезвездаАх
окончательные визуализации
фотки машины из интернета
Идеи дизайна
Среда программирования проекта — python3.7.7, а компилятор использует pycharm2019.3.4 x64 для разработки системы распознавания номерных знаков с графическим интерфейсом. После выбора картинки с номерным знаком выполните позиционирование номерного знака, коррекцию наклона, сегментацию символов и, наконец, распознайте буквы и цифры номерного знака с помощью алгоритма k-NN и отобразите результаты распознавания в интерфейсе GUI.
Расположение номерного знака
Позиционирование номерного знака заключается в том, чтобы определить, где на изображении находится номерной знак, что является предпосылкой сегментации символов и буквенно-цифрового распознавания и является ключевым и сложным моментом системы распознавания номерных знаков. Конкретный алгоритм выглядит следующим образом:
-
Размытие исходного изображения по Гауссу для уменьшения шума.
-
Извлечение краев изображения. Сначала преобразуйте цветное изображение в изображение в градациях серого и используйте большое ядро, чтобы открыть изображение в градациях серого, чтобы открыть изображение, что эквивалентно размытию изображения в градациях серого.Нажмите на изображение в градациях серого, а изображение откроется после операции открытия до 1 :- Для добавления изображения используется коэффициент 1. Описанная выше операция может затемнить большую область с аналогичными значениями серого, что может уменьшить такие детали, как огни, фон, землю и лобовое стекло. Затем используйте алгоритм хитрости, чтобы извлечь край объединенного изображения, чтобы получить изображение хитрости.
gray |
open |
add |
canny |
Извлечь края изображения |
- Используйте горизонтальную полосу в качестве изображения контрольной кромки, чтобы выполнить операцию закрытия, чтобы сблизить изображение, что эквивалентно размытию края по горизонтали, потому что общий угол обзора номерного знака представляет собой прямоугольник, ширина которого больше его высоты. Затем выполните открытую операцию на изображении близко, чтобы получить изображение open2, устраните тонкие линии и небольшие вертикальные линии, чтобы отделить соединенную область положения номерного знака.
закрыть операцию |
открытая операция open2 |
Закрыть и открыть край |
-
Найдите связанные области и отфильтруйте подходящие связанные области по соотношению сторон наименьшего описанного прямоугольника от 2 до 5,5.
-
Поверните и скорректируйте изображение минимального описанного прямоугольника и немного расширьте диапазон вверх, вниз, влево и вправо, чтобы избежать влияния связанной области, не покрывающей номерной знак.
-
Преобразуйте исходное изображение связанной области в изображение HSV и определите основной цвет изображения.Если он не синий, желтый или зеленый, исключите его. Точно найдите номерной знак в соответствии с 3 цветами, чтобы сузить область.
-
Соответствующее положение снова отображается с соотношением сторон изображения 2,2 ~ 5,3, и позиционирование номерного знака завершено.
Расположение номерного знака
сегментация символов
Сегментация символов соединяет два этапа позиционирования номерного знака и распознавания символов и играет роль в связывании предыдущего и следующего. Точная сегментация символов является предпосылкой точного распознавания символов. Конкретный алгоритм выглядит следующим образом:
-
Сначала преобразуйте изображение RGB в изображение в градациях серого, а затем преобразуйте его в двоичное изображение.Поскольку символы желтой и зеленой карточек черные, двоичные изображения желтой и зеленой карточек следует инвертировать.
-
На верхней или нижней кромке номерного знака есть 2 заклепки.Учитывая, что символы номерного знака вообще 7-битные, теоретически проходится каждый ряд пикселей.Если количество черно-белых переходов больше 14 раз, можно судить, что пиксели в строке имеют символы и сохраняют их.Если он меньше или равен 14 раз, можно судить, что в пикселях строки нет символьных пикселей, и весь ряд пикселей может быть установите черный цвет, чтобы устранить заклепки. Учитывая возможность наклона номерного знака, в проекте этот порог установлен равным 8.
-
Значение пикселя бинарного изображения проецируется на ось X. Чем больше белых пикселей, тем выше проецируемое значение. Когда проецируемое значение ниже установленного порога, его можно рассматривать как символьный интервал. Поскольку расстояние между номером провинции и другими номерами велико, максимальным интервалом символов можно считать интервал между номером провинции и города и другими номерами, и тогда, считая предыдущий интервал, первый символ номерного знака может получить. Поскольку в правой части большого интервала много символов, для раннего поиска используются 5 самых больших связанных областей, а затем сортируются по координате X для получения оставшихся символов.На этом сегментация символов завершена.
сегментация символов
Распознавание символов
- Описание функции
Бинарное изображение каждого символа настраивается на бинарное изображение размером 32*64 пикселя, а значения пикселей считываются построчно для получения 2048-мерного вектора, который используется в качестве признака персонажа.
- k-NN алгоритм
В области распознавания образов алгоритм k-NN представляет собой непараметрический статистический метод классификации и регрессии. В алгоритме классификации k-NN входные данные содержат обучающие выборки из k ближайших пространственных признаков, а выходные данные представляют собой таксономическую совокупность. Классификация объекта определяется классом, в котором его соседи составляют большинство, а k — целое положительное число, обычно нечетное. Наибольшая классификационная категория из k выборок ближайших соседей определяет категорию, присвоенную объекту, если, класс объекта напрямую назначается ближайшим узлом.
Алгоритм k-NN — один из самых простых из всех алгоритмов машинного обучения. К ближайшим соседям относятся все объекты, которые были правильно классифицированы.Хотя никаких явных шагов обучения не требуется, это также можно рассматривать как набор обучающей выборки для этого алгоритма. Обучающие выборки представляют собой векторы многомерного пространства признаков, где каждая обучающая выборка имеет метку класса. Фаза обучения алгоритма состоит только из сохраненных векторов признаков и меток обучающих выборок. Недостатком алгоритма k-NN является то, что он очень чувствителен к локальной структуре данных.
На этапе классификации k — константа, выбранная в элементе.
В общем случае в качестве метрики расстояния можно использовать евклидово расстояние. В евклидовом пространстве точкаи точкаЕвклидово расстояние между
Классификация алгоритма k-NN будет иметь дефекты, когда распределение категорий неравномерно, то есть выборки с более частыми встречами будут влиять на результаты прогнозирования тестовых выборок. Потому что категории с большим количеством выборок с большей вероятностью появятся в окрестности K контрольной точки, а атрибуты контрольной точки рассчитываются на основе выборок в окрестности k. Одним из способов устранения этого недостатка является учет расстояния выборки до k ближайших соседей при выполнении классификации. Классификация каждого из k-ближайших соседей умножается на вес, обратно пропорциональный расстоянию между контрольными точками.
Ссылаться на
сводка функций python cv2 изменить размер boxPoints minAreaRect
Дизайн графического интерфейса Python-Tkinter (подробное руководство)