Как работает система распознавания дорожных знаков


Водитель любого транспортного средства принимает за минуту огромное количество решений. И следить за обстановкой приходится тоже очень внимательно. Машины вокруг, дорожная разметка и знаки, правильное использование органов управления — все это делать одновременно не то что сложно, а очень сложно. Пока автомобилист наберется опыта и сможет контролировать обстановку вокруг себя более уверенно пройдет масса времени и есть всегда есть вероятность того, что может произойти ДТП.

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

Система распознавания дорожных знаков

ПРЕДМЕТ И МЕТОД

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

В отличие от большинства электронных ассистентов, ответственный за распознавание знаков устроен сравнительно просто. Камера выхватывает и сверяет со своей картотекой таблички, схожие по форме, набору и расположению символов. На похожие ограничения максимальной массы или высоты автомобиля (тоже крупные цифры в красной окантовке) сканеры не реагируют. Правда, доходит до курьезов. При обгоне очередного грузовика «Опель» неожиданно высветил на дисплее «30». Оказалось, сканер считал миниатюрный знак ограничения скорости на цистерне поливальной машины.

Похожие разработки у разных автопроизводителей

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

  • Speed Limit Assist от Mercedes-Benz.
  • Road Sign Information от Volvo.
  • Traffic Sign Recognition (TSR) встречается в таких авто, как Audi, Ford, BMW, Volkswagen.
  • Opel Eye от одноименного производителя.

Отличие систем заключается в качестве используемого оборудования и логики работы алгоритмов распознавания объектов на дороге.

ПРОВЕРКА НА ДОРОГАХ

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

За городом помощники заработали увереннее: отвлекающей информации меньше, а знаки гораздо ближе. Однако и в этом горшочке меда не обошлось без дегтя. «Опель» чувствителен к ориентации знака. Если тот чуть наклонен или развернут, камера пропускает его. У БМВ свои причуды. В штатной навигации «баварца» зашиты ограничения скорости для всех дорог. Если сканер не видит придорожных знаков, компьютер опирается на данные дорожных карт. Но лучше бы он этого не делал! Электронный Сусанин не всегда четко отслеживает границы населенных пунктов, переключая лимиты «60» и «90». А иной раз высвечивает совершенно необъяснимые ограничения в 50 или 70 км/ч, причем смена происходит в лесу или чистом поле. Система «Опель ай» лишена привязки к навигации, отслеживает только реальную придорожную информацию, а потому и дезинформирует водителя реже.

Характеристики Neoline G-Tech X77

  • запись видео при разрешении 1920 x 1080 точек, 30 или 60 кадр/с
  • угол захвата 140°
  • IPS-экран 2 дюйма, не сенсорный
  • поддержка карт памяти Micro SD (теперь до 256 ГБ)
  • суперконденсатор для автономного питания (см. обзор)
  • подключение Micro USB
  • GPS-модуль в креплении на стекло
  • датчики: акселерометр
  • режимы: HDR, ночная съёмка, интервальная или непрерывная (циклическая) запись
  • температура работы / хранения -10˚ / -20˚ до +60˚ / +70˚
  • питание: 5 В, 1,5 А (в штекере есть порт USB для аксессуаров или зарядки смартфона)
  • габариты: 74 x 42 x 35 мм / 93 грамма

ДЕФЕКТЫ ЗРЕНИЯ

Кратковременный, но сильный дождь подпортил «Опелю» оценку за точность. Капли на стекле, которые не успевают смахивать щетки, снижают бдительность ассистента вдвое. Аналогично влияет на остроту его зрения и включенный в ночное время дальний свет: электроника стабильно игнорировала знаки, попадающие в свет фар. БМВ таких капризов себе не позволяет.

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

Что такое система распознавания дорожных знаков

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


Система распознавания дорожных знаков

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

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

Кирилл Милешкин

«Появляющиеся на проекционном дисплее цветные символы запрета обгона и его отмены просмотреть невозможно, а вот реальные знаки на обочине дорог — запросто. Темнота, капли или грязь на ветровом стекле камере не помеха. Мне бы такие зоркие глаза! В итоге БМВ превосходит „Опель“ по двум ключевым параметрам — качеству сканирования и подаче информации. Что касается неправильных подсказок навигации об ограничении скорости, то она ни разу их не завысила относительно реального лимита».

Максим Сачков:

Изучение набора данных

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

import os import matplotlib import numpy as np from PIL import Image from tensorflow.keras.preprocessing.image import img_to_array from sklearn.model_selection import train_test_split from keras.utils import to_categorical from keras.models import Sequential, load_model from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout from tensorflow.keras import backend as K import matplotlib.pyplot as plt from sklearn.metrics import accuracy_score

Для тренировки нейронной сети будем использовать изображения из папки «train», которая содержит 43 папки отдельных классов. Инициализируем два списка: data и labels. Эти списки будут нести ответственность за хранение наших изображений, которые мы загружаем, вместе с соответствующими метками классов.

data = [] labels = []

Далее, с помощью модуля os мы перебираем все классы и добавляем изображения и их соответствующие метки в список data и labels. Для открытия содержимого изображения используется библиотека PIL.

for num in range(0, classes): path = os.path.join(‘train’,str(num)) imagePaths = os.listdir(path) for img in imagePaths: image = Image.open(path + ‘/’+ img) image = image.resize((30,30)) image = img_to_array(image) data.append(image) labels.append(num)

