Водитель любого транспортного средства принимает за минуту огромное количество решений. И следить за обстановкой приходится тоже очень внимательно. Машины вокруг, дорожная разметка и знаки, правильное использование органов управления — все это делать одновременно не то что сложно, а очень сложно. Пока автомобилист наберется опыта и сможет контролировать обстановку вокруг себя более уверенно пройдет масса времени и есть всегда есть вероятность того, что может произойти ДТП.
Система распознавания дорожных знаков призвана помочь водителям в повседневной езде и немного ослабить давление на мозг человека, особенно когда он уставший за рулем.
Система распознавания дорожных знаков
ПРЕДМЕТ И МЕТОД
Типичные ситуации для проверки устройств в избытке предоставляют дороги общего пользования. Подмосковные трассы богаты различными ограничениями скорости, более узкие шоссе — запрещающими обгон «леденцами», магистраль и скоростное кольцо в черте города — нестандартными знаками, которые видеоглазок должен считать на довольно быстром ходу. Маршрут мы прошли дважды: в светлое время и в темноте. Причем днем ветровое стекло периодически смачивал дождь, а большегрузные фуры щедро обдавали грязью. В общем, от дорожных реалий не отступили.
В отличие от большинства электронных ассистентов, ответственный за распознавание знаков устроен сравнительно просто. Камера выхватывает и сверяет со своей картотекой таблички, схожие по форме, набору и расположению символов. На похожие ограничения максимальной массы или высоты автомобиля (тоже крупные цифры в красной окантовке) сканеры не реагируют. Правда, доходит до курьезов. При обгоне очередного грузовика «Опель» неожиданно высветил на дисплее «30». Оказалось, сканер считал миниатюрный знак ограничения скорости на цистерне поливальной машины.
Как функционирует TSR
На сегодняшний день ведущие производители автомобилей (такие, как Ford, BMW, Audi, Volkswagen, Opel, Mercedes-Benz) устанавливают ее на свою продукцию. Основным предназначением этой новинки является предупреждение тех, кто в данный момент за рулем, о необходимости соблюдения максимальной скорости движения. В тот момент, когда машина минует очередной знак, установка фиксирует текущую скорость движения и то, насколько водитель ее придерживается. Если же нет, то оборудование напоминает водителю о недопустимости превышения. Интересно, что у разных производителей такие установки могут называться по-разному, хотя выполняют схожие функции. Так, у Mercedes Benz она именуется Speed Limit Assist (буквально, система по контролю за ограничением скорости), у Opel — Opel Eye (признана лучшей инновацией в сфере автобезопасности за 2010-й год). Производитель Вольво назвал свое детище Road Sign Information, что в переводе звучит, как комплекс информирования о дорожных знаках.
ПРОВЕРКА НА ДОРОГАХ
БМВ разочаровывает в первые минуты: знаки «80» на правой обочине широких московских магистралей он замечает редко. «Опель» чуть внимательнее. Но чувствуется, что для систем эти условия нештатные: на столь широкой дороге нужно дублировать информацию на растяжках, верхней рампе или разделительном барьере.
За городом помощники заработали увереннее: отвлекающей информации меньше, а знаки гораздо ближе. Однако и в этом горшочке меда не обошлось без дегтя. «Опель» чувствителен к ориентации знака. Если тот чуть наклонен или развернут, камера пропускает его. У БМВ свои причуды. В штатной навигации «баварца» зашиты ограничения скорости для всех дорог. Если сканер не видит придорожных знаков, компьютер опирается на данные дорожных карт. Но лучше бы он этого не делал! Электронный Сусанин не всегда четко отслеживает границы населенных пунктов, переключая лимиты «60» и «90». А иной раз высвечивает совершенно необъяснимые ограничения в 50 или 70 км/ч, причем смена происходит в лесу или чистом поле. Система «Опель ай» лишена привязки к навигации, отслеживает только реальную придорожную информацию, а потому и дезинформирует водителя реже.
Ограничения, характерные для системы
Система распознавания дорожных знаков постепенно становится неотъемлемой частью многих автомобилей. Ее стали внедрять даже в машины среднеценового сегмента и в некоторые бюджетные модели. Столь масштабное распространение данной системы обусловлено тем, что она в действительности способна уменьшить количество ДТП на дорогах. Одновременно с этим, данное оборудование повышает комфорт вождения. Благодаря ему водителю не приходится постоянно следить за дорожными знаками.
Однако пока данная система имеет ряд недостатков, которые еще не удалось устранить. Это оборудование не способно распознавать дорожные знаки, установленные с нарушением нормативов. Такой недостаток особенно актуален для автомобилей, оснащаемых комплексом полуавтономного или автономного управления. Но, согласно заявлениям разработчиков, систему распознавания дорожных знаков будут дополнять искусственным интеллектом. Это поможет избавиться от указанного недостатка.
ДЕФЕКТЫ ЗРЕНИЯ
Кратковременный, но сильный дождь подпортил «Опелю» оценку за точность. Капли на стекле, которые не успевают смахивать щетки, снижают бдительность ассистента вдвое. Аналогично влияет на остроту его зрения и включенный в ночное время дальний свет: электроника стабильно игнорировала знаки, попадающие в свет фар. БМВ таких капризов себе не позволяет.
Но не надейтесь, что система предупредит вас о знаке заранее. При заявленной стометровой дальнобойности, камеры и «Опеля», и БМВ передают информацию на дисплеи не раньше, чем знак поравняется с передним бампером. А «баварец» и вовсе выдерживает театральную паузу и выдает сообщение, лишь когда столбик замаячит в зеркале заднего вида. Причем это не зависит от погодных условий или времени суток.
Вариантное кодирование KIA что это?
Опубликовано: 23.09.2019
Вариантное кодирование KIA. Это еще одна вариация названия «ЕCU конфигурация». Сегодня постараемся снять завесу тайны с этого таинственного процесса. И кроме прочего разъяснить что такое вариантное кодирование. Также для чего оно нужно, или не нужно. И что именно имеет вариантную Читать дальше …
нет комментариев
Кирилл Милешкин
«Появляющиеся на проекционном дисплее цветные символы запрета обгона и его отмены просмотреть невозможно, а вот реальные знаки на обочине дорог — запросто. Темнота, капли или грязь на ветровом стекле камере не помеха. Мне бы такие зоркие глаза! В итоге БМВ превосходит „Опель“ по двум ключевым параметрам — качеству сканирования и подаче информации. Что касается неправильных подсказок навигации об ограничении скорости, то она ни разу их не завысила относительно реального лимита».
Максим Сачков:
Этап 1. Цветовая сегментация изображения
Захват изображения. Поиск красного и белого цветов
Уникальной характеристикой запрещающих знаков является круг с преобладанием белого цвета и красным контуром, позволяющий идентифицировать эти знаки на изображениях. После того, как мы получили кадр с камеры в формате RGB, мы вырезаем изображение размером 512 на 512 (Рис. 1) и выделяем на нем красный и белый цвета, отбрасывая все остальные.
Для цветовой локализации — определения элементов конкретного цвета — формат RGB очень неудобен, потому что чистый красный цвет в природе встречается очень редко, но почти всегда идет с примесями других цветов. Кроме того, цвет изменяет оттенок и яркость в зависимости от освещения. Так, например, на восходе и закате солнца все предметы приобретаю красный оттенок; сумерки и полумрак тоже дают свои оттенки.
Рис. 1. Изображение в формате RGB размером 512 х 512, поступающее на вход алгоритма.
Тем не менее, сначала мы попробовали решить задачу, используя исходный RGB-формат. Чтобы выделить красный цвет, мы устанавливали верхний и нижний пороги: R > 0,7, а G и B < 0,2. Но модель оказалась не очень удобной, т.к. значения цветовых каналов сильно зависели от освещенности и времени суток. Например, значения каналов RGB красного цвета в солнечный и пасмурный дни сильно отличаются.
Поэтому модель RGB мы перевели в цветовую модель HSV/B, в которой координатами цвета являются: цветовой тон (Hue), насыщенность (Saturation) и яркость (Value / Brightness).
Модель HSV/B обычно представляют цветовым цилиндром (Рис. 2). Она удобна тем, что оттенки цвета в ней являются лишь инвариантами различных типов освещения и теней, что естественным образом упрощает задачу выделения необходимого цвета на изображении вне зависимости от условий, таких как время суток, погода, тень, расположение солнца и др.
Код шейдера для перехода от RGB к HSV/B:
varying highp vec2 textureCoordinate; precision highp float; uniform sampler2D Source; void main() { vec4 RGB = texture2D(Source, textureCoordinate); vec3 HSV = vec3(0); float M = min(RGB.r, min(RGB.g, RGB.b)); HSV.z = max(RGB.r, max(RGB.g, RGB.b)); float C = HSV.z — M; if (C != 0.0) { HSV.y = C / HSV.z; vec3 D = vec3((((HSV.z — RGB) / 6.0) + (C / 2.0)) / C); if (RGB.r == HSV.z) HSV.x = D.b — D.g; else if (RGB.g == HSV.z) HSV.x = (1.0/3.0) + D.r — D.b; else if (RGB.b == HSV.z) HSV.x = (2.0/3.0) + D.g — D.r; if ( HSV.x < 0.0 ) { HSV.x += 1.0; } if ( HSV.x > 1.0 ) { HSV.x -= 1.0; } } gl_FragColor = vec4(HSV, 1); }
Рис. 2. Цветовой цилиндр HSV/B.
Для выделения красного цвета мы строим три пересекающиеся плоскости, которые образуют область в цветовом цилиндре HSV/B, соответствующую красному цвету. Задача выделения белого цвета является более простой, т.к. белый цвет расположен в центральной части цилиндра и нам достаточно указать порог по радиусу (ось S) и высоте (ось V) цилиндра, которые образуют область, соответствующую белому цвету.
Код шейдера, выполняющий эту операцию:
varying highp vec2 textureCoordinate; precision highp float; uniform sampler2D Source; //parameters that define plane const float v12_1 = 0.7500; const float s21_1 = 0.2800; const float sv_1 = -0.3700; const float v12_2 = 0.1400; const float s21_2 = 0.6000; const float sv_2 = -0.2060; const float v12_w1 = -0.6; const float s21_w1 = 0.07; const float sv_w1 = 0.0260; const float v12_w2 = -0.3; const float s21_w2 = 0.0900; const float sv_w2 = -0.0090; void main() { vec4 valueHSV = texture2D(Source, textureCoordinate); float H = valueHSV.r; float S = valueHSV.g; float V = valueHSV.b; bool fR=(((H>=0.75 && -0.81*H-0.225*S+0.8325 <= 0.0) || (H <= 0.045 && -0.81*H+0.045*V-0.0045 >= 0.0)) && (v12_1*S + s21_1*V + sv_1 >= 0.0 && v12_2*S + s21_2*V + sv_2 >= 0.0)); float R = float(fR); float B = float(!fR && v12_w1*S + s21_w1*V + sv_w1 >= 0.0 && v12_w2*S + s21_w2*V + sv_w2 >= 0.0); gl_FragColor = vec4(R, 0.0, B, 1.0); }
Результат работы шейдера, выделяющего красный и белый цвет на изображении 512 х 512, приведен на Рис. 2. Однако, как показали вычислительные эксперименты, для дальнейшей работы полезно понижать разрешение изображения до 256 на 256, т.к. это повышает производительность и практически не влияет на качество локализации знаков.
Рис. 3. Красно-белое изображение.
Поиск окружностей на изображении
Большинство методов поиска окружностей работают с бинарными изображениями. Поэтому, полученное на предыдущем шаге красно-белое изображение нужно преобразовать в бинарный вид. В нашей работе мы опирались на то, что на запрещающих знаках белый цвет фона граничит с красным контуром знака, и разработали алгоритм для шейдера, который ищет такие границы на красно-белом изображении и отмечает граничные пиксели как 1, а не граничные — 0.
Работа алгоритма заключается в следующем:
- сканируются соседние пиксели каждого красного пикселя изображения;
- если находится хоть один пиксел белого цвета, то исходный красный пиксел помечается как граничный.
Таким образом, у нас получается черно-белое изображение (256 х 256), в котором фон залит черным цветом, а предполагаемые окружности — белым (Рис. 4а).
Рис. 4а. Бинарное изображение, отображающее границы красного и белого цветов.
Для уменьшения количества ложных точек полезно применить морфологию (Рис. 4б).
Рис. 4б. То же изображение, но после применения морфологии.
Далее, на полученном бинарном изображении необходимо найти окружности. Сначала, мы решили использовать метод Хаффа для поиска окружностей (Hough Circles Transform), реализованный на CPU в библиотеке OpenCV. К сожалению, как показали вычислительные эксперименты, данный метод слишком нагружает CPU и снижает производительность до неприемлемого уровня.
Логичным выходом из данной ситуации служил бы перенос алгоритма на шейдеры GPU, однако, как и другие методы поиска окружностей на изображениях, метод Хаффа плохо соответствует парадигме шейдеров (shader-approach). Таким образом, нам пришлось обратиться к более экзотическому методу поисков окружностей — методу быстрого поиск кругов при помощи градиентных пар (Fast Circle Detection Using Gradient Pair Vectors) [1], который показывает более высокую производительность на CPU.
Основные этапы данного метода следующие:
1. Для каждого пикселя бинарного изображения определяется вектор, характеризующий направление градиента яркости в данной точке. Данные вычисления выполняет шейдер, реализующий оператор Собеля (Sobel operator):
varying highp vec2 textureCoordinate; precision highp float; uniform sampler2D Source; uniform float Offset; void main() { vec4 center = texture2D(Source, textureCoordinate); vec4 NE = texture2D(Source, textureCoordinate + vec2(Offset, Offset)); vec4 SW = texture2D(Source, textureCoordinate + vec2(-Offset, -Offset)); vec4 NW = texture2D(Source, textureCoordinate + vec2(-Offset, Offset)); vec4 SE = texture2D(Source, textureCoordinate + vec2(Offset, -Offset)); vec4 S = texture2D(Source, textureCoordinate + vec2(0, -Offset)); vec4 N = texture2D(Source, textureCoordinate + vec2(0, Offset)); vec4 E = texture2D(Source, textureCoordinate + vec2(Offset, 0)); vec4 W = texture2D(Source, textureCoordinate + vec2(-Offset, 0)); vec2 gradient; gradient.x = NE.r + 2.0*E.r + SE.r — NW.r — 2.0*W.r — SW.r; gradient.y = SW.r + 2.0*S.r + SE.r — NW.r — 2.0*N.r — NE.r; float gradMagnitude = length(gradient); float gradX = (gradient.x+4.0)/255.0; float gradY = (gradient.y+4.0)/255.0; gl_FragColor = vec4(gradMagnitude, gradX, gradY, 1.0); }
Все ненулевые векторы группируются по направлениям. В силу дискретности бинарного изображения всего получается 48 направлений, т. е. 48 групп.
2. В группах ищутся пары противоположно направленных векторов V1 и V2, например, 45 градусов и 225. Для каждой найденной пары проверяются условия (Рис. 5):
- угол бета меньше некоторого порога
- расстояние между точками P1 и P2 меньше заданного максимального диаметра окружности и больше минимального.
Если данные условия выполняются, то считается, что точка С, являющаяся серединой отрезка P1P2, является предполагаемым центром окружности. Далее эта точка C помещается, в так называемый, аккумулятор.
3. Аккумулятор представляет собой трехмерный массив размером 256 x 256 x 80. Первые два измерения (256 x 256 — высота и ширина бинарного изображения) соответствуют предполагаемым центрам окружностей, а третье измерение (80) представляет возможные радиусы окружностей (максимальный — 80 пикселей). Таким образом, каждая градиентная пара накапливает отклик в некоторой точке, соответствующей предполагаемому центру окружности с некоторым радиусом.
Рис. 5. Пара векторов V1-V2 и предполагаемый центр окружности C.
4. Далее, в аккумуляторе ищутся центры, в которых дали отклик как минимум 4 пары векторов с различными направлениями, например, пары 0 и 180, 45 и 225, 90 и 270, 135 и 315. Близкие друг к другу центры объединяются. Если в одной точке аккумулятора найдено несколько центров окружностей с разными радиусами, то эти центры также объединяются и берется максимальный радиус.
Результат работы алгоритма поиска окружностей показан на Рис. 6.
Рис. 6. Локализованные окружности, соответствующие двум запрещающим знакам.
Максим Сачков
«Я предпочел бы „Опель ай“. Электронный ассистент „баварца“ напоминает чересчур заботливую бабушку, тщательно оберегающую от всякого рода напастей своего любимого внука, а его земляк из Рюссельсхайма — молодого папашу, который предоставляет ребенку достаточно свободы и подстраховывает лишь в опасных ситуациях. Мне больше по душе, когда человек полагается на себя и не ждет постоянно помощи от других. Хотя и таким людям в трудную минуту дельный совет пригодится».
Построение нейронной сети
Для создания нейронной сети будет использоваться библиотека Keras]. Чтобы классифицировать изображения по соответствующим категориям, мы построим модель CNN (сверточная нейронная сеть). CNN лучше всего подходит для целей классификации изображений.
Архитектура нашей модели:
- 2 Conv2D слоя (filter=32, kernel_size=(5,5), activation=”relu”)
- MaxPool2D слой ( pool_size=(2,2))
- Dropout слой (rate=0.25)
- 2 Conv2D слоя (filter=64, kernel_size=(3,3), activation=”relu”)
- MaxPool2D слой ( pool_size=(2,2))
- Dropout слой (rate=0.25)
- Flatten слой, чтобы сжать слои в 1 измерение
- Dense слой (500, activation=”relu”)
- Dropout слой (rate=0.5)
- Dense слой (43, activation=”softmax”)
class Net: @staticmethod def build(width, height, depth, classes): model = Sequential() inputShape = (height, width, depth) if K.image_data_format() == ‘channels_first’: inputShape = (depth, heigth, width) model = Sequential() model.add(Conv2D(filters=32, kernel_size=(5,5), activation=’relu’, input_shape=inputShape)) model.add(Conv2D(filters=32, kernel_size=(5,5), activation=’relu’)) model.add(MaxPool2D(pool_size=(2, 2))) model.add(Dropout(rate=0.25)) model.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’)) model.add(Conv2D(filters=64, kernel_size=(3, 3), activation=’relu’)) model.add(MaxPool2D(pool_size=(2, 2))) model.add(Dropout(rate=0.25)) model.add(Flatten()) model.add(Dense(500, activation=’relu’)) model.add(Dropout(rate=0.5)) model.add(Dense(classes, activation=’softmax’)) return model
Недостатки
У OMR имеются также некоторые недостатки и ограничения. Если пользователь хочет обработать большие объемы текста, то OMR усложняет собрание данных (Green, 2000). Возможен и пропуск данных в процессе сканирования, а также неправильно расположенные или непронумерованные страницы могут быть сканированы в неправильном порядке. Если предохранители не на месте, то страница может быть повторно сканирована, что приводит к дублированию и искажению данных (Bergeron, 1998).
OMR обеспечивает быстрый и точный сбор и вывод данных; однако он не удовлетворяет потребности каждого.
В результате широкого распространения и легкости в использовании OMR, экзамены единого образца преимущественно состоят из вопросов с множественным выбором, в результате изменяется характер того, что проверяется.
Источник: https://www.aclweb.org
Области применения
OMR имеет различные области, которые обеспечивают необходимый клиенту формат. Эти области включают:
- Множественный выбор, где есть несколько вариантов, но выбрать нужно только один, ABCDE, 12345, полностью не согласен, не согласен, воздержался, согласен, полностью согласен, и т.д.
- сетка, места для отметок или линии расположены в формате сетки, чтобы пользователь смог заполнить телефонный номер, имя, ID и так далее.
- добавить, подвести ответы под одно значение
- ответ «да» или «нет» касательно всех вопросов (булевый)
- ответ «да» или «нет» только на один (бинарный)