close

Вход

Забыли?

вход по аккаунту

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

код для вставки
МИНИСТЕРСТВО ОБРДЗОВДНИЯ И НДУКИ РОССIЙСКОЙ ФЕШРДIД4И
ФЕДЕРДЛЬНОЕ ГОСУДДР СТВЕННОЕ БЮ ДЖЕТНОЕ ОБРДЗОВДТЕЛЬНОЕ
учрЕжшниЕ высr r rЕго оБрАзовАниrI
(орловскЙ госуддрствЕнный уtлшЕрситЕт
имЕни и.с. тургЕнЕвА>
ВЫПУСКНАЯ КВАJIИФИКАI_РIОННАЯ РАБОТА
по направлению подготовки
09.04.03 Прикладная информатика
направленность (профиль) Корпоративные информачионные системы
шифр 16б081
Сryдента IýKaHoBa Максима Владимировича
технологии
институт приборостроения, автоматизации и информационных
Тема выпускной кваrrификационной работы
<<разработка
системы распознавания дорожных знаков, пешеходов и автомобилей
на дороге)
М.В. IýKaHoB
Сryдент
Руководитель
А.В. Чижов
Нормоконтроль
Н.А. Загородних
Зав. кафедрой
шформационных систем
/
-
Орёп 2018
/
в.н,волков
МИНИСТЕРСТВО ОБРАЗОВАНИrI И НАУКИ РОССIЙСКОЙ ФЕДЕРА[ИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИJI
(орловскLй госудАрствЕнныЙ уrшшЕрситЕт
ИМЕНИ И.С. ТУРГЕшВА)
Институт приборосц)оения, автоматизации и информационных технологий
Кафедра информационных систем
Направление 09.04.03 Прикладная информатика
Направленность (профиль) Корпоративные информационные системы
УТВЕРЖДАЮ:
Зав. кафедрой
/-/
<<
В.Н. Волков
20l!г.
/с>>
зАдАниЕ
на Выполнение выtý/скной квалификационной работы
студента IýKaHoBa Максима Владимировича
1 Тема
шифр 166081
ВКР <Разработка системы распознавания дорожных знаков, пешеходов
автомобилей на дороге>
Утверждена прикz}зом по университету от
<3
2 Срок сдачи студентом законченной работы
1>>
и
октябр я 20|7г. NЬ 2-307 4
<<25>>
июня 20l8г.
3 Исходные данные к работе
Теоретический матери€rл; информация о предметной области
4
Содержание пояснительной записки (перечень
подлежащих разработке
вопросов)
Описание и анализ предметной области
Определение спецификаций системы распознавания дорожных знаков, пешеходов
и автомобилей на дороге
Проектирование системы распознавания дорожных знаков, пешеходов и
автомобилей на дороге
Реа-пизация системы распознавания дорожных знаков, пешеходов и автомобилей
на дороге
Тестирование работы системы распознавания дорожных знаков, пеIцеходов и
автомобилей на дороге
5 Перечень демонстрационного матери€rла
Презентаuия, отображающ€ш
.Щата
выдачи задания
основные этапы и результаты выполнения
ВКР
(1б) апреля 2018 г.
Руководитель
А.В. Чижов
Задание принял к исполнению
М.В. IýKaHoB
КАJIЕНДАРНЫЙ IIJIАН
Наименование этапов работы
выполнение анаJIитической части
выпускной квалификационной работы
Формулировка требований к
проектируемой системе па основе
проведенньIх исследований
Проектирование системы распознalв€lния
образов
Описание основньгх z}лгоритмов
системы распознавания образов
Разработка и тестировtlние системы
распознавания образов
Оформление пояснительной записки и
графического материала
Сроки выполнения
этапов работы
Примечание
16.04.18 _ 28.04.18
з0.04.18 _ l2.05.18
14.05.18 _ 26.05.18
28.05.18 _ 06.06.18
07.0б.18 _ 1б.06.18
18.06.18 _ 25.06.18
Студент
М.В. Щуканов
Руководитель
А.В. Чижов
АННОТАЦИЯ
ВКР 93 с., 36 рис., 7 табл., 33 источников, 1 прил.
СИСТЕМА
РАСПОЗНАВАНИЯ
ОБРАЗОВ,
РАСПОЗНАВАНИЕ
ДОРОЖНЫХ ЗНАКОВ, РАСПОЗНАВАНИЕ ПЕШЕХОДОВ, РАСПОЗНАВАНИЕ
АВТОМОБИЛЕЙ.
Выпускная квалификационная работа посвящена разработке системы
распознавания дорожных знаков, пешеходов и автомобилей на дороге.
В первой главе проводится сравнительный анализ алгоритмов поиска
объектов на изображениях, выбирается подходящий алгоритм, рассматриваются
нейронные сети, предназначенные для распознавания изображений, описываются
дорожные знаки, используемые на территории России, проводится обзор аналогов
разрабатываемой системы.
Во второй главе разрабатываются требования к системе, определяются
варианты использования системы распознавания образов, разрабатывается
концептуальная модель предметной области системы, описывается поведение
системы распознавания дорожных знаков, пешеходов и автомобилей.
В третьей главе строится физическая диаграмма классов, диаграмма
деятельности и диаграмма компонентов системы распознавания дорожных знаков,
пешеходов и автомобилей, описывается архитектура нейронной сети и основные
алгоритмы системы.
В четвертой главе обосновывается выбор языка программирования,
рассматриваются особенности реализации системы распознавания дорожных
знаков, пешеходов и автомобилей.
В пятой главе проводится тестирование системы и делаются выводы.
В заключении подводятся итоги проделанной работы.
4
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
7
1 ОПИСАНИЕ И АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
9
1.1 Сравнительный анализ алгоритмов поиска объектов
9
1.1.1 Поиск объектов по цвету
10
1.1.2 Поиск объекта по форме
12
1.1.3 Алгоритм Виолы-Джонса
14
1.2 Выбор подходящего алгоритма поиска объектов для реализации
16
1.3 Идентификация дорожного знака с помощью нейронных сетей
17
1.3.1 Искусственные нейронные сети
17
1.3.2 Сверточные нейронные сети
19
1.4 Дорожные знаки, используемые на территории Российской Федерации
21
1.5 Обзор существующих систем распознавания дорожных знаков
24
1.5.1 Обобщенная архитектура существующих систем
24
1.5.2 RoadAR видеорегистратор
25
1.5.3 Opel Eye в автомобилях Opel
26
1.5.4 Speed Limit Assist в автомобилях Mercedes-Benz
28
1.5.5 Road Sign Information в автомобилях Volvo
29
1.5.6 ConnectedDrive в автомобилях BMW
30
1.5.7 Система распознавания дорожных знаков в автомобилях Audi
31
1.5.8 Система распознавания дорожных знаков в автомобилях Volkswagen
32
1.5.9 Система распознавания дорожных знаков от лаборатории компьютерной
графики и мультимедиа МГУ им. Ломоносова
33
1.6 Сравнение технических характеристик существующих систем распознавания
дорожных знаков
2
ОПРЕДЕЛЕНИЕ
34
СПЕЦИФИКАЦИЙ
СИСТЕМЫ
РАСПОЗНАВАНИЯ
ДОРОЖНЫХ ЗНАКОВ, ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
36
2.1 Постановка задачи разработки системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге
36
5
2.2 Моделирование системы распознавания дорожных знаков, пешеходов и
автомобилей на дороге с помощью диаграммы прецедентов
2.3
Построение
концептуальной
модели
предметной
37
области
системы
распознавания дорожных знаков, пешеходов и автомобилей на дороге
39
2.4 Описание поведения системы распознавания дорожных знаков, пешеходов и
автомобилей на дороге с помощью диаграммы состояний
40
3 ПРОЕКТИРОВАНИЕ СИСТЕМЫ РАСПОЗНАВАНИЯ ДОРОЖНЫХ ЗНАКОВ,
ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
42
3.1 Физическая диаграмма классов системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге
3.2
Диаграмма
деятельности
системы
42
распознавания
дорожных
знаков,
пешеходов и автомобилей на дороге
44
3.3 Диаграмма компонентов системы распознавания дорожных знаков, пешеходов
и автомобилей на дороге
46
3.4 Архитектура нейронной сети, используемая для классификации дорожных
знаков
47
3.5 Основные алгоритмы системы распознавания дорожных знаков, пешеходов и
автомобилей на дороге
48
3.5.1 Алгоритм загрузки нейронной сети и разбиения видеопотока на кадры
49
3.5.2 Алгоритм поиска автомобилей и пешеходов
51
3.5.3 Алгоритма поиска и классификации дорожных знаков
51
3.5.4 Алгоритм обучения нейронной сети
53
4 РЕАЛИЗАЦИЯ СИСТЕМЫ РАСПОЗНАВАНИЯ ДОРОЖНЫХ ЗНАКОВ,
ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
56
4.1 Обоснование языка программирования
56
4.2 Реализация работы алгоритма обучения нейронной сети
57
4.3 Реализация работы с видеопотоком и загрузкой нейронной сети
62
4.4 Реализация работы функций поиска пешеходов и автомобилей
68
4.5 Реализация работы функций поиска и классификации дорожных знаков
69
6
5 ТЕСТИРОВАНИЕ РАБОТЫ СИСТЕМЫ РАСПОЗНАВАНИЯ ДОРОЖНЫХ
ЗНАКОВ, ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
73
ЗАКЛЮЧЕНИЕ
76
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
77
ПРИЛОЖЕНИЕ А (обязательное) Листинг программы
81
УДОСТОВЕРЯЮЩИЙ ЛИСТ
91
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
92
7
ВВЕДЕНИЕ
С каждым годом в мире увеличивается количество автомобилей,
следовательно, возрастает число дорожно-транспортных происшествий. Поэтому
люди стали уделять больше внимания автомобильным системам, занимающимся
интеллектуальной обработкой информации на дороге. Если будет создан новый
универсальный способ распознавания объектов на пути движения автомобиля, то
это облегчит водителю задачу отслеживания ситуаций на дороге.
Дорожные знаки сделаны таким образом, чтобы они были максимально
заметны и читаемы, а значит дорожный знак является подходящим объектом для
автоматического распознавания. Также все возможные виды знаков находятся в
открытом доступе начиная от изображений в интернете, заканчивая знаками на
проезжей части. Отсюда следует, что можно собрать большую базу знаков
дорожного движения в различных условиях освещённости, недостаточной
видимости и т.д. Однако, ситуации на дорогах зависят не только от знаков, но и от
других факторов, например, идущий вдоль дороги пешеход или выезжающий изза угла автомобиль. Вследствие этого, в данной работе будет рассматриваться
задача распознавании дорожных знаков, пешеходов и автомобилей.
В настоящее время существует множество систем, использующих
алгоритмы, опирающиеся на машинное обучение и требующие больших баз
данных с обучающей выборкой для повышения точности распознавания объекта
на проезжей части в различных условиях. Стоит отметить, что такие системы
поставляются в комплекте с приобретаемым автомобилем и являются закрытыми,
то есть без возможности модификации. К тому же функционал большинства
систем ограничивается распознаванием только небольшой группы знаков, а
эффективность снижается в реальных условиях эксплуатации.
Описанная
ранее
ситуация
обосновывает
актуальность
работы,
направленной на устранение отмеченных проблем.
Объектом исследования является распознавание дорожных знаков,
пешеходов и автомобилей, а предметом – алгоритмы и методы, позволяющие
проводить распознавание и обработку видеопотока в реальном времени.
8
Цель данной научно-исследовательской работы заключается в разработке
системы, распознавания знаков дорожного движения, пешеходов и автомобилей с
высокой степенью устойчивости к проекционным искажениям.
Для достижения поставленной цели необходимо решить следующие
задачи:
1. Изучить популярные алгоритмы поиска объектов на изображении.
2. Изучить методики классификации объектов.
3. Выбрать и доработать оптимальный алгоритм поиска объектов на
изображениях.
4. Определить спецификации системы.
5. Спроектировать систему.
6. Реализовать систему распознавания дорожных знаков, пешеходов и
автомобилей на дороге.
9
1 ОПИСАНИЕ И АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
Теория распознавания образов – раздел информатики, разрабатывающий
основы и методы классификации и идентификации объектов, процессов,
сигналов, ситуаций, явлений и т. п., которые характеризуются конечным набором
некоторых свойств и признаков.
Вопросы, связанные с распознаванием объектов, могут решаться в
различных отраслях современного мира. Также они могут отличаться по уровню
точности и сложности.
Применяются различные алгоритмы при решении задач распознавания
объектов, среди которых можно отметить: сравнение с шаблоном, дескрипторы
локальных особенностей, алгоритм Виолы-Джонса, нейронные сети и т.д.
Данная научная область является актуальной и быстроразвивающейся на
сегодняшний день, однако существуют не решенные вопросы, которые влияют на
эффективность работы современных алгоритмов:
− низкое качество изображений;
− изображения со сложным фоном;
− различный
ракурс
объектов
на
изображениях,
способствующий
геометрическим и фотометрическим искажениям;
− множество искомых объектов на изображении, количество которых
заранее не известно.
Решить данные вопросы возможно при помощи дополнительных подходов
предобработки, что увеличивает вычислительную сложность системы. Таким
образом, можно сделать вывод, что до сих пор существует потребность в
реализации алгоритмов, связанных с поиском объектов.
1.1 Сравнительный анализ алгоритмов поиска объектов
Рассмотрим три часто встречаемых алгоритма поиска объектов на
изображениях.
Опишем достоинства и недостатки выбранных алгоритмов.
10
Определим какой из алгоритмов лучше подойдет для распознавания дорожных
знаков, а какой для поиска автомобилей и пешеходов.
1.1.1 Поиск объектов по цвету
Основной принцип алгоритма заключается в поиске объекта по его цвету.
Отсюда можно сделать следующий вывод, что данный подход будет наиболее
актуален для нахождения дорожных знаков, так как знаки имеют небольшую
палитру, а именно большая часть дорожных знаков двух цветов: красного и
синего, только оставшееся небольшое количество знаков имеет другие цвета. Что
касается людей и автомобилей, то они охватывают всю цветовую палитру,
благодаря своему разнообразию, будь то цвет различных частей одежды или
кузова авто. Поэтому этот алгоритм поиска труднореализуем для данного типа
объектов.
Следовательно, в рамках нашей задачи, целесообразнее всего рассматривать
поиск объектов по цвету только для дорожных знаков. Далее рассмотрим
последовательность действий алгоритма для выявления его сильных и слабых
сторон.
На начальном этапе берется изображение, представленное в популярном
цветовом пространстве RGB. Предполагается, что на нем есть изображенные
дорожные знаки. Из этого следует, что для поиска знака на кадре по цвету
требуется обрабатывать три составляющие, а именно матрицы размером M на N
для каждого цвета - MxNx3, а значит будет требоваться больше вычислительных
мощностей.
Также стоит отметить, изменение одной из составляющих цвета
влияет на допустимые значения других составляющих (изменение G влияет на
допустимые значения R и B).
Следовательно,
целесообразно
будет
использовать
другое
цветовое
пространство – HSV. В нем эффективность выделения нужного цвета выше по
сравнению с пространством RGB.
11
HSV (Hue, Saturation, Value — тон, насыщенность, значение) — цветовая
модель, в которой [1]:
1. Hue — цветовой тон, (например, красный, зелёный или синеголубой).
Варьируется в пределах «0-360°», однако иногда приводится к диапазону «0-100»
или «0-1».
2. Saturation — насыщенность. Варьируется в пределах «0-100» или «0-1».
Чем больше этот параметр, тем «чище» цвет, поэтому этот параметр иногда
называют чистотой цвета. А чем ближе этот параметр к нулю, тем ближе цвет к
нейтральному серому.
3. Value (значение цвета). Также задаётся в пределах «0-100» и «0-1».
Следует отметить, что устройство модели HSV является наиболее близким к
человеческому восприятию цветов.
Для преобразования изображения из цветовой модели RGB в модель HSV
используют следующие формулы[3]:
 ← (, , ),