Этот цикл просто загружает и изменяет размер каждого изображения до фиксированных 30×30 пикселей и сохраняет все изображения и их метки в списках data и labels.

Затем нужно преобразовать список в массивы numpy для подачи в модель.

data = np.array(data) labels = np.array(labels)

Форма данных — (39209, 30, 30, 3), означает, что имеется 39 209 изображений размером 30×30 пикселей, а последние 3 означают, что данные содержат цветные изображения (значение RGB).

print(data.shape, labels.shape) (39209, 30, 30, 3) (39209,)

Из пакета sklearn мы используем метод train_test_split() для разделения данных обучения и тестирования, используя 80% изображений для обучения и 20% для тестирования. Это типичное разделение для такого объема данных.

X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42) print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) (31367, 30, 30, 3) (7842, 30, 30, 3) (31367,) (7842,)

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

def cnt_img_in_classes(labels): count = {} for i in labels: if i in count: count
+= 1 else: count = 1 return count samples_distribution = cnt_img_in_classes (y_train) def diagram(count_classes): plt.bar(range(len(dct)), sorted(list(count_classes.values())), align=’center’) plt.xticks(range(len(dct)), sorted(list(count_classes.keys())), rotation=90, fontsize=7) plt.show() diagram(samples_distribution)


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

def aug_images(images, p): from imgaug import augmenters as iaa augs = iaa.SomeOf((2, 4), [ iaa.Crop(px=(0, 4)), iaa.Affine(scale={«x»: (0.8, 1.2), «y»: (0.8, 1.2)}), iaa.Affine(translate_percent={«x»: (-0.2, 0.2), «y»: (-0.2, 0.2)}), iaa.Affine(rotate=(-45, 45)) iaa.Affine(shear=(-10, 10)) ]) seq = iaa.Sequential([iaa.Sometimes(p, augs)]) res = seq.augment_images(images) return res def augmentation(images, labels): min_imgs = 500 classes = cnt_img_in_classes(labels) for i in range(len(classes)): if (classes
< min_imgs): add_num = min_imgs — classes imgs_for_augm = [] lbls_for_augm = [] for j in range(add_num): im_index = random.choice(np.where(labels == i)[0]) imgs_for_augm.append(images[im_index]) lbls_for_augm.append(labels[im_index]) augmented_class = augment_imgs(imgs_for_augm, 1) augmented_class_np = np.array(augmented_class) augmented_lbls_np = np.array(lbls_for_augm) imgs = np.concatenate((images, augmented_class_np), axis=0) lbls = np.concatenate((labels, augmented_lbls_np), axis=0) return (images, labels) X_train, y_train = augmentation(X_train, y_train)
После увеличения наш обучающий набор данных имеет следующую форму.

print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) (36256, 30, 30, 3) (7842, 30, 30, 3) (36256,) (7842,)

Давайте еще раз проверим распределение данных.

augmented_samples_distribution = cnt_img_in_classes(y_train) diagram(augmented_samples_distribution)


Диаграмма распределения после аугментации

На графика видно, что наш набор стал более сбалансирован. Далее из пакета keras.utils мы используем метод to_categorical для преобразования меток, присутствующих вy_trainиt_test, в one-hot encoding.

y_train = to_categorical(y_train, 43) y_test = to_categorical(y_test, 43)

Максим Сачков

«Я предпочел бы „Опель ай“. Электронный ассистент „баварца“ напоминает чересчур заботливую бабушку, тщательно оберегающую от всякого рода напастей своего любимого внука, а его земляк из Рюссельсхайма — молодого папашу, который предоставляет ребенку достаточно свободы и подстраховывает лишь в опасных ситуациях. Мне больше по душе, когда человек полагается на себя и не ждет постоянно помощи от других. Хотя и таким людям в трудную минуту дельный совет пригодится».

Полезные мелочи

Держатель с GPS-приёмником крепится на стекло

за счёт 3M-скотча. Она очень крепко держится на стекле. Однако в комплекте есть ещё одна полоска на всякий пожарный случай.

Мне очень нравится магнитное крепление у всех видеорегистраторов серии G-Tech X. Чтобы снять регистратор, нужно всего лишь потянуть его с небольшим усилием на себя — достаточно даже одной руки. А развернуть регистратор объективом в салон нельзя. В таком случае питание прерывается, девайс попросту не работает.

Дата, время, госномер, координаты с широтой и долготой — всё это фиксируется прямо поверх видео, достаточно лишь один раз настроить и забыть. Таким образом, Neoline G-Tech X77 можно запросто использовать в качестве доказательной базы в суде

. Главное — не выкидывать коробку и сопроводительную документации — всё это может пригодиться в судебном процессе, если дело дойдёт.

Введённые ранее данные и актуальные настройки никуда не пропадут, даже если снять регистратор и унести с собой домой на несколько недель. Это особенно актуально для лютых морозов в зимний период или во избежание перегрева девайса на солнце. У G-Tech X77 есть встроенный суперконденсатор

— это своеобразная замена аккумулятора, только стабильнее, по крайней мере, так утверждают в Neoline. Без прямого подключения к бортовой сети автомобиля или к павербанку девайс, разумеется, не работает. Однако для сохранения настроек суперконденсатора более чем достаточно.

Neoline G-Tech X77 умеет следить за автомобилем в режиме парковки

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

Режим парковки активируется через меню и работает при подключении регистратора напрямую к блоку предохранителей авто. Для этого нужно докупать специальный аксессуар Neoline Fuse Cord X7

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

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]