(1)
−min⁡(,,)
, ⁡ ≠ 0

←{
,
0,⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡⁡ℎ
60(−)
 ← 120 +
{240 +
, ⁡ = 

60(−)

60(−)

(2)
, ⁡ =  ,
(3)
, ⁡ = 
Если⁡ < 0, то⁡ =  + 360.
(4)
Теперь зная диапазоны значений HSV цвета знака при разных видах
освещениях (день, вечер, ночь) мы сможем с высокой точностью обнаружить знак
и снизить нагрузку на устройство, производящее вычисления. Например, изучив
данные из интернета видим, что значения оттенков красного цвета на знаке
находится в диапазонах, представленных в таблице 1.
12
Таблица 1 – Диапазоны красного цвета
HSV
Ясно
300 < H < 360
0.7 < S < 1
0.5 < V < 1
Дождь
300 < H < 360
0.7 < S < 1
0.5 < V < 1
Вечер
300 < H < 360
0.7 < S < 1
0.5 < V < 1
Ночь
22 < H < 360
0.7 < S < 1
0.5 < V < 1
Поиск осуществляется проверкой каждого пикселя на изображении, путем
подстановки его значения в промежутки из таблицы. Если условия соблюдаются,
то пикселю присваивается белый цвет, иначе черный. По завершении проверки
всех пикселей на изображении останутся только контуры дорожных знаков.
Среди достоинств можно выделить следующее:
− простота реализации;
− низкая нагрузка на устройство, с помощью которого производят
вычисления;
− устойчивость к смене погодных условий;
− адаптация алгоритма под все существующие классы дорожных знаков.
Среди недостатков выделим:
− обнаружение всех дорожных знаков на изображении, подходящих под
определенный цвет, даже если этого не требуется;
− обнаружение других объектов, цвет которых схож с цветом дорожных
знаков;
− выгорание (износ) или загрязнение покрытия дорожного знака могут
повлиять на результат работы.
1.1.2 Поиск объекта по форме
Данный алгоритм, как и прошлый будет наиболее актуален для дорожных
знаков, благодаря форме самих знаков. Она состоит из простых примитивов:
− круг;
− треугольник;
− квадрат;
− прямоугольник.
13
Если рассматривать автомобиль или человека, то соотнести их с какой-либо
геометрической фигурой будет достаточно сложно, тем более объект может быть
повернут к нам любой стороной, что сделает задачу сопоставления с
геометрической фигурой еще сложнее. Следовательно, будем рассматривать этот
подход относительно дорожных знаков.
На начальном этапе получаем изображение и подготавливаем его.
Подготовка заключается в переводе изображения из цветного в черно-белый
формат и выделении границы объектов (с данной задачей хорошо справляется
оператор Кэнни). Далее осуществляется поиск всех замкнутых границ – контуров,
чтобы среди них найти контуры, которые напоминают фигуру.
На завершающем этапе происходит выбор контуров, удовлетворяющих
определенным условиям. Анализируется площадь и периметр контура. Зная эти
параметры, мы сможем определить компактность, т.е. определить схожесть
объекта с геометрической фигурой (например, компактность круга равна 0,79).
Компактность вычисляется по следующей формуле:
=

2
,
(5)
где C – компактность;
S – площадь;
P – периметр.
Если значение компактности находится в допустимых пределах для
требуемой геометрической фигуры, то проводится дополнительная проверка на
совпадение моментов контуров, другими словами, сравнивается контур с
контуром-шаблоном
и
находится
уровень
их
отличия.
По
результатам
исследований, можно сказать, что максимальное сходство достигается при
значениях функции меньше 0,06-0,08.
Отметим, что весь необходимый набор инструментов для реализации
алгоритма есть в библиотеке компьютерного зрения OpenCV.
К достоинствам данного подхода можно отнести следующее:
1. Простота реализации.
14
2. Детектор границ Кэнни имеет эффект сглаживания для удаления шума.
Это позволяет определить контур с высокой точностью и исключить обнаружение
ложных границ в тех местах, где объекты отсутствуют.
К недостаткам отнесем:
− схожесть с геометрическими фигурами не только дорожных знаков, но и
других объектов, которые могут встретиться на пути следования автомобиля;
− неустойчивость к изменению погодных условий, возможно искажение
контура объекта.
1.1.3 Алгоритм Виолы-Джонса
Метод Виолы-Джонса – один из наиболее популярных алгоритмов, он
позволяет с высокой скоростью найти области расположения объектов на
изображениях и сразу же определить к какому классу принадлежит искомый
объект. Главная задача алгоритма заключается в обнаружении лиц, однако, он
используется при распознавании различных классов объектов. Следовательно, он
отлично подойдет, как для дорожных знаков, так и для автомобилей с
пешеходами. Метод имеет множество реализаций, не исключение библиотека
компьютерного зрения OpenCV.
Основная идея при создании алгоритма Виолы-Джонса для распознавания
объектов является выделение признаков (локальных особенностей) изображения и
последующего обучения алгоритма на них.
Локальные
особенности,
используемые
алгоритмом,
выполняют
суммирование пикселей из прямоугольных областей изображения. Признаки,
использованные Виолой и Джонсом, содержат более одной прямоугольной
области. На рисунке 1 показаны примеры прямоугольных признаков, которые
используются в стандартном методе Виолы-Джонса и называются примитивами
Хаара.
15
Рисунок 1 – Типы прямоугольных признаков
Искомые значения прямоугольных признаков вычисляются вычитанием
суммы пикселей в белых прямоугольниках из суммы пикселей в черных
прямоугольниках. Вопреки чувствительности прямоугольных признаков к
горизонтальным и вертикальным особенностям изображения, они весьма
примитивны, и результат их поиска груб. Тем не менее, если изображение
сохраняется в интегральном формате, т.е. во всех пикселях изображения хранится
сумма всех соседних пикселей, находящихся выше и слева, проверка признака на
определенной
области
проводится
за
константное
время,
что
является
преимуществом в сравнении с более точными вариантами. Каждая область в
используемых признаках всегда граничит с другими прямоугольными областями,
вследствие этого расчет признака с двумя прямоугольниками состоит из шести
обращений в интегральный массив, а для признака с четырьмя прямоугольниками
из девяти обращений.
Можно выделить следующие достоинства:
− возможно обнаружение достаточно большого количества объектов на
исходном изображении;
16
− высокая скорость обнаружения благодаря использованию простых
классификаторов объектов во время работы алгоритма поиска;
− возможность обучения алгоритма на нахождение любых объектов;
− возможен не только поиск дорожных знаков на исходном изображении,
но и их распознавание.
Среди недостатков выделяется:
1. Сложность реализации.
2. Продолжительное время обучения. Во время обучения алгоритму
требуется проанализировать большое количество изображений, на которых есть
искомый объект (примеры) и на которых нет искомого объекта (контрпримеры),
при этом изображения без объекта должны быть сделаны в той же среде, что и
примеры с объектом.
3. Объемное количество близко расположенных друг к другу результатов
из-за применения различных масштабов.
1.2 Выбор подходящего алгоритма поиска объектов для реализации
Проанализировав информацию, полученную в ходе анализа, пришли к
выводу, что для решения задачи поиска дорожных знаков целесообразнее всего
использовать связку из двух алгоритмов, а именно поиск по цвету и поиск по
форме, так как они легко реализуются и взаимодополняют друг друга, исключая
недостатки каждого из алгоритмов.
В качестве основного алгоритма поиска следует использовать поиск по
цвету. После обнаружения всех объектов подходящего цвета можно отсеять
только нужные, в этом может помочь второй алгоритм. Он выберет только те
объекты, которые будут удовлетворять интересующей нас форме, то есть форме
дорожного знака.
Следует отметить, что поиск по цвету в качестве результата выдает чернобелое изображение, на котором изображены контуры дорожных знаков с четко
выраженной формой, а, следовательно, второму алгоритму требуется только
17
сопоставить формы найденных объектов с геометрическими фигурами и вырезать
области, соответствующие условиям выборки, с исходного изображения.
В качестве распознавания класса дорожного знака можно использовать
нейронную сеть, ее обучение сделать проще, чем алгоритм Виолы-Джонса, так
как нейронная сеть требует лишь набор изображений, разбитый на классы.
Что касается распознавания автомобилей и пешеходов, то в этом может
помочь только метод Виолы-Джонса, так как он является универсальным, то есть
с его помощью можно найти любой объект, а из-за того, что автомобили и
пешеходы имеют сложную форму и множество цветов этот метод является
наилучшим вариантом.
В итоге данное сочетание поможет исключить некоторые недостатки
каждого из алгоритмов с минимальной потерей производительности.
1.3 Идентификация дорожного знака с помощью нейронных сетей
1.3.1 Искусственные нейронные сети
В настоящий момент существует огромное количество нейросетевых
структур, созданных для решения задач распознавания объектов на изображениях.
В результате решения данного типа задач часто возникают трудности, связанные
с образами объектов, которые подвержены разного рода искажениям:
− шум;
− изменение размера;
− повороты;
− смещения.
Во многих случаях данную сложность можно исправить при помощи
выбора правильной нейросетевой архитектуры и способа ее обучения. Исследовав
большое количество работ, связанных с этой проблемой, можно сделать вывод,
что до сих пор не существует такой модели, которая была бы не чувствительна ко
всем четырем видам искажений, перечисленным выше.
18
Искусственная нейронная сеть — математическая модель, а также её
программное или аппаратное воплощение, построенная по принципу организации
и функционирования биологических нейронных сетей — сетей нервных клеток
живого организма. Это понятие возникло при изучении процессов, протекающих
в мозге, и при попытке смоделировать эти процессы. Первой такой попыткой
были нейронные сети У. Маккалока и У. Питтса. После разработки алгоритмов
обучения получаемые модели стали использовать в практических целях: в задачах
прогнозирования, для распознавания образов, в задачах управления и др. На
рисунке 2 приведен пример архитектуры нейронной сети.
Рисунок 2 – Архитектура многослойной нейронной сети
Достоинства искусственных нейронных сетей:
− высокие классифицирующие способности;
− высокая скорость работы;
− обучение по базе данных эталонных изображений.
Среди недостатков можно отметить:
− трудоемкий процесс выбора структуры нейронной сети;
− большое количество слоёв, нейронов и весовых коэффициентов;
− сложный процесс обучения, вплоть до переобучения;
19
− не
учитываемая
взаимосвязь
пространственно-связанных
областей
изображения.
Трудоемкость заключается в том, что на полученных кадрах дорожные
знаки могут быть подвержены искажениям и шумовым помехам, а также знак
может быть немного повернут, запачкан грязью или деформирован. Обычная
искусственная нейронная сеть очень чувствительная к подобным искажениям. В
дополнении следует сказать, что кадры, полученные с камеры, состоят из
большого количества пикселей, поэтому возрастает размер искусственной
нейронной сети, а, следовательно, и всех ее составляющих. Отсюда увеличивается
ресурсоемкость, сложность вычислений при обучении и время работы.
Проанализировав
все
существующие
недостатки
классических
искусственных нейронных сетей следует использовать сверточные нейронные
сети. Они имеют ряд преимуществ:
− устойчивость к искажению входного сигнала;
− устойчивость к изменению масштаба;
− устойчивость к смещениям;
− устойчивость к поворотам и др.
1.3.2 Сверточные нейронные сети
Сверточная нейронная сеть (англ. convolutional neural network, CNN) —
специальная архитектура искусственных нейронных сетей, предложенная Яном
Лекуном и нацеленная на эффективное распознавание изображений, входит в
состав технологий глубокого обучения (англ. deep leaning). Эта технология
построена по аналогии с принципами работы зрительной коры головного мозга, в
которой были открыты так называемые простые клетки, реагирующие на прямые
линии под разными углами, и сложные клетки, реакция которых связана с
активацией определённого набора простых клеток. Таким образом, идея
сверточных нейронных сетей заключается в чередовании сверточных слоев (англ.
convolution layers) и слоёв подвыборки (англ. subsampling layers). Архитектура
данной сети представлена на рисунке 3.
20
Рисунок 3 – Архитектура сверточной нейронной сети
Важным моментом в изучении сверточных нейронных сетей является
определения «разделяемых» весов, т.е. часть нейронов любого изучаемого слоя
нейронной сети может использовать одинаковые весовые коэффициенты.
Нейроны, которые использую одинаковые веса, объединяются в карты признаков,
а каждый нейрон, входящий в карты признаков связан с частью нейронов
предыдущего слоя. Во время вычисления сети каждый нейрон выполняет свертку
определенной области предыдущего слоя, который определяется множеством
нейронов, связанных с данным нейроном.
Слои сверточной нейронной сети, построенные по данному принципу,
называются сверточными слоями. Помимо, сверточных слоев в сверточной
нейронной сети могут быть слои подвыборки (выполняющие функции
уменьшения размерности пространства карт признаков) и полносвязные слои
(выходной слой, как правило, всегда полносвязный). Все три вида слоев могут
чередоваться в произвольном порядке, что позволяет составлять карты признаков
из карт признаков, а это на практике означает способность распознавания
сложных иерархий признаков.
Принцип работы сверточной нейронной сети в задаче распознавания
дорожных знаков представлен на рисунке 4.
21
Рисунок 4 – Распознавание дорожного знака при помощи сверточной нейронной
сети
Главным недостатком сверточной нейронной сети является подбор
количественных параметров строго под одну поставленную задачу после ряда
экспериментов, проведенных для проверки различных конфигураций.
1.4 Дорожные знаки, используемые на территории Российской
Федерации
В ПДД России на настоящий момент знаки разделены на 8 групп, в каждой
из которых описывается отдельный тип:
1. Предупреждающие знаки.
2. Знаки приоритета.
3. Запрещающие знаки.
4. Предписывающие знаки.
5. Знаки особых предписаний.
6. Информационные знаки.
7. Знаки сервиса.
8. Знаки дополнительной информации (таблички).
Группы организованы таким образом, чтобы к каждой относились знаки,
схожие по смыслу.
22
Запрещающие
дорожные
знаки
запрещают
водителю
выполнять
определенные действия. Наиболее часто из этой группы на дорогах общего
пользования встречаются знаки ограничения скорости, запрета обгона, въезда,
поворота, стоянки и остановки (рисунок 5).
Рисунок 5 – Запрещающие дорожные знаки
Предупреждающие дорожные знаки являются самыми полезными для
водителей. Так как эти знаки ничего не запрещают и никак не ограничивают, их
требования нельзя нарушить. Основная функция этих знаков состоит в том, чтобы
предупреждать водителей о возможных опасностях и предостерегать их от
дорожно-транспортных происшествий.
Обычно предупреждающие знаки устанавливаются на опасных участках
дорог и их достаточно просто отличить от всех остальных знаков. В основе
большей части предупреждающих знаков лежит красный треугольник, который
хорошо виден издалека. Исключение составляют лишь знаки приближения к
железнодорожному переезду и знаки «направление поворота» (рисунок 6).
Рисунок 6 – Знаки приближения к железнодорожному переезду и знаки
«направление поворота»
Все остальные предупреждающие знаки выполнены в виде треугольников
(рисунок 7).
23
Рисунок 7 – Знак «опасный поворот»
Предписывающие
дорожные
знаки
используются
для
того,
чтобы
показывать водителям единственно разрешенное действие, будь то проезд только
прямо, или только поворот налево (но в этом случае разрешен и разворот). Такие
знаки позволяют выполнять только определенные действия только определенным
участникам дорожного движения (рисунок 8).
Рисунок 8 – дорожный знак «велосипедная дорожка» или «полоса для
велосипедистов»
Знаки приоритета, в отличие от предупреждающих знаков, определяют
очередность проезда перекрестков, пересечения отдельных проезжих частей,
узких участков дорог.
Знаки особых предписаний могут сочетать элементы как предписывающих,
так и запрещающих знаков. Например, знак особого предписания 5.19.1
«пешеходный переход» одновременно ограничивает скорость на данном участке
дороги и разрешает переход в зоне расположения знака для пешеходов (рисунок
9).
Рисунок 9 – Знаки «пешеходный переход» и «зона с ограничением
максимальной скорости»
24
Знаки
дополнительной
информации
используются
для
разъяснения
значения дорожных знаков из других разделов. Например, знак «влажное
покрытие» информирует о том, что информация, подаваемая другим знаком,
актуальная только в период времени, когда поверхность дороги мокрая (рисунок
10).
Рисунок 10 – Табличка «влажное покрытие»
Информационные знаки и знаки сервиса можно объединить в общую
группу (рисунок 11).
Рисунок 11 – Информационные знаки
Из всех вышеперечисленных групп знаков разумнее всего распознавать
первые пять, т.к. именно эти знаки оказывают существенное влияние на
дорожную ситуацию. В то же время, из первых пяти групп наибольшую важность
представляют запрещающие дорожные знаки, как, например, знаки ограничения
скорости или запрета обгона. Именно игнорирование запрещающих дорожных
знаков, согласно статистике, является самой частой причиной возникновения
ДТП.
1.5 Обзор существующих систем распознавания дорожных знаков
1.5.1 Обобщенная архитектура существующих систем
Рассматривая системы распознавания дорожных знаков можно выделить
следующие аппаратные и программные компоненты:
− камера;
25
− модуль захвата изображения с камеры;
− модуль обнаружения требуемых объектов;
− модуль классификации обнаруженных объектов;
− база данных эталонных образцов.
На рисунке 12 изображена обобщённая архитектура системы распознавания
дорожных знаков.
Рисунок 12 – Обобщенная архитектура
Камера передает изображения на вход систем. Далее алгоритм, заложенный
в модуль обнаружения, находит дорожный знак на изображении и затем
найденный знак идентифицируется модулем распознавания.
База данных играет роль хранилища эталонных образцов изображений
дорожных знаков. Чем больше вариантов фото одного дорожного знака хранится
в базе, тем выше шанс правильного распознавания.
1.5.2 RoadAR видеорегистратор
Мобильное приложение RoadAR выполняет множество функций, а именно:
− функция видеорегистрации;
− функция распознавания дорожных знаков;
− функция предупреждения о зоне действия знака;
− функция навигатора.
На рисунке 13 представлен скриншот работающей программы.
26
Рисунок 13 – Скриншот работающей программы
В функционал программы встроена возможность распознавать следующие
типы дорожных знаков:
− знаки ограничения скорости;
− пешеходный переход и искусственная неровность;
− остановка и стоянка запрещена.
В планах разработчика добавление функций распознавания других типов
знаков в новых версиях программы.
1.5.3 Opel Eye в автомобилях Opel
Система распознавания дорожных знаков работает в сочетании с
фронтальной
камерой
Opel
Eye,
обеспечивающей
высокую
скорость
распознавания знаков и обладающей рядом дополнительных функций. В камере
используется
высокомощный
процессор,
обеспечивающий
одновременное
выполнение многочисленных операций. Следует отметить, что данная система
работает на скорости выше 60 км/ч.
Система Opel Eye работает по следующему принципу: между лобовым
стеклом автомобиля и зеркалом заднего вида расположена видеокамера с
высоким разрешением и широким углом обзора. Эта камера постоянно получает
информацию о том, что находится впереди автомобиля. Видеокамера способна
27
передавать до тридцати кадров в секунду на два процессора обработки сигналов.
В памяти системы заложена база дорожных знаков. Если изображение,
передаваемое с камеры, соответствует какому-либо знаку, заложенному в базу
данных, то система выводит на панель приборов соответствующий знак.
На рисунке 14 изображена панель приборов авто на которой приведен
пример результата работы системы распознавания знаков Opel Eye.
Рисунок 14 – Результат распознавания знаков системой Opel Eye
Система способна распознавать следующие типы знаков на дороге:
− знаки ограничения скорости;
− знак обгон запрещен.
Следует отметить, что точность распознавания может снизится из-за
следующих факторов:
− угол наклона знака;
− загрязнённость знака или камеры;
− перекрытие знака.
28
1.5.4 Speed Limit Assist в автомобилях Mercedes-Benz
Камера, установленная на лобовом стекле, распознает дорожные знаки
ограничения скорости по пути следования автомобиля и напоминает водителю
при помощи индикации на дисплее об актуальном ограничении скорости – пока
ограничение не перестает действовать.
Система способна отличать, для какого вида транспорта предназначен знак:
она будет "отсеивать" скоростные ограничения, установленные для грузовиков.
На рисунке 15 изображена панель приборов авто на которой приведен
пример результата работы системы распознавания знаков Speed Limit Assist.
Рисунок 15 – Результат распознавания знаков системой Speed Limit Assist
Данная система способна распознавать только знаки ограничения скорости,
но как говорилось ранее система отсеивает знаки, установленные для грузовых
автомобилей.
Точность распознавания знака снижается при:
− изменении угла наклона знака;
− загрязнённости знака;
29
− перекрытии знака.
1.5.5 Road Sign Information в автомобилях Volvo
Система распознает знак и на дисплей выводится соответствующий символ.
Благодаря системе водитель получает информацию о действующем ограничении
скорости или о разрешении, или запрете обгона. Распознанный знак будет на
дисплее до тех пор, пока камера не обнаружит очередной знак на дороге.
При обнаружении знака система передаст его изображение на дисплей
ветрового стекла или спидометр, а также (при настройке данной функции) будет
предупреждать вас трехкратным миганием о каком-либо знаке. На рисунке 16
представлен пример работы системы Road Sign Information.
Рисунок 16 – Результат распознавания знаков системой Road Sign Information
Встроенная фронтальная камера обнаруживает самые важные дорожные
знаки:
− знак «Обгон запрещен»;
− знак «Въезд запрещен»;
− знак «Конец всех ограничений»;
− знаки «Автомагистраль» и «Конец автомагистрали»;
30
− информационные знаки (только английский язык);
− знаки ограничения скорости.
Точность распознавания сильно снижается при влиянии следующего ряда
факторов:
− угол наклона знака;
− угол поворота знака;
− загрязнённость знака;
− перекрытие знака.
1.5.6 ConnectedDrive в автомобилях BMW
Информация,
фиксируемая
камерой,
сопоставляется
с
данными,
поступающими от других устройств, например, от навигационной системы. Лишь
после
этого
на
приборной
панели
отображается
соответствующее
предупреждение о знаке. За счет использования камеры обеспечивается
возможность распознавания дополнительных знаков, например, тех, которые
действуют лишь при мокрой дороге. Отображение продолжается до момента
смены либо отмены ограничений. Система временно хранит все данные,
благодаря чему, возобновив поездку после короткого перерыва, вы вновь увидите
знаки запрета обгона и ограничения скорости, действовавшие на момент поездки.
Результат работы данной системы представлен на рисунке 17.
Система распознавания дорожных знаков включает в себя функции:
−
информирование о запрете обгона;
−
распознавание знаков ограничения скорости.
Снижение точности наблюдается при воздействующих факторах, указанных
в предыдущих системах.
31
Рисунок 17 – Результат распознавания знаков системой ConnectedDrive
1.5.7 Система распознавания дорожных знаков в автомобилях Audi
С помощью видеокамеры, система распознает дорожный знак и дублирует
его на экране панели приборов или выводит проекцию на лобовое стекло, в
зависимости от устанавливаемой модели. Распознанный дорожный знак будет
отображаться до тех пор, пока ограничение не будет снято или не будет заменено
другим дорожным знаком.
Если данная опция устанавливается в комплекте с MMI 3G plus, система
распознавания дорожных знаков будет взаимодействовать с навигационными
данными, использовать информацию о знаках ограничения скорости карт
навигации. Это позволяет получить информацию об установленном знаке даже в
случае, если последний не будет определен видеокамерой. Рисунок 18 показывает
работу системы в автомобилях Audi.
32
Рисунок 18 – Результат распознавания знаков системой в автомобилях Audi
Система распознавания дорожных знаков распознает:
− скоростные
ограничения,
действующие
для
определенного
вида
транспорта;
− знаки отмены ограничений скоростного режима.
Снижение точности наблюдается при воздействующих факторах, указанных
в предыдущих системах.
1.5.8 Система распознавания дорожных знаков в автомобилях Volkswagen
Система распознавания дорожных знаков в Volkswagen показывает
водителю, насколько быстро нужно ехать, и она помогает адаптировать скорость
под дорожные знаки. За зеркалом заднего вида установлена камера, которую и
использует
система.
Эта
камера
сканирует
дорогу
впереди,
находя
соответствующие дорожные знаки, и подсказывает водителю, с какой скоростью
нужно ехать. Система распознавания дорожных знаков адаптируется к погодным
условиям. Поэтому в случае дождя система будет предлагать скорость, меньше
обычной. Пример распознанного знака с помощью системы показан на рисунке
19. Система способна распознавать только знаки ограничения скорости.
33
Рисунок 19 – Результат распознавания знаков системой в автомобилях
Volkswagen
1.5.9 Система распознавания дорожных знаков от лаборатории
компьютерной графики и мультимедиа МГУ им. Ломоносова
Лаборатория проводит исследования в области компьютерного зрения.
Поэтому ею была разработана система, выделяющая и распознающая дорожные
знаки из видео. В группе данной лаборатории ведутся исследования в рамках
задачи по следующим направлениям:
− высокоскоростное выделение дорожных знаков;
− распознавание знаков с помощью многослойных нейронных сетей;
− построение
синтетических
коллекций
изображений
для
обучения
алгоритмов.
За основу системы взят алгоритм Виолы-Джонса. Система протестирована
на общедоступной базе, состоящей из более четырех тысяч изображений
бельгийских знаков. Как сообщает лаборатория, точность в распознавании
составляет около 96%. Пример работы представлен на рисунке 20.
34
Рисунок 20 – Результат работы системы
1.6 Сравнение технических характеристик существующих систем
распознавания дорожных знаков
В таблице 2 приведены сравнительные характеристики программных
продуктов, распознающие дорожные знаки.
Из таблицы видно, что отдельно существующие программные продукты
встречаются редко и представлены несколькими разработчиками. Большая часть
комплексов
распознавания
производителя
автомобиля.
входит
только
Следовательно,
в
их
состав
заводских
коммерческая
опций
стоимость
становится довольно высокой. Во время испытаний с высокой точностью
распознаются лишь чистые знаки с достаточной контрастностью. Используемые
алгоритмы поиска и распознавания дорожных знаков не публикуются в
коммерческих системах. Так же отметим тот факт, что системы распознают лишь
дорожные знаки, в них отсутствует распознавание других объектов на пути
следования автомобиля.
Таблица 2 – Сравнительные характеристики систем
Система
Audi
Система
Volkswagen
Лаборатория
комп.
графики
и
мультимедиа
МГУ им. Ломоносова
Распознавание
знаков
ограничения
скорости
Распознавание
прочих
запрещающих
знаков
+
+
+
+
+
+
+
+
+
-
+
+
+
+
Распознавание
пешеходов
-
-
-
-
-
-
-
Распознавание
автомобилей
-
-
-
-
-
-
-
35
RoadAR OpelEye Speed Road sign
limit
information
assist
36
2 ОПРЕДЕЛЕНИЕ СПЕЦИФИКАЦИЙ СИСТЕМЫ
РАСПОЗНАВАНИЯ ДОРОЖНЫХ ЗНАКОВ, ПЕШЕХОДОВ И
АВТОМОБИЛЕЙ НА ДОРОГЕ
2.1 Постановка задачи разработки системы распознавания дорожных
знаков, пешеходов и автомобилей на дороге
Постановку
задач
следует
начать
с
определения
функциональных
требований. Они регламентируют функционирование или поведение системы. То
есть функциональные требования отвечают на вопрос «как должна работать
система в тех или иных случаях». Также данные требования определяют основной
фронт работ для разработчика, устанавливают цели и задачи.
С точки зрения функциональных требований, система распознавания
образов для обеспечения безопасности дорожного движения должна решать
следующие задачи:
1. Распознавание образов на дороге. Под образами понимаются: дорожные
знаки, автомобили и пешеходы:
 получение видеопотока с камеры устройства;
 разбитие видеопотока на кадры (отдельные изображения);
 выделение зоны интереса, то есть берется только та часть изображения,
где вероятнее всего будут появляться искомые объекты;
 предобработка каждого кадра для повышения качества картинки;
 на изображении находятся все искомые объекты, если это дорожный
знак, то область с ним вырезается и отправляется на проверку нейронной
сетью с целью определения класса знака;
 информация о знаке, автомобиле или пешеходе записывается в память.
2. Информирование
о
дорожной
ситуации.
Как
только
информация об объектах на видео, она сразу же выводится на дисплей.
поступает
37
2.2 Моделирование системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге с помощью диаграммы прецедентов
Диаграмма
прецедентов
(диаграмма
вариантов
использования)
—
диаграмма, показывающая отношения между актёрами и прецедентами. Она
является составной частью модели прецедентов, что позволяет описать систему
на концептуальном уровне.
Диаграмма вариантов использования не позволит нам описать все
внутреннее устройство системы, но позволит упростить будущие взаимодействия
пользователя с системой и определить характеристики, необходимые для
системы. Следовательно, диаграмма вариантов использования показывает то, что
система умеет делать, не показывая используемые в ней методы.
В соответствии с системой распознавания образов построена диаграмма
прецедентов, изображенная на рисунке 21:
Рисунок 21 – Диаграмма прецедентов системы
38
Прецедент «Получение видеопотока с камеры» включает в себя прецедент
«Разбиение видеопотока на отдельные кадры».
При разбиении видеопотока получается набор уникальных кадров, над
которыми будет выполняться последующая работа.
Прецедент «Работа с отдельным кадром (изображением)» включается в себя
три прецедента: «Предобработка кадра», «Выделение зоны интереса (поиска
объектов)», «Поиск объектов».
Прецедент
«Предобработка
кадра»
расширен
двумя
прецедентами:
«Удаление шумов» и «Перевод изображения в черно-белый формат».
Прецедент «Поиск объектов» включает в себя следующие прецеденты:
«Поиск автомобилей», «Поиск пешеходов», «Поиск дорожных знаков».
Прецедент «Поиск дорожных знаков» включает прецедент «Классификация
дорожных знаков».
Прецедент «Выделение зоны интереса (поиска объектов)» выбирает и
вырезает область кадра, в которой с высокой вероятность будут появляться
искомые объекты. Далее вся работа будет проводиться с выделенной областью.
Прецедент «Удаление шумов» снижает количество шумов на изображении.
Прецедент «Перевод изображения в черно-белый формат» из цветного
изображения делает черно – белое, при условии, что ищется автомобиль или
пешеход.
Прецеденты
«Поиск
автомобилей»,
«Поиск
пешеходов»
и
«Поиск
дорожных знаков» осуществляют поиск объектов и помечают их на изображении.
Пешеходы и автомобили дополнительно подписываются.
Прецедент «Классификация дорожных знаков» вырезает область с
дорожным знаком и проверяет его на обученной нейронной сети, а затем
подписывает найденный объект, как в случае с пешеходами и автомобилями.
39
2.3 Построение концептуальной модели предметной области системы
распознавания дорожных знаков, пешеходов и автомобилей на дороге
Для
построения
данной
модели
используется
диаграмма
классов
концептуального уровня, то есть контекстная диаграмма классов. Главное задачей
данных диаграмм является выделение основных понятий предметной области, а
именно классов и связей между ними.
На основе диаграммы вариантов использования можно сформировать список
классов:
1. Класс «Изображение». Он позволит брать один кадр из видеопотока и
сохранять как изображение.
2. Класс «Форма приложения». Данный класс будет содержать в себе класс
«Изображение» и выполнять функцию отображения проанализированных кадров.
3. Класс «Предобработка» отвечает за удаление шумов с кадра и переводит
его в черно-белый формат.
4. Класс «Анализ кадра» ищет искомые объекты на кадре и определяет тип
объекта.
Исходя из данного списка, можно построить контекстную диаграмму
классов. На рисунке 22 изображена диаграмма с классами и связями между ними.
Рисунок 22 – Контекстная диаграмма классов
40
2.4 Описание поведения системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге с помощью диаграммы состояний
Диаграмма состояний представляет собой ориентированный граф, где
вершинами являются состояния, а дуги – переходы между ними.
Данная диаграмма позволит нам понять, как будут осуществляться
переходы по состояниям в приложении, где находятся начальное и конечное
состояния. Другими словами, диаграмма состояний покажет нам куда можно
попасть из того или иного состояния.
Ниже на рисунке 23 представлена диаграмма состояний.
Первым действием, которое должен выполнить пользователь – это
запустить программу, тогда из начального состояния мы попадем в состояние
«Загрузка нейронной сети» и после этого начнется загрузка обученной нейронной
сети. Иначе выполняем остановку приложения. Затем попадаем в состояние
«Получение кадров», где из видеопотока берется по одному кадру. Если кадров не
обнаружено, то приложение останавливается.
Закончив действия в состоянии «Получение кадров» приложение выделяет
заданную область интереса, вырезая ее и сохраняя как новое изображение в
состоянии «Зона поиска объектов». Далее приложение посылает кадр в два
разных состояния. В одном случае это состояние «Предобработка» для
подготовки изображения к поиску пешеходов и автомобилей, а в другом это
состояние «Анализ кадра 2», чтобы найти дорожные знаки и определить их класс.
Выполнив все необходимые действия на стадии предобработки осуществляется
переход в состояние «Анализ кадра 1».
Если во время анализа не было найдено ни одного объекта, то программа
переходит в состояние «Загрузка», что позволит загрузить новый кадр или мы
можем остановить выполнение программы.
Проанализировав полученный кадр, программа переходит в состояние
«Результат» и отображает информацию о найденных объектах на кадре. Закончив
действия приложение возвращается в состояние «Загрузка» и подгружает новый
кадр, или мы также можем завершить работу приложения.
41
Рисунок 23 – Диаграмма состояний
42
3 ПРОЕКТИРОВАНИЕ СИСТЕМЫ РАСПОЗНАВАНИЯ ДОРОЖНЫХ
ЗНАКОВ, ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
3.1 Физическая диаграмма классов системы распознавания дорожных
знаков, пешеходов и автомобилей на дороге
Диаграмма классов демонстрирует нам классы, находящиеся в системе, их
атрибуты и методы, а также взаимосвязь между ними. Данные диаграммы могут
применятся как для описания существующих систем, так и для разработки новой.
Информация, показанная в диаграмме классов, переходит в исходный код
приложения. Следовательно, она является одним из конечных результатов во
время проектирования. Исходя из контекстной диаграммы построили диаграмму
классов.
На рисунке 24 изображена построенная диаграмма классов.
Рисунок 24 – Диаграмма классов системы
43
В классе «Форма приложения» содержится один метод:
− ImageShow() – данный метод обновляет область отображения процесса
работы программы.
Класс «Изображение» имеет пять атрибутов один атрибут:
− Frame – один кадр из видеопотока;
− NumDevice – номер порта подключенного устройства(камера);
− ROI_Image – зона интереса кадра из видеопотока;
− CNN_Path – путь к файлу обученной нейронной сети;
− CNN – загруженная нейронная сеть.
Также он владеет тремя методами методом:
− Capture_and_Split_Video() – захват видеопотока с камеры и разбиение его
на отдельные кадры;
− ROI() – выделение зоны интереса на кадре;
− LoadCNN() – загрузка обученной нейронной сети.
В классе «Предобработка» имеется один атрибут:
− k – коэффициент размытия для удаления шумов.
Еще данный класс содержит два метода:
− Filter() – функция фильтрации изображения для удаления шумов с кадра;
− Color_to_black() – функция перевода изображения в черно-белый формат.
Класс «Анализ кадра» имеет один атрибут:
− classes – список классов дорожных знаков.
Также данный класс содержит в себе два метода:
− Search_cars() – функция поиска и выделения автомобилей на кадре;
− Search_pedestrians() – функция поиска и выделения пешеходов на кадре;
− Search_and_Class_Signs() – функция поиска, выделения и анализа класса
найденных знаков, т.е. определение типа знака и выделение его на кадре.
44
3.2 Диаграмма деятельности системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге
Диаграмма деятельности – это диаграмма UML, которая выглядит довольно
просто, так как напоминает знакомую нам блок-схему. Однако, она нечто больше
чем блок-схема и со схожей целью, а именно отображение некого алгоритма
работы программы. На рисунке 25 изображена диаграмма деятельности
разрабатываемой системы.
Рисунок 25 – Диаграмма деятельности системы
45
Первое что делает программа – это загружает обученную нейронную сеть,
если загрузка удалась, то программа переходит к разбиению видеопотока на
кадры, в противном случае, работа завершается. Аналогичная ситуация и с
разбитием видеопотока, если кадров нет, то программа останавливается. Далее на
полученном кадре выбирается область, где наиболее вероятно появление искомых
объектов, то есть кадр обрезается.
Затем кадр передается на три функции. На первую функцию передается
чистый обрезанный кадр, который будет ожидать информацию о найденных
объектах. На второй функции начнется поиск дорожных знаков, а на третьей
начнется предобработка изображения, которая требуется для поиска объектов
алгоритмом Виолы-Джонса.
На
начальном
этапе
предобработки
убираются
лишние
шумы,
препятствующие качественному поиску объектов. Далее программа переводит
изображение в черно-белый формат. Выполнив предобработку, программа
начинает поиск автомобилей и пешеходов.
Ситуация с поиском дорожных знаков несколько другая, сначала
осуществляется поиск знаков, а только потом производится классификация,
найденных в кадре объектов.
Все три функции поиска объектов передают координаты и типы найденных
объектов на последнюю функцию. Имея чистое изображение и нужную
информацию, функция выделяет объекты и помечает их.
Далее осуществляется запрос следующего кадра, до тех пор, пока они не
закончатся.
46
3.3 Диаграмма компонентов системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге
Диаграмма компонентов показывает, как разделена программная система на
структурные компоненты и какие связи между ними. Компонентами могут
являться файлы, исполняемы файлы, библиотеки, пакеты, модули и другие. На
рисунке 26 представлена диаграмма компонентов проектируемой системы.
Рисунок 26 – Диаграмма компонентов системы
Рассмотрев диаграмму видно, что исполняемый компонент main.py
использует функциональности библиотеки компьютерного зрения openCV.dll:
а) функции предобработки изображений;
б) функции сегментации изображений;
в) функции поиска объектов и рисования контуров.
Данная библиотека была выбрана потому, что она распространяется
бесплатно и содержит весь необходимый функционал для работы с фильтрами,
контурами и растровыми изображениями.
47
Также исполняемый компонент использует функции библиотеки numPy.dll.
Это библиотека с открытым исходным кодом, обладающая возможностями
нужными для корректных работ других библиотек:
а) поддержка многомерных массивов (включая матрицы);
б) поддержка высокоуровневых математических функций, предназначенных
для работы с многомерными массивами.
Для работы с нейронными сетями используются две другие библиотеки.
Первая tensorFlow.dll – это открытая программная библиотека для машинного
обучения, разработанная компанией Google для решения задач построения и
тренировки
нейронной
сети
с
целью
автоматического
нахождения
и
классификации образов. Второй библиотекой является keras.dll – это открытая
нейросетевая библиотека, написанная на языке Python. Она представляет собой
надстройку над фреймворком TensorFlow. Также она нацелена на оперативную
работу с сетями глубинного обучения, при этом спроектирована так, чтобы быть
компактной, модульной и расширяемой.
Файлы CNN.json и CNN.h5 содержать в себе описание и веса обученной
нейронной сети.
3.4 Архитектура нейронной сети, используемая для классификации
дорожных знаков
Благодаря своим достоинствам сверточные нейронный сети наилучшим
образом подходят для распознавания образов. Поэтому перед обучением
нейронной сети требуется определить ее архитектуру, которая даст лучший
результат в задаче классификации дорожных знаков.
На рисунке 27 изображена архитектура сверточной нейронной сети для
распознавания изображений.
48
Рисунок 27 – Архитектура сверточной нейронной сети
Первый идет слой свертки, в котором размер ядра свертки «3х3», а
количество карт признаков «32». Для того чтобы добавить в нейронную сеть
нелинейности используются функции активации. В данном случае будем
использовать функцию активации «relu», которая выполняет операцию отсечения
отрицательной части скалярной величины, тем самым ускоряя процесс обучения,
упростив
вычисления.
Затем
следует
слой
подвыборки,
выбирающий
максимальное значение из квадрата «2х2». Далее эти два слоя повторяются два
раза, однако, в последнем слое свертки уже используется не «32» карты
признаков, а «64».
Выполнив все операции свертки и подвыборки выполняем преобразование
двумерного массива карт признаков в одномерный (вертикальный) массив,
называемый полносвязный слой и содержащий «64» нейрона с функцией
активации «relu» для определения класса объекта.
Чтобы предотвратить переобучение нейронной сети будем использовать
слой исключение (от англ. dropout). В завершении находится выходной слой,
размерность которого равна количеству классов искомых объектов. Здесь тоже
используется функция активации, ее название – softmax. Предназначена она для
задачи классификации, когда количество возможных классов больше двух.
3.5 Основные алгоритмы системы распознавания дорожных знаков,
пешеходов и автомобилей на дороге
Алгоритмом является последовательность шагов, которая приводит нас к
требуемому
результату.
Поэтому,
для
описания
алгоритмов
наилучшим
вариантом будет блок-схема. Она позволит описать отдельные шаги в виде блоков
49
различных
форм,
соединенных
между
собой
линиями,
указывающими
направление последовательности действий.
Далее будут описаны алгоритмы для прототипа разрабатываемой системы
распознавания образов на дороге.
3.5.1 Алгоритм загрузки нейронной сети и разбиения видеопотока на кадры
В соответствии с поставленной задачей загружается обученная нейронная
сеть, классификаторы пешеходов и автомобилей, а затем запускается камера.
Далее видеопоток с камеры разбивается на кадры для выделения зоны интереса и
последующей обработки. В завершении обработанный кадр отображается в окне
программы. Во избежание различного рода ошибок в коде программы добавлена
проверка на получение кадра из видеопотока. Также для завершения работы
программы, добавлена проверка на нажатие клавиши выхода.
При удалении шумов с кадров используется медианная фильтрация.
Основная суть фильтрации заключается в перемещении прямоугольной области
фиксированной длинны по всему изображению, захватывающей нечетное
количество пикселей, представляющей массив значений a1, a2…an. Впоследствии
массив сортируется по возрастанию или убыванию и значение, которое
расположено в середине будет являться медианным. Им и будет заменяться
центральное значение в выбранной прямоугольной области. Таким образом
контуры объектов на изображении должны стать более выраженными, что
повысит точность и качество поиска объектов на видео. Помимо этого,
изображение сразу переводится в черно белый – формат, чтобы не выполнять
этого в каждой функции поиска по отдельности.
Благодаря, содержащемуся в библиотеке компьютерного зрения набору
функций данная задача легко осуществима. На рисунке 28 изображена схема
последовательности действий.
50
Рисунок 28 – Алгоритм загрузки нейронной сети и разбиения видеопотока на
кадры
51
3.5.2 Алгоритм поиска автомобилей и пешеходов
Метод Виолы-Джонса используется для поиска пешеходов и автомобилей с
помощью специально обученных классификаторов. Для работы алгоритма
использованы уже обученные классификаторы требуемых объектов. Результат
работы метода зависит от загруженного классификатора, поэтому благодаря
хранящимся в отдельных файлах классификаторам пешеходов и автомобилей
порядок действий для поиска объектов каждого класса будет описан общей блоксхемой.
Каждый из найденных объектов выделяется прямоугольной областью
определенного цвета и имеет соответствующую надпись:
− пешеходы помечаются красным цветом и подписываются как «пешеход»;
− автомобили
помечаются
зеленым
цветом
и
подписываются
как
«автомобиль».
Чтобы исключить ошибки добавлена проверка на заполнение массива
найденными объектами. Работа алгоритма описана при помощи функций
библиотеки компьютерного зрения.
На рисунке 29 изображена блок-схема поиска объекта на видео.
3.5.3 Алгоритма поиска и классификации дорожных знаков
Так как алгоритм поиска знаков состоит из двух совмещенных алгоритмов,
то получим следующую последовательность действий:
1. Конвертация кадра из формата RGB в HSV.
2. Бинаризация изображения в соответствии с выбранным цветом знака, т.е.
проверяется каждый пиксель кадра и если он имеет требует цвет, то
перекрашивается в белый, иначе в черный.
3. Поиск границ найденных по цвету объектов.
4. Составление списка замкнутых контуров на изображении.
5. Подсчет компактности каждого контура.
6. Определение координат расположения и размеров контура, прошедшего
проверку на компактность.
52
7. Отсеивание слишком маленьких объектов.
8. Выделение объекта прямоугольной областью на исходном кадре.
9. Вырезание области с найденным объектом и сохранение ее как отдельное
изображение.
10. Преобразование изображение в массив понятный нейронной сети.
11. Классификация объекта с изображения обученной нейронной сетью.
12. Отображение информации о объекте на кадре.
Рисунок 29 – Алгоритм поиска автомобилей и пешеходов
Как видно из последовательности, на определенном шаге происходит
сохранение области как изображения. Эта мера является необходимостью, ведь
функции, отвечающие за загрузку и преобразование, могут работать только с
изображениями, передать область по координатам не получится. По завершении
работы программы в папке не окажется множества областей с объектами, а все
благодаря тому, что изображения перезаписываются.
53
Благодаря, содержащемуся в библиотеке компьютерного зрения набору
функций данная задача легко осуществима. На рисунке 30 изображена блок-схема
алгоритма поиска знака на изображении.
3.5.4 Алгоритм обучения нейронной сети
Для обеспечения работы всей системы полностью требуется обученная
нейронная сеть. Поэтому был написан алгоритм, который обучит сверточную
нейронную сеть, проверит точность распознавания и сохранит информацию и
веса в отдельные файлы, с которыми в дальнейшем можно будет работать.
Алгоритм обучения будет основываться на архитектуре нейронной сети,
описанной ранее.
Этот алгоритм подразумевает обучение с учителем, в таком случае в
качестве обучающей выборки будет использована отсортированная по классам
база изображений дорожных знаков Российской Федерации, находящаяся в
свободном доступе и предназначенная для проверки нейронных сетей,
использующихся в научных работах.
Для обучения сети используется три группы изображений, а в свою очередь
каждая группа содержит одинаковые классы дорожных знаков:
− изображения для обучения сети;
− изображения для проверки работы сети;
− изображения для тестирования точности распознавания дорожных знаков.
54
Рисунок 30 - Алгоритм поиска дорожных знаков
55
На рисунке 31 показан алгоритм обучения нейронной сети.
Рисунок 31 – Алгоритм обучения нейронной сети
56
4 РЕАЛИЗАЦИЯ СИСТЕМЫ РАСПОЗНАВАНИЯ ДОРОЖНЫХ
ЗНАКОВ, ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
4.1 Обоснование языка программирования
Для разработки данного программного продукта был выбран язык
программирования
Python.
Python
–
это
интерпретируемый
объектно-
ориентированный язык программирования высокого уровня, предназначенный
для самого широкого круга задач. С его помощью можно обрабатывать различные
данные, создавать изображения, работать с базами данных, разрабатывать Wеbсайты
и
приложения
с
графическим
интерфейсом.
Python
является
кроссплатформенным языком, позволяющим создавать программы, которые
будут работать во всех операционных системах.
Программа на языке Python представляет собой обычный текстовый файл с
расширением .ру (консольная программа) или .pyw (программа с графическим
интерфейсом). Все инструкции из этого файла выполняются интерпретатором
построчно. Для ускорения работы при первом импорте модуля создается
промежуточный байт-код и сохраняется в файле с расширением рус. При
последующих запусках, если модуль не был изменен, исполняется именно байткод. Для выполнения низкоуровневых операций и задач, требующих высокой
скорости работы, можно написать модуль на языке С, скомпилировать его, а затем
подключить к основной программе.
Python является объектно-ориентированным языком. Это означает, что
практически все данные являются объектами, даже сами типы данных. В
переменной всегда сохраняется только ссылка на объект, а не сам объект.
Например, можно создать функцию, сохранить ссылку на нее в переменной, а
затем вызвать функцию через эту переменную. Данное обстоятельство делает
язык Python идеальным инструментом для создания программ, использующих
функции обратного вызова, например, при разработке графического интерфейса.
57
Тот факт, что язык является объектно-ориентированным, отнюдь не
означает, что ООП стиль программирования является обязательным. На языке
Python можно писать программы как в ООП-стиле, так и в процедурном стиле.
Python самый стильный язык программирования в мире, не допускающий
двоякого написания кода. В Python код можно написать только одним способом,
т. к. в нем отсутствуют лишние конструкции.
Выделим основные причины выбора языка:
а) большое количество бесплатных библиотек в открытом доступе;
б) множество платных и бесплатных интерпретаторов и сред разработки для
языка Python. Например, CPython, PyPy, PyCharm, PyDev и другие;
в) возможность подключения скомпилированных модулей на языке более
низкого уровня;
г) Установка библиотек одним щелчком мыши.
Для реализации программного продукта был выбран интерпретатор
Anaconda Python версии 3.6 и среда разработки PyCharm Community Edition.
Достоинствами данной среды являются простота установки, возможность
синхронизации с облачными хранилищами, создание точек отката, а также она
является свободно распространяемой.
4.2 Реализация работы алгоритма обучения нейронной сети
Перед
началом
обучения
нейронной
сети
требуется
подготовить
изображения для обучения с учителем. Это требуется для того, чтобы алгоритм
мог понять сколько и какие классы изображений дорожных знаков подаются на
вход с целью обучения, проверки и тестов. Ниже на рисунке 32 приведен пример
структуры хранения файлов.
58
Рисунок 32 – Структура хранения файлов обучающей выборки
Таким образом, должны быть созданы папки для обучения, проверки и
тестирования, в каждой из которых создано количество папок равное количеству
классов объектов. В свою очередь в папке с классом хранятся изображения,
принадлежащие одному виду знаков.
59
На схеме указаны три вида объектов – «ограничение скорости 5км/ч»,
«ограничение скорости 20км/ч» и «обгон запрещен», в каждом из которых
находятся изображения с этими знаками.
Приступая к обучению нейронной сети требуется указать некоторые
параметры, которые потребуются далее:
1. train_dir = 'data/train' – путь к папке с обучающей выборкой.
2. val_dir = ' data/val' – путь к папке с проверочной выборкой.
3. test_dir = ' data/test' – путь к папке с тестовой выборкой.
4. img_width, img_height = 48, 48 – размеры изображений из выборки в
пикселях.
5. input_shape = (img_width, img_height, 3) – указываем размерность
тензора(массива) для входных данных в нейронную сеть. Используется значение
3, так как каждый пиксель имеет три цвета: красный, зеленый и синий.
6. epochs = 30 – количество эпох, в течении которых будет обучаться
нейронная сеть. Эпоха – это просмотр всех примеров из обучающей выборки с
корректировкой весов сети.
7. batch_size = 16 – минимальный размер обучающей выборки.
8. nb_train_samples = 10000 – количество изображений для обучения.
9. nb_validation_samples = 1500 – количество изображений для проверки.
10. nb_test_samples = 1500 – количество изображений для тестирования
точности распознавания.
Задав основные параметры можно описывать архитектуру нейронной сети.
Ниже представлен код описания:
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
60
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(26))
model.add(Activation('softmax'))
Функция Sequential() начинает запись архитектуры нейронной сети, а затем
описывается сама архитектура. Первый идет слой свертки с размером ядра «3» на
«3» и количеством карт признаков «32». Функция активации для этого слоя
«relu». Затем следует слой подвыборки, который выбирает максимальное
значение из квадрата размером «2» на «2». Далее повторяем слои два раза, за
исключением последнего слоя свертки, в нем будет «64» карты признаков.
Функцией Flatten() преобразуем полученные признаки в одномерный массив
и создаем полносвязный слой из «64» нейронов командой Dense() с функцией
активации «relu».
Предотвратить переобучение нейронной сети поможет команда Dropout().
Создаем еще одни полносвязный слой, отвечающий за количество классов на
выходе функцией Dense(), то есть указывается количество папок с классами,
использованных для обучения нейронной сети. В настоящий момент нейронная
сеть будет обучена на распознавание «26» видов дорожных знаков. Функция
активации для этого слоя «softmax».
Задав архитектуру, полученную модель нужно скомпелировать:
model.compile(
loss='categorical_crossentropy',optimizer='adam',
metrics=['accuracy'])
Параметр «loss='categorical_crossentropy'» отвечает за функцию потерь,
здесь использована функция для классов, чье количество превышает «2», так как
видов дорожных знаков больше двух. Параметр «optimizer='adam'» оптимизирует
61
нейронную сеть, а «metrics=['accuracy']» определяют расчёт качества модели, в
данном случае это аккуратность, то есть доля угаданных ответов.
Выполнив компиляцию создаем генераторы изображений для нейронной
сети:
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
val_generator = datagen.flow_from_directory(
val_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
test_generator = datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
Генератор создается функцией ImageDataGenerator(), которая делит пиксели
каждого изображения на «255». Затем следуют три генератора, а именно:
− генератор для обучения на основе изображений из выборки;
− генератор для проверки на основе изображений из выборки;
− генератор для тестирования на основе изображений из выборки.
Отметим, что тип класса указан как «categorical», следовательно,
используется больше двух классов изображений.
Выполнив всю подготовку запускаем обучение нейронной сети на основе
созданных генераторов функцией model.fit_generator():
model.fit_generator(
62
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size)
После завершения обучения выполнится проверка точности распознавания с
помощью тестовых данных командой model.evaluate_generator() и результат
выведется на экран:
scores = model.evaluate_generator(test_generator, nb_test_samples // batch_size)
print("Точность
распознавания
на
тестовых
данных:
%.2f%%"
%
(scores[1]*100))
Обученную модель требуется сохранить в файл для дальнейшего
использования:
print("Сохраняем сеть")
model_json = model.to_json()
json_file = open("model.json", "w")
json_file.write(model_json)
json_file.close()
model.save_weights("model.h5")
print("Сохранение сети завершено")
Генерируем описание модели функцией model.to_json() в формат .json и
записываем в файл «model.json», также требуется записать полученные веса
функцией model.save_weights() в файл «model.h5».
Теперь сеть сохранена и готова классифицировать объекты.
4.3 Реализация работы с видеопотоком и загрузкой нейронной сети
На начальном этапе запуска программы происходит загрузка и компиляция
обученной нейронной сети. Рассмотрим следующий код:
json_file = open("model.json", "r")
loaded_model_json = json_file.read()
63
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights("model.h5")
loaded_model.compile(
loss='categorical_crossentropy',optimizer='adam',
metrics=['accuracy'])
Первым делом требуется открыть файл архитектуры обученной нейронной
сети функцией open(), используя параметр «r» - чтение, а затем считать ее
функцией read(). После считывания файл можно закрыть функцией close(). На
основе загруженных данных создаем модель нейронной сети функцией
model_from_json() и добавляем к ней веса из файла весов обученной нейронной
сети. Компилируем загруженную модель функцией compile().
Завершив загрузку, создаем список классов искомых объектов. В качестве
класса указываем путь к изображению дорожного знака, а не его название,
данный подход в дальнейшем поможет сократить код. Ниже представлен список:
classes = ['signs class/20.jpg',
'signs class/30.jpg',
'signs class/40.jpg',
'signs class/5.jpg',
'signs class/50.jpg',
'signs class/60.jpg',
'signs class/70.jpg',
'signs class/80.jpg',
'signs class/kirpich.jpg',
'signs class/dvijenie_zapresheno.jpg',
'signs class/lejachiy_policeiskiy.jpg',
'signs class/levo.jpg',
'signs class/levo_pravo.jpg',
'signs class/levo_zapresheno.jpg',
'signs class/obgon_zapreshen.jpg',
'signs class/peshehodniy_perehod.jpg',
64
'signs class/pravo.jpg',
'signs class/prymo.jpg',
'signs class/prymo_levo.jpg',
'signs class/prymo_pravo.jpg',
'signs class/razvorot_zapreshen.jpg',
'signs class/stop.jpg',
'signs class/stoyanka.jpg',
'signs class/stoyanka_chet.jpg',
'signs class/stoynka_ne_chet.jpg',
'signs class/stoyanka_ostanovka.jpg']
Отметим, что каждый тип знака, соответствует своему выходному нейрону
обученной сети (таблица 3), то есть порядковый номер дорожного знака в списке
classes соответствует номеру выходного нейрона.
Таблица 3 – Соответствие дорожных знаков и выходных нейронов
Дорожный знак
Идентификатор выходного нейрона
1
2
1
2
3
4
5
6
7
8
65
Продолжение таблицы 3
1
2
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
66
Для увеличения производительности загрузим классификаторы пешеходов
и автомобилей заранее. Загрузка выглядит таким образом:
cascade_p = cv2.CascadeClassifier('class/MyPedestrian.xml')
cascade_v = cv2.CascadeClassifier('class/vehicleDetect.xml')
Следующая задача заключается в получении видеопотока с камеры. Ниже
представлен код:
video = cv2.VideoCapture(0)
video.set(3,1280)
video.set(4,720)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('camera.avi', fourcc, 30.0, (1920, 500))
Из кода видно, что считывание видеопотока происходит функцией
cv2.VideoCapture() с одним параметром, а именно номером порта с камерой, если
камера одна, то по умолчанию «0». Функция set() задает разрешение видеопотока,
за это отвечают параметры «3» и «4». Для дальнейшей проверки работы
программа будем записывать обработанный видеопоток в файл. Для начала
укажем тип кодека командой cv2.VideoWriter_fourcc() с помощью которого будут
преобразовываться обработанные кадры, в нашем случае это распространённый
кодек XVID. Затем создадим сам видео файл функцией cv2.VideoWriter(), где
указывается имя файла вместе с форматом, ссылка на кодек, количество кадров в
секунду и разрешение видеофайла.
После получения видеопотока запускается цикл представленный ниже:
while(video.isOpened()):
ret, frame = video.read()
if frame is None:
cv2.destroyAllWindows()
break
else:
frame = frame[0:500, 0:1920]
67
median = cv2.medianBlur(frame, 3)
gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
detect_vehicles(gray_image)
detect_pedestrians(gray_image)
detect_signs3(frame)
detect_red_signs(frame)
detect_blue_signs(frame)
'''
cv2.waitKey(0)
if 0xFF in (ord('p'),ord('l')):
pass
'''
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF in (ord('q'),0x1B,0x0D):
break
В представленном коде видим, что цикл будет работать до тех пор, пока не
закончатся кадры в видео или не будет нажата клавиша «Esc». Если описывать
подробнее, то с помощью команды video.read() покадрово считываем видеопоток
и сразу же проверяем поступают ли кадры. С клавишей все проще, проверяем
была ли нажата клавиша во время цикла, если да, то останавливаем программу.
При успешном выполнении условия проверки кадров, они обрезаются до
размеров зоны интереса. Далее обрезанный кадр обрабатывается медианной
фильтрацией и переводится в черно-белый формат. Следующим этапом
осуществляется
передача
кадра
на
четыре
функции
поиска
объектов:
detect_vehicles(), detect_pedestrians (), detect_red_signs () и detect_blue_signs (). В
случае с функциями поиска пешеходов и автомобилей на вход подается серое
обработанное изображение, так как этого требует метод Виолы-Джонса. Для
68
поиска и классификации дорожных знаков подается чистый кадр, так как мы
будем искать объекты по цвету.
Завершив работу функций распознавания осуществляем запись видео
командой out.write() и выводим обработанный видеопоток в окно с помощью
функции cv2.imshow().
4.4 Реализация работы функций поиска пешеходов и автомобилей
Что касается функций поиска пешеходов и автомобилей, то достаточно
описать одну из них, так как отличие заключается в нескольких параметрах,
используемых в функциях. Рассмотрим код функции detect_vehicles ():
features
=
cascade.detectMultiScale(gray_image,
scaleFactor=1.1,
minNeighbors=6, minSize=(35,35))
if len(features) == 0:
return []
else:
for (x, y, w, h) in features:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame,
"Auto",
(x,
y
+
h
+
13),
cv2.FONT_HERSHEY_TRIPLEX, .5, (0, 255, 0))
Поиск объектов в кадре осуществляется одной функцией на основе
выбранного
классификатора:
cascade.detectMultiScale(),
где
cascade
–
загруженный классификатор, detectMultiScale – функция. В ней располагается
четыре параметра, изменяя которые будет меняться результат поиска. Рассмотри
подробнее каждый из параметров:
− gray_image – ссылка на черно-белое изображение;
− scaleFactor – параметр отвечающий за размер изображения (всегда имеет
значение 1.1);
− minNeighbors – параметр отвечающий за количество возможных соседних
объектов для сравнения возле найденного объекта;
− minSize – минимальный размер искомого объекта.
69
Во всех функциях подобран оптимальный набор данных параметров для
корректной работы алгоритма.
Результат функции – это массив с данными расположения и размеров для
всех найденных объектов на изображении, другими словами каждый объект
описан четырьмя переменными:
− x - расположение относительно оси Ox;
− y - расположение относительно оси Oy;
− w - ширина;
− h - высота.
Пройдя по всей длине полученного массива пешеходы и автомобили
выделяются прямоугольной областью и подписываются командами cv2.rectangle()
и cv2.putText(). В качестве параметров команды рисования прямоугольника
указывается исходный необработанный кадр, на котором рисуем, координаты
объекта из массива, ширина и высота объекта из массива, цвет и толщина линии.
Для текста требуется указать также кадр, содержание надписи, координаты начала
текста, шрифт, размер и цвет.
4.5 Реализация работы функций поиска и классификации дорожных
знаков
Алгоритм
вынесен
в
отдельные
функции
detect_red_signs
()
и
detect_blue_signs (), на вход которой подается один необработанный кадр из
видео.
На первом этапе происходит работа с цветовой палитрой изображения.
Рассмотрим следующий код:
hsv_img = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
detect_color = cv2.inRange(hsv_img, (83,25,0), (176,255,200))
Из кода видно, что функция конвертации формата цветов cv2.cvtColor()
имеет два параметра, а именно указатель на кадр, который подвергается
конвертации и в какой формат требуется перевести этот кадр из видео. Далее
производится бинаризация изображения функцией cv2.inRange() с тремя
70
параметрами. Первым параметром является изображение, конвертированное в
формат HSV, а вторым и третьим параметрами указывается диапазон цвета
дорожного знака (в конкретном случае указан промежуток для синих дорожных
знаков).
Для определения диапазона цветовых значений была написана небольшая
программа, которая позволила с высокой точностью найти требуемые значения.
На рисунке 33 представлен пример работы программы.
Рисунок 33 – Пример работы программы определения цветового диапазона
Видим, что двигая ползунки минимального и максимального значения
можно в реальном времени наблюдать работу функции cv2.inRange().
После получения бинарного изображения составляется список всех
замкнутых контуров объектов, удовлетворяющих определенному цветовому
оттенку. Этот процесс представлен в коде:
edges = cv2.Canny(detect_color,10,20)
_,
contours,
_
=
cv2.findContours(edges,cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
Изначально, функцией cv2.Canny() находятся все возможные грани
объектов на бинарном изображении. Данная функция содержит три параметра, а
71
именно ссылка на бинарное изображение и пороговые значения максимума и
минимума перепада цветов. На следующем шаге требуется найти все замкнутые
границы (контуры) и поместить их в массив. С этим помогает справится функция
cv2.findContours(), в которой задается три параметра, ссылка на массив границ,
режим поиска (в конкртеном случае ищет только крайние внешние контуры) и
метод аппроксимации (упрощения) контуров.
На завершающем этапе проводится проверка каждого контура, то есть если
он соответствует условиям компактности, то область этого контура отправляется
на вход нейронной сети, чтобы классифицировать объект. Данный этап
реализован следующим образом:
for i in range(0, len(contours)):
cnt = contours[i]
s = cv2.contourArea(cnt)
p = cv2.arcLength(cnt,True)
if s!=0 and p!=0 and s/(p*p)>0.07 and s/(p*p)<0.085:
x, y, w, h = cv2.boundingRect(cnt)
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite('1.jpg', frame[y + 2:y + h - 2, x + 2:x + w - 2])
img = image.load_img('1.jpg', target_size=(48, 48))
x_1 = image.img_to_array(img)
x_1 = np.expand_dims(x_1, axis=0)
prediction = loaded_model.predict(x_1)
type_sign = classes[np.argmax(prediction)]
s_img = cv2.imread(type_sign)
frame[y:y + s_img.shape[0], x:x + s_img.shape[1]] = s_img
Из вышеописанного кода видим, что осуществляется проход по всему
массиву контуров (contours) , где для каждого контура находится площадь и
периметр функциями cv2.contourArea() и cv2.arcLength(), где параметром является
i-ый контур. Затем следует условие проверки компактности (в конкретном случае,
72
проверка для круга). В случае выполнения условия определятся координаты
контура объекта функцией cv2.boundingRect ().
Далее выделяется область объекта на исходном изображении командой
cv2.rectangle(), где в качестве параметров указывается изображение, координаты,
цвет и толщина линии.
На следующем этапе требуется сохранить выбранную область функцией
cv2.imwrite() как изображение, иначе не удастся загрузить изображение для
преобразования в массив, другими словами, функция image.load_img() может
только загружать файлы. Чтобы записать область в файл требуется указать имя
файла и координаты области, а для загрузки требуется написать путь и размер, в
котором загрузится изображение. Стоит отметить, изначальный размер области не
важен, функция его преобразует, в данном случае это «48» на «48» пикселей.
Загрузив найденную область преобразуем ее в массив, который будет
понятен
обученной
нейронной
сети
командами
image.img_to_array()
и
np.expand_dims(). После преобразования передаем изображение на загруженную
нейронную сеть функцией loaded_model.predict (). Пропустив изображение через
нейронную сеть, она вернет значения весов всех выходных нейронов. Так как
каждый нейрон соответствует определенному типу дорожного знака, то после
этого мы обращаемся к ранее созданному списку классов, где каждому знаку
будет соответствовать свой нейрон. Следовательно, выбирается тот класс, чей
нейрон имеет наибольший вес. В этом помогает команда classes[np.argmax()].
В заключении остается считать изображение дорожного знака функцией
cv2.imread() на вход которой подается путь до изображения с типом знака,
хранящийся в списке классов, а затем отобразить это изображение на начальном
кадре рядом с выделенной областью. Это реализуется командой frame[y:y +
s_img.shape[0], x:x + s_img.shape[1]] = s_img, где указываем кадр на котором
рисуем, координаты по которым рисуем и изображение которое подрисовываем.
73
5 ТЕСТИРОВАНИЕ РАБОТЫ СИСТЕМЫ РАСПОЗНАВАНИЯ
ДОРОЖНЫХ ЗНАКОВ, ПЕШЕХОДОВ И АВТОМОБИЛЕЙ НА ДОРОГЕ
Для проверки работы системы были взяты видеофайлы, записанные на
автомобильный
видеорегистратор
Highscreen
Black
Box
Radar
plus.
Характеристики устройства представлены в таблице 4.
Таблица 4 – Характеристики видеорегистратора Highscreen
Количество мегапикселей камеры
5 Мп
Угол обзора
130 градусов
Разрешение видеозаписи
1920 x 1080
Частота кадров
30 кадров/сек
В качестве данных для тестирования взяли пять видеофрагментов с разными
погодными условиями и временем суток представленных в таблице 5:
Таблица 5 – Описание видеофайлов
Номер фрагмента
Время суток
Погодные условия
1
День
Солнечно
2
День
Пасмурно
3
День
Дождь
4
Вечер
Ясно
5
Ночь
Ясно
Тестирование заключалось в прогоне каждого видеофрагмента через
разработанную систему. Пример работы системы можно увидеть на рисунках 3436.
74
Рисунок 34 – Первый пример
Рисунок 35 – Второй пример
Рисунок 36 – Третий пример
В таблицах 6 и 7 представлены итоги тестирования алгоритмов на
выбранных видеофрагментах.
Таблица 6 – Результаты исследования точности алгоритма распознавания
дорожных знаков, пешеходов и автомобилей
Параметр
Результат для дорожных знаков
1
2
Общее количество знаков
Количество найденных и распознанных
знаков
223
185(83%)
75
Продолжение таблицы 6
1
2
Количество найденных и неправильно
8(4%)
распознанных знаков
Количество незамеченных знаков
30(13%)
Количество ложных срабатываний
9
Таблица 7 – Результаты исследования точности алгоритма распознавания
Параметр
Результат для
Результат для
пешеходов
автомобилей
72
328
Количество замеченных
54(75%)
274(84%)
Количество
18(25%)
54(16%)
13
40
Общее количество
незамеченных
Количество ложных
срабатываний
По результатам тестов можно сделать вывод, что распознавание работает
корректно, однако, не обошлось от ложных срабатываний и незамеченных
объектов, что может быть вызвано низким качеством съемки видеорегистратора.
Например, пешеходы и автомобили сливаются с окружающим фоном или камера
недостаточно хорошо передает тот или иной цвет.
Следовательно,
в
дальнейшем
планируется
использование
более
современной камеры для работы над алгоритмами, расширение обучающей
выборки новыми дорожными знаками и дополнения классификаторов новыми
особенностями.
76
ЗАКЛЮЧЕНИЕ
В данной работе были отмечены популярные методы поиска объектов на
изображениях, проанализировав которые удалось выявить отличительные
особенности каждого из методов, их достоинства и недостатки. Была изучена
научная литература, связанная с вопросами, рассмотренными в первой главе и
сделаны выводы.
В результате проведенных исследований было разработано решение
поставленной задачи в виде системы распознавания дорожных знаков, пешеходов
и автомобилей на дороге. Были рассмотрены аналоги и сформулированы
функциональные требования к программе. Разработанные алгоритмы были
формализованы при помощи описанных спецификаций и благодаря этому удалось
реализовать программный продукт, написанный на языке Python.
Таким образом, поставленные задачи решены, поэтому цель можно считать
достигнутой.
77
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1.
Попов Е.Ю., Крыжановский Д.И. Алгоритм распознавания дорожных
знаков ограничения скорости // Современные научные исследования и инновации.
2012. № 6 [Электронный ресурс]. URL: http://web.snauka.ru/issues/2012/06/14717
(дата обращения: 20.01.2018).
2.
Романов
П.В.
Алгоритм
распознавания
дорожных
знаков
//
Молодежный научно-технический вестник. 2014. [Электронный ресурс]. URL:
http://sntbul.bmstu.ru/doc/722125.html (дата обращения: 20.01.2018).
3.
Журавель И.М. Краткий курс теории обработки изображений. – М.,
4.
Гонсалес Р., Вудс Р. Цифровая обработка изображений. – М.:
1999.
Техносфера – 2005. – 1072 с.
5.
P. Viola and M.J. Jones, «Rapid Object Detection using a Boosted Cascade
of Simple Features», proceedings IEEE Conf. on Computer Vision and Pattern
Recognition (CVPR 2001), 2001
6.
Якимов,
П.Ю.
Отслеживание
дорожных
знаков
в
видеопоследовательности с использованием скорости автомобиля / П.Ю. Якимов
// Компьютерная оптика. –2015. – Т. 39, № 5.
7.
Антощук, С. Г. Выделение контуров объектов методом двукратного
гиперболического вейвлет-преобразования [Текст] / С.Г. Антощук, О.Ю.
Бабилунга, А.А. Николенко // Електромашинобуд. та електрообладн..– 2006. –С.
65-69.
8.
Методы компьютерной обработки изображений / Под. Ред. В.А.
Сойфера – 2-е изд., испр. – М.: ФИЗМАТЛИТ, 2003.-784с.
9.
Прэтт У. Цифровая обработка изображений. – Т 2. – М.: Мир, 1982. –
10.
Алгоритмы выделения контуров для сегментации изображений
480 с.
[Электронный
ресурс].
–
Режим
доступа:
http://www.uran.donetsk.ua/~masters/2014/fknt/metelytsia/library/article11.htm
обращения 20.05.17).
(Дата
78
11.
Сойфер, В.А. Компьютерная обработка изображений. Часть 2. Методы
и алгоритмы [Текст] / В.А. Сойфер // Соросовский образовательный журнал,
1996, №3, с. 110-121.
12.
Жарких, А.А. Двухэтапный алгоритм выделения контуров на
изображении [Текст] / А.А. Жарких // Вестник МГТУ: труды Мурм. гос. техн. унта. – Мурманск: Изд-во МГТУ, 2009. – Т.12, № 2. – С. 202-205.
13.
Савичева С.В., Малыгина В.С. Алгоритм распознавания дорожных
знаков // Современные научные исследования и инновации. 2015. № 4
[Электронный
ресурс].
URL:
http://web.snauka.ru/issues/2015/04/50646
(Дата
обращения 20.05.17)
14.
Савичева
С.В.
Экспериментальное
исследование
алгоритма
идентификации плоских объектов //Алгоритмы, методы и системы обработки
данных, 2010, №15. С.153160.
15.
Чигорин А. А., Конушин А. С. Эксперименты с обучением методов
распознавания дорожных знаков на синтетических данных // Наука и образование
2013.
16.
Курбатова, Е.Е. Комбинированный алгоритм выделения контуров
объектов интереса в мониторинговых системах [Текст] / Е.Е. Курбатова // Вестник
Нижегородского университета им. Н.И. Лобачевского, 2013, № 2 (1), С. 60–65
17.
Прохоренок, Н.А. Python 3 и PyQt. Разработка приложений [Текст] /
Н.А. Прохоренок. –СПб: БХВ-Петербург, 2012. – 704с.
18.
Жизняков,
А.Л.
Выделение
и
анализ
контуров
и
скелетов
полутоновых изображений с использованием кратномасштабного представления
[Электронный ресурс] / А.Л. Жизняков // Электронный научный журнал
«Исследовано
в
России».
–
2006.
–
Режим
доступа:
http://zhurnal.ape.relarn.ru/artic­les/2006/150.pdf (Дата обращения 20.05.17).
19.
Титов, И.О. Выделение контуров изображения движущегося объекта
[Текст] / И.О. Титов, Г.М. Емельянов // Вестн. Новг. гос. ун-та. Сер.:Техн. науки.
2010. №55. С.27-31.
79
20.
Буй, Т.Т.Ч. Анализ методов выделения краёв на цифровых
изображениях / Т.Т.Ч. Буй, В.Г. Спицын // Доклады ТУСУРа. – № 2(22), Ч. 2. – С.
221-223.
21.
Белим, С.В. Выделение контуров на изображениях с помощью
алгоритма кластеризации [Текст] / С.В. Белим, П.Е. Кутлунин// Компьютерная
оптика. – 2015. – С. 119-124.
22.
Canny, J.F. Finding edges and lines in images [Текст] / J.F.Canny. – MIT
Artificial Intelligence Laboratory, 1983. – 146с.
23.
Яне, Б. Цифровая обработка изображений [Текст] / Б. Яне; Пер. с англ.
А.М. Измайлова. – М.: Техносфера, 2007. – 584с.
24.
Фурман, Я.А. Введение в контурный анализ; приложения к обработке
изображений и сигналов [Текст] / Я.А. Фурман, А.В. Кревецкий, А.К. Передреев и
др. – М.: Физматлит, 2003. – 592с.
25.
Фисенко, В.Т. Компьютерная обработка и распознавание изображений
[Текст] / В.Т. Фисенко, Т.Ю. Фисенко. – СПб: СПбГУ ИТМО, 2008. – 192с.
26.
Форсайт, Д. Компьютерное зрение. Современный подход [Текст] / Д.
Форсайт, Ж. Понс; Пер. с англ. – М.: Издательский дом «Вильямс», 2004. – 928с.
27.
Желтов, С.Ю. Обработка и анализ изображений в задачах машинного
зрения [Текст] /С.Ю.Желтов, Ю.В.Визильтер, А.В. Бондаренко и др. – М.:
Физматкнига, 2010. – 672с.
28.
Шапиро, Л. Компьютерное зрение [Текст] / Л. Шапиро, Дж. Стокман;
Пер. с англ. – М.: БИНОМ. Лаборатория знаний, 2006. – 752с.
29.
Гашников, М.В. Методы компьютерной обработки изображений
[Текст] / М.В. Гашников; Под ред. В.А. Сойфера. – М.: Физматлит, 2003. – 784с.
30.
Анисимов, Б.В. Распознавание и цифровая обработка изображений
[Текст] / Б.В. Анисимов, В.Д. Курганов, В.К. Злобин. –М.: Высш. шк., 1983. –
295с.
31.
Лукьяница, А.А. Цифровая обработка видеоизображений [Текст] /
А.А. Лукьяница, А.Г. Шишкин. – М.: Ай-Эс-Эс Пресс, 2009. – 518с.
80
32.
Цуканов М.В. Сравнительный анализ алгоритмов распознавания
дорожных знаков [Текст] / М.В. Цуканов, Е.В. Пшеничкин // Инновационная
наука. – 2018. – №4. – С. 66-70.
33.
Пшеничкин Е.В. Распознавание рукописных символов с помощью
нейронных сетей методом с обратным распространением ошибки [Текст] / Е.В.
Пшеничкин, М.В. Цуканов, Д.В. Рыженков // Инновационная наука. – 2018. – №2.
– С. 14-16.
81
ПРИЛОЖЕНИЕ А
(обязательное)
Листинг программы
import cv2
import numpy
from keras.models import model_from_json
from keras.preprocessing import image
import threading
classes = ['signs class/20.jpg',
'signs class/30.jpg',
'signs class/40.jpg',
'signs class/5.jpg',
'signs class/50.jpg',
'signs class/60.jpg',
'signs class/70.jpg',
'signs class/80.jpg',
'signs class/kirpich.jpg',
'signs class/dvijenie_zapresheno.jpg',
'signs class/lejachiy_policeiskiy.jpg',
'signs class/levo.jpg',
'signs class/levo_pravo.jpg',
'signs class/levo_zapresheno.jpg',
'signs class/obgon_zapreshen.jpg',
82
'signs class/peshehodniy_perehod.jpg',
'signs class/pravo.jpg',
'signs class/prymo.jpg',
'signs class/prymo_levo.jpg',
'signs class/prymo_pravo.jpg',
'signs class/razvorot_zapreshen.jpg',
'signs class/stop.jpg',
'signs class/stoyanka.jpg',
'signs class/stoyanka_chet.jpg',
'signs class/stoynka_ne_chet.jpg',
'signs class/stoyanka_ostanovka.jpg']
json_file = open("model.json", "r")
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights("model.h5")
loaded_model.compile(
loss='categorical_crossentropy',optimizer='adam',
metrics=['accuracy'])
def detect_vehicles(gray_image,cascade):
features
=
cascade.detectMultiScale(gray_image,
minNeighbors=6,minSize=(35,35))
if len(features) == 0:
scaleFactor=1.1,
83
return []
else:
for (x, y, w, h) in features:
if w > 50 and h > 50:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(frame,
"Auto",
(x,
y
+
h
+
13),
cv2.FONT_HERSHEY_TRIPLEX, .5, (0, 255, 0))
def detect_pedestrians(gray_image,cascade):
features
=
cascade.detectMultiScale(gray_image,
scaleFactor=1.1,
minNeighbors=15,minSize = (26,74),maxSize = (70,174))
if len(features) == 0:
return []
else:
for (x, y, w, h) in features:
if w < 50 and h < 100:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
cv2.putText(frame,
"Peshehod",
(x,
y
+
cv2.FONT_HERSHEY_TRIPLEX, .5, (0, 0, 255))
def detect_blue_signs (frame):
hsv_img = cv2.cvtColor(gray_image, cv2.COLOR_BGR2HSV)
detect_color = cv2.inRange(hsv_img, (83,25,0), (176,255,200))
h
+
13),
84
cv2.imshow('1',detect_color)
edges = cv2.Canny(detect_color,10,20)
cv2.imshow('2', edges)
_,
contours,
_
=
cv2.findContours(edges,cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
for i in range(0, len(contours)):
cnt = contours[i]
s = cv2.contourArea(cnt)
p = cv2.arcLength(cnt,True)
if s!=0 and p!=0 and s/(p*p)>0.03 and s/(p*p)<0.07:
x, y, w, h = cv2.boundingRect(cnt)
if w>35 and h>35 and w<70 and h<70:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite('1.jpg', frame[y + 2:y + h - 2, x + 2:x + w - 2])
img = image.load_img('1.jpg', target_size=(48, 48))
x_1 = image.img_to_array(img)
x_1 = numpy.expand_dims(x_1, axis=0)
prediction = loaded_model.predict(x_1)
type_sign_1 = classes[numpy.argmax(prediction)]
s_img = cv2.imread(type_sign_1)
frame[y:y + s_img.shape[0], x:x + s_img.shape[1]] = s_img
85
def detect_red_signs(frame):
hsv_img = cv2.cvtColor(gray_image, cv2.COLOR_BGR2HSV)
detect_color = cv2.inRange(hsv_img,(0,59,70), (19,142,255))
edges = cv2.Canny(detect_color,10,20)
_,
contours,
_
=
cv2.findContours(edges,cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
for i in range(0, len(contours)):
cnt = contours[i]
s = cv2.contourArea(cnt)
p = cv2.arcLength(cnt,True)
if s!=0 and p!=0 and s/(p*p)>0.03 and s/(p*p)<0.07:
x, y, w, h = cv2.boundingRect(cnt)
if w > 35 and h > 35 and w < 70 and h < 70:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imwrite('2.jpg', frame[y + 2:y + h - 2, x + 2:x + w - 2])
img = image.load_img('2.jpg', target_size=(48, 48))
x_1 = image.img_to_array(img)
x_1 = numpy.expand_dims(x_1, axis=0)
prediction = loaded_model.predict(x_1)
type_sign_2 = classes[numpy.argmax(prediction)]
s_img = cv2.imread(type_sign_2)
frame[y:y + s_img.shape[0], x:x + s_img.shape[1]] = s_img
86
cascade_p = cv2.CascadeClassifier('class/MyPedestrian.xml')
cascade_v = cv2.CascadeClassifier('class/vehicleDetect.xml')
video = cv2.VideoCapture(0)
video.set(3,1920)
video.set(4,1080)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('camera.avi', fourcc, 30.0, (1920, 500))
while(video.isOpened()):
ret, frame = video.read()
if frame is None:
cv2.destroyAllWindows()
break
else:
frame = frame[0:500, 0:1920]
median = cv2.medianBlur(frame, 3)
gray_image = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
threading.Thread(target=detect_blue_signs(frame)).start()
threading.Thread(target=detect_red_signs(frame)).start()
threading.Thread(target=detect_vehicles(gray_image,cascade_v)).start()
threading.Thread(target=detect_pedestrians(gray_image,cascade_p)).start()
'''
87
cv2.waitKey(0)
if 0xFF in (ord('p'),ord('l')):
pass
'''
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF in (ord('q'),0x1B,0x0D):
break
video.release()
out.release()
cv2.destroyAllWindows()
from tensorflow.python.keras.preprocessing.image import ImageDataGenerator
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Conv2D, MaxPooling2D
from tensorflow.python.keras.layers import Activation, Dropout, Flatten, Dense
train_dir = 'train'
val_dir = 'val'
test_dir = 'test'
img_width, img_height = 48, 48
input_shape = (img_width, img_height, 3)
epochs = 60
88
batch_size = 16
nb_train_samples = 7800
nb_validation_samples = 1170
nb_test_samples = 1170
model = Sequential()
model.add(Conv2D(32, (3, 3), input_shape=input_shape))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(26))
model.add(Activation('softmax'))
89
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
train_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
val_generator = datagen.flow_from_directory(
val_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
test_generator = datagen.flow_from_directory(
test_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical')
90
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size)
scores = model.evaluate_generator(test_generator, nb_test_samples // batch_size)
print("Аккуратность на тестовых данных: %.2f%%" % (scores[1]*100))
print("Сохраняем сеть")
model_json = model.to_json()
json_file = open("model.json", "w")
json_file.write(model_json)
json_file.close()
model.save_weights("model.h5")
print("Сохранение сети завершено")
91
МИНиСтЕрство оБрАзовАниrI и нАуки росслйской ФЕшрАII,ILI
ФЕДЕРАJЪНОЕ ГОСУДАРСТВЕННОЕ БЮД{(EТНОЕ ОБРДЗОВДТЕJЪНОЕ
УЧРЕЖДЕНИЕ ВЫСIIIЕГО ОБРАЗОВАНИrI
корловскIй госудАрстввr*ъй унивЕрситЕт
иМЕНи И.С. ТУРГЕнЕВА)
удостовЕряюшцй JIист
К ВЫIТУСКНОЙ
КВАJIИФ@
Ns 166081
РАБОТЕ
на демонстрационный материаJI, цредставленный в элеrсгронном вIце
Сryлента IýKaHoBa Максrашrа
ВлqдимIФовшlа
цтифр 16б081
ИrrСТИТУГ ПРиборостроен}lя, автоматиз{щии и информационньD( технолоптй
Кафедра информационньD( систем
Напраыrепие 09.04.03 ПриклqдIая информатика
Направленность (профкпъ) Корпоративные информшlионные системы
Нмменование документа: .ЩемонстраIшонные ппакаты к вьлrrускной
квшификационной работе
,Щокумент разработаrr
:
Студент
,Щокумент согласовЕлн
IýKaHoB М.В.
:
ýководитель
ЦolcoB А.В.
Нормоконтроль
Загороднrоl
.Щокумент уrвержден:
Зав. кафедрой
Волков В.н.
Орел 2018
36
ИНФОРМАЦИОННО-ПОИСКОВАЯ ХАРАКТЕРИСТИКА
ДОКУМЕНТА НА ЭЛЕКТРОННОМ НОСИТЕЛЕ
Наименование
группы атрибутов
атрибута
1. Описание
Обозначение документа
документа
(идентификатор(ы)
файла(ов))
Наименование документа
2. Даты и время
3. Создатели
4. Внешние
ссылки
5. Защита
6. Характеристики
содержания
Характеристики документа
на электронном носителе
\Плакаты\Презентация.ppt
Демонстрационные плакаты
к выпускной
квалификационной работе
Класс документа
ЕСКД
Вид документа
Оригинал документа на
электронном носителе
Аннотация
Демонстрационный
материал, отображающий
основные этапы выполнения
выпускной
квалификационной работы
Использование документа Операционная система
Windows 7, Microsoft
PowerPoint 2010
Дата и время
26.06.2018
копирования документа
Дата создания документа 12.06.2018
Дата утверждения
25.06.2018
документа
Автор
Цуканов М.В.
Изготовитель
Цуканов М.В.
Ссылки на другие
Удостоверяющий лист
документы
№ 166081
Санкционирование
ОГУ имени И.С. Тургенева
Классификация защиты
По законодательству РФ
Объем информации
2 858 496 Б
документа
37
7. Структура
документа(ов)
Наименование плаката
(слайда) №1
Наименование плаката
(слайда) №2
Наименование плаката
(слайда) №3
Наименование плаката
(слайда) №4
Наименование плаката
(слайда) №5
Наименование плаката
(слайда) №6
Наименование плаката
(слайда) №7
Наименование плаката
(слайда) №8
Наименование плаката
(слайда) №9
Наименование плаката
(слайда) №10
Наименование плаката
(слайда) №11
Наименование плаката
(слайда) №12
Наименование плаката
(слайда) №13
Наименование плаката
(слайда) №14
Титульный лист
Цели и задачи
Существующие аналоги
Функциональные требования
Разработка алгоритма
распознавания объектов
Функциональная модель
системы распознавания
объектов
Физическая диаграмма
классов
Алгоритм обучения
нейронной сети
Обучающая выборка для
нейронной сети
Алгоритм загрузки
нейронной сети и разбиения
видеопотока на кадры
Алгоритм поиска пешеходов
и автомобилей
Алгоритм поиска и
классификации дорожных
знаков
Результат работы системы
Тестирование работы
системы
З
Орловский государственны й
университет иftr€нtr И.С. Тургенева
*ffirýп*fl[к*т
спрАвкА
о результатах проверки текстового документа
на наличие заимствований
Проверка выполнена в Gистеме
Антиплагиат.ВУ3
Автор работы
Цуканов Макsвм Владrrsвровt+l
Факульте1 кафедра,
номер группы
ИПАИТ, Икформационныё
Тип работы
Не
Название работы
Щуканов Максим Владимирович ВКР*Щуканов.dооt
Название файла
ВКР_Цyканов.dосх
Процент заимствования
Б,56%
Процент цитиро8ания
а,ц%
Процент оригинальности
14,м
,Щата
проверки
сиgтемы, 61ПИ-м
указано
13:18:07 25 июня 2оl8r.
Модули поиска
Сводная коллекция ЭБС; Коллекцип РГБ; Цитирование; Коллекция еLIBRARY-RU;
Модуль поиска Интернет; Модуль поtilска перефразирований еLIВRдRY.RU; Модyль
поиска перефразирован ий Интернет; Модуль поиска обцеупотребител ьных
выражений; Модуль поиска "ФГБоУ во огУ им. И.С.Тургенева"; Кольцо вров
Рабоry проверил
Сафкна Нина,Qмитриевна
ФИО проверяюцего
.Щата
подписи
Чтобы убедиться
спра8кя,
используйте QR-код, который
содержит ссылку на отчет.
в поминности
ia
о6.
1р/Fz
огвет на вопрос, является ли обнарркенное заимствование
корректным, система оставляет на усмотрение про8еряющего,
пр€досrавленная информация не подлежит использованию
в коммерческих целях.
1/--страниц
Пожаловаться на содержимое документа