Введение
Тема "Применение технического зрения в автомобильной промышленности" является весьма актуальной, поскольку в современные автомобили все более интегрируют различные технологии и системы искусственного интеллекта для повышения безопасности, удобства и эффективности вождения. В этом контексте использование технического зрения играет важную роль в различных аспектах автомобильной индустрии:
1. Безопасность вождения: Системы мониторинга и анализа технического зрения могут помочь водителям лучше понимать дорожную обстановку, обнаруживать препятствия и опасные ситуации на дороге, а также предотвращать столкновения.
2. Автопилоты и самоуправляемые автомобили: Техническое зрение является ключевым компонентом для развития автономных автомобилей, так как позволяет им распознавать дорожные знаки, маркировки, другие участники движения и принимать решения на основе этих данных.
3. Комфорт и удобство: Системы в автомобиле, опирающиеся на техническое зрение, могут помочь в улучшении парковки, навигации, адаптивного освещения и других аспектов, делая вождение более удобным и эффективным для водителей.
4. Экологическая эффективность: Применение технического зрения также может содействовать в оптимизации расхода топлива и снижении выбросов, помогая автомобилям оперативно адаптироваться к текущим условиям дорожного движения.
Целью работы является предложение рекомендаций по оптимизации систем технического зрения в автомобиле с целью повышения их надежности, точности и применимости в широком спектре условий и ситуаций на дороге.
Задачи работы включают в себя следующие пункты:
1.Объяснить понятие технического зрения
2.Исследовать современные достижения в области применения технического зрения в автомобиле
3.Проанализировать проблемы, с которыми сталкиваются разработчики при использовании технического зрения в автомобилях
4.Предложить способы решения проблем технического зрения в автомобильной отрасли
1 Понятие технического зрения
Техническое зрение – это область исследования, которая изучает способы и технологии компьютерного анализа изображений с целью понимания и интерпретации визуальной информации с помощью компьютеров и машин. Техническое зрение включает в себя методы обработки изображений, компьютерного зрения и машинного обучения для создания систем, способных распознавать, классифицировать и анализировать графические данные.
Системы технического зрения могут быть использованы для выполнения различных задач, таких как автоматическое распознавание объектов на изображениях, определение образов и шаблонов, измерение и анализ размеров объектов, обнаружение дефектов и многое другое. Такие системы находят применение во многих отраслях, включая производство, медицину, безопасность, транспорт и другие.
Использование технического зрения позволяет автоматизировать рутинные задачи, улучшить качество контроля и повысить эффективность процессов производства или обслуживания. Техническое зрение является важной технологией для развития автономных систем и искусственного интеллекта, которые могут "видеть" и воспринимать окружающий мир, как это делают люди.
1.1 Краткая история создания
История создания технического зрения берет свое начало во второй половине 20 века, вместе с развитием компьютеров и технологий обработки изображений. Первоначально идеи компьютерного зрения и анализа изображений появились в 1960-х годах, когда стали возникать потребности в создании систем, которые могли бы анализировать и распознавать изображения для различных приложений.
Одним из ключевых моментов в развитии технического зрения было создание первых методов распознавания образов и обработки изображений в 1970-х годах. В это время были разработаны алгоритмы для автоматического анализа и классификации изображений, а также для обнаружения и распознавания объектов на изображениях.
С развитием компьютеров и появлением новых технологий обработки изображений, техническое зрение стало все более продвинутой и широко применяемой областью. В 1980-х и 1990-х годах появились первые коммерческие решения в области технического зрения, которые использовались в промышленности для контроля качества продукции, автоматизации процессов и других приложений.
Сегодня техническое зрение продолжает активно развиваться, включая в себя использование машинного обучения, глубокого обучения и нейронных сетей для создания более точных и эффективных систем анализа изображений. Техническое зрение играет важную роль в решении различных задач в сферах промышленности, медицины, транспорта, робототехники и других областях, что делает его одним из ключевых направлений в развитии современных технологий.
Техническое зрение играет ключевую роль в автомобильной промышленности, привнося инновационные решения в области безопасности, автономного управления и улучшения пользовательского опыта. Рассмотрим достижения в данной сфере.
2 Достижения в сфере технического зрения в автомобильной промышленности
2.1 Системы помощи водителю
Системы помощи водителю (Advanced Driver Assistance Systems, ADAS) используют техническое зрение для обнаружения и анализа окружающей среды, предупреждения о потенциальных опасностях и автоматического управления определенными функциями автомобиля для обеспечения безопасного и удобного вождения. Рассмотрим более подробно, какие функции входят в системы помощи водителю, основанные на техническом зрении:
2.1.1. Система автоматического торможения: Система использует камеры и датчики для наблюдения за дорогой и другими транспортными средствами. Когда система обнаруживает возможное столкновение, она автоматически активирует тормоза или предупреждает водителя о необходимости торможения.
2.1.2. Система распознавания знаков дорожного движения
Камеры распознают дорожные знаки, такие как ограничение скорости, стоп-линии, запрещающие знаки и другие, и отображают их на панели приборов или на ветровом стекле для информирования водителя.
Применение системы распознавания дорожных знаков имеет широкий спектр применения и может быть полезным в различных областях. Далее перечислены несколько основных областей применения системы распознавания дорожных знаков.
1. Автомобильная промышленность: системы распознавания дорожных знаков используются в автомобилях для помощи водителям в обнаружении и распознавании дорожных знаков, предупреждении ограничений скорости, предупреждении об опасности и других ситуациях на дороге. Это помогает улучшить безопасность и комфорт вождения.
2. Умные города: системы распознавания дорожных знаков также применяются в умных городах для контроля и управления дорожным движением, мониторинга соблюдения правил дорожного движения и обеспечения безопасности пешеходов и водителей.
3. Системы безопасности: системы распознавания дорожных знаков могут быть использованы в системах безопасности для определения опасных ситуаций на дороге, предотвращения столкновений и уменьшения риска дорожно-транспортных происшествий.
Таким образом, системы распознавания дорожных знаков играют важную роль в повышении безопасности на дорогах, оптимизации дорожного движения и создании более умных и безопасных городов. Они широко применяются и продолжают развиваться для эффективного контроля и управления дорожным движением.
Алгоритм работы системы:
1. Предварительная обработка изображения: на этом этапе изображение с камеры автомобиля подвергается различным фильтрам и преобразованиям, таким как увеличение контрастности, уменьшение шума, выделение границ и т.д.
2. Выделение области интереса: система определяет и выделяет область, где вероятно находится знак дорожного движения.
3. Сегментация изображения: на этом этапе изображение разбивается на отдельные сегменты, что позволяет более точно определить форму и цвет знака.
4. Извлечение признаков: система определяет характеристики знака, такие как форма, цвет, текст и т.д.
5. Классификация знака: с использованием обученных моделей машинного обучения система определяет тип знака и его значения.
6. Решение задачи: система принимает решение о дальнейших действиях на основе распознанного знака, например, предупреждая водителя о возможной опасности или ограничивая скорость.
Для реализации этих этапов могут использоваться различные алгоритмы компьютерного зрения, такие как алгоритмы обработки изображений, сегментации, выделения признаков и классификации, а также методы машинного обучения, такие как нейронные сети, SVM и другие.
Для работы системы распознавания знаков дорожного движения в автомобиле могут использоваться различные аппаратные и программные компоненты. Некоторые из них включают в себя:
1. Камеры: обычно система распознавания знаков дорожного движения основывается на данных, полученных с камер, установленных на автомобиле. Камеры могут быть размещены на переднем или заднем стекле, на зеркалах заднего вида или на кузове.
2. Процессор: для обработки изображений с камер и выполнения вычислительных алгоритмов распознавания знаков требуется мощный процессор, который может быть встроен в систему информационно-развлекательного устройства или быть отдельным компонентом.
3. Сенсоры: помимо камер, для эффективной работы системы распознавания знаков дорожного движения могут использоваться различные сенсоры, такие как радары, лидары или ультразвуковые сенсоры, для дополнительной информации об окружающей среде.
4. GPS: для уточнения местоположения автомобиля и сопоставления распознанных знаков со схемой дороги и известными регулированиями дорожного движения может использоваться GPS-модуль.
5. Система хранения и передачи данных: для хранения данных о распознанных знаках, а также для их передачи на приборную панель автомобиля или водителю может использоваться специальная система хранения и передачи данных.
В зависимости от производителя и модели автомобиля могут использоваться различные технологии и компоненты для реализации системы распознавания знаков дорожного движения.
Система распознавания знаков дорожного движения может быть усовершенствована с помощью использования нейронных сетей. Нейронные сети представляют собой модели, которые могут обучаться на больших объемах данных и автоматически извлекать признаки из изображений, что делает их эффективными инструментами для распознавания знаков дорожного движения.
Применение нейронных сетей в системе распознавания знаков дорожного движения может включать следующие шаги:
1. Подготовка данных: собранные изображения знаков дорожного движения могут быть использованы для обучения нейронной сети. Изображения могут быть размечены с указанием типа знака, что позволяет нейронной сети учиться распознавать различные классы знаков.
2. Обучение нейронной сети: обучение нейронной сети происходит путем предъявления ей обучающих примеров (изображений знаков) и коррекции ее параметров в процессе обучения. Нейронная сеть постепенно улучшает свои предсказательные способности и научившись определять признаки знаков.
3. Тестирование и оценка: после обучения нейронной сети ее работоспособность проверяется на тестовом наборе данных для оценки качества распознавания знаков.
4. Интеграция в систему распознавания знаков дорожного движения: обученная нейронная сеть может быть интегрирована в систему распознавания знаков для автоматического определения и классификации знаков на изображениях, полученных с камер на автомобиле.
Использование нейронных сетей позволяет улучшить точность распознавания знаков дорожного движения, а также обеспечить быструю работу системы в реальном времени.
Также существует несколько других способов улучшить систему распознавания знаков дорожного движения:
1. Обновление базы данных знаков: постоянное обновление базы данных знаков дорожного движения в системе позволяет распознавать новые знаки, появляющиеся на дорогах, а также улучшить точность распознавания существующих знаков.
2. Улучшение алгоритмов распознавания: разработка и применение более точных и эффективных алгоритмов распознавания знаков дорожного движения может значительно улучшить производительность системы.
3. Использование многоуровневых подходов: комбинация различных методов распознавания, таких как обработка изображений, машинное обучение и нейронные сети, может обеспечить более надежное и точное распознавание знаков.
4. Улучшение качества изображений: использование камер более высокого разрешения и качества позволяет получать четкие и качественные изображения, что улучшает возможности системы в распознавании знаков.
5. Добавление дополнительных сенсоров: использование дополнительных сенсоров, таких как радары или лидары, может помочь системе в лучшем понимании окружающей обстановки и более надежно распознавать знаки.
6. Контроль качества данных: регулярная проверка качества данных, поступающих на обработку в систему, поможет избежать ошибок и улучшить точность распознавания знаков.
Внедрение этих улучшений позволит значительно повысить эффективность и надежность системы распознавания знаков дорожного движения, что в итоге приведет к улучшению безопасности на дорогах.
Мною была выполнена лабораторная работа по предмету “Системы технического зрения”, целью которой являлось составить программу, способную считывать определенные знаки дорожного движения и выдавать информацию о них на экран. Отчет по выполненной работе находится в приложении А.
2.1.3. Система контроля полосы движения: Камеры определяют положение автомобиля на дороге и могут предупреждать водителя о выезде за пределы полосы движения или даже корректировать направление движения автомобиля.
2.1.4. Система контроля слепых зон: Камеры и датчики определяют наличие других транспортных средств в слепых зонах автомобиля и предупреждают водителя о возможной опасности при перестроении.
2.1.5. Система адаптивного круиз-контроля: Система поддерживает установленную скорость автомобиля и автоматически приспосабливает ее к движению перед ними транспортными средствами, обеспечивая безопасное и комфортное движение.
Техническое зрение в системах помощи водителю играет ключевую роль в повышении безопасности на дорогах, сокращении аварий и улучшении удобства вождения. В сочетании с другими технологиями, такими как радары, лидары и системы GPS, системы помощи водителю создают интеллектуальное окружение в автомобиле, снижающее риски и повышающее уровень комфорта водителя.
2.2 Автономные транспортные средства
Автономные транспортные средства (АТС) представляют собой транспортные средства, способные автоматически выполнять определенные функции вождения без участия человека. Различают несколько уровней автономности, определенных системой SAE International:
1. Уровень 0: Водитель полностью контролирует все аспекты вождения, транспортное средство лишь предоставляет информацию водителю.
2. Уровень 1: Системы помощи водителю могут контролировать определенные функции вождения, такие как круиз-контроль или автоматическое торможение, но водитель должен оставаться на месте и иметь возможность вмешаться.
3. Уровень 2: Автомобиль может выполнять определенные функции вождения, такие как управление и ускорение, в определенных условиях. Водитель должен поддерживать внимание на дороге и быть готов вмешаться.
4. Уровень 3: Автомобиль способен выполнять большинство функций вождения в определенных условиях, включая мониторинг дорожной среды. Водитель может отвлечься от вождения, но должен быть готов взять управление в сложной ситуации.
5. Уровень 4: Транспортное средство может выполнять все функции вождения в определенных условиях без участия человека. Водитель не требуется находиться за рулем, но может вообще отсутствовать в кабине.
6. Уровень 5: Полностью автономное транспортное средство, которое способно выполнять все функции вождения в любых условиях без участия человека.
Основные компоненты автономных транспортных средств:
1. Датчики: На автомобиле устанавливаются различные датчики, такие как радары, лидары, камеры и ультразвуковые сенсоры, для мониторинга окружающей среды.
2. Компьютеры и программное обеспечение: Автомобиль оснащается специализированными компьютерами, которые обрабатывают данные от датчиков, принимают решения и управляют транспортным средством.
3. Система позиционирования: Глобальная система позиционирования (ГЛОНАСС, GPS) используется для определения местоположения автомобиля на дороге.
4. Коммуникационные технологии: Автомобиль может обмениваться данными с другими транспортными средствами, инфраструктурой и центральной системой для обеспечения безопасности и эффективности движения.
Автономные транспортные средства представляют большой потенциал для улучшения безопасности на дорогах, снижения аварий и улучшения комфорта вождения. Такие транспортные средства могут быть особенно полезны в условиях тяжелого дорожного движения и на долгих дистанциях. Однако, для полной интеграции автономных транспортных средств в дорожную инфраструктуру и общественное сознание необходимо решить множество технических, юридических и этических вопросов.
2.3 Системы парковки
Системы парковки - это технологии и устройства, которые облегчают процесс парковки автомобилей. Существует несколько различных типов систем парковки, которые могут быть установлены на транспортные средства или использоваться для автоматизации парковочного процесса. Рассмотрим основные типы систем парковки:
1. Парктроники: Это самая распространенная система парковки, которая использует ультразвуковые сенсоры, установленные в бамперах автомобиля. Парктроники издают звуковой сигнал водителю, когда автомобиль находится на опасно близком расстоянии к препятствию.
2. Камеры заднего вида: Системы камер заднего вида позволяют водителям наблюдать за обстановкой сзади автомобиля на центральном дисплее или в зеркале заднего вида. Это помогает увидеть препятствия и облегчает процесс парковки.
3. Системы автопарковки: Некоторые автомобили оснащены специальными системами автопарковки, которые могут автоматически выполнять параллельную парковку или парковку вдоль тротуара. Водитель лишь управляет педалями и переключателями, а система управляет управлением.
4. Системы навигации с поддержкой парковки: Некоторые автомобильные навигационные системы обладают функциями, позволяющими искать свободные парковочные места, рассчитывать маршрут к ним и предупреждать водителя о наличии мест.
Системы парковки играют важную роль в снижении аварий и повреждений автомобилей при парковке. Они упрощают жизнь водителей, снижают стресс и улучшают общую безопасность на дорогах. С развитием технологий системы парковки становятся все более интеллектуальными и автоматизированными, делая процесс парковки более удобным и безопасным.
2.4 Мониторинг водителя
Мониторинг водителя с использованием технического зрения – это специальные системы, которые используют камеры и датчики для отслеживания поведения водителя за рулем. Эти системы играют важную роль в повышении безопасности на дорогах, предотвращении аварий и снижении усталости водителя. Рассмотрим подробнее основные аспекты мониторинга водителя с использованием технического зрения:
1. Камеры наблюдения: Системы мониторинга водителя обычно включают в себя камеры, установленные в салоне автомобиля, которые наблюдают за поведением водителя. Камеры могут отслеживать положение глаз водителя, его мимику, жестикуляцию, а также мониторить уровень внимания и усталость.
2. Датчики уровня усталости: Некоторые системы мониторинга водителя используют датчики, которые анализируют движения глаз водителя и его поведение за рулем, чтобы определить его уровень усталости. В случае обнаружения снижения внимания или усталости, система может предупредить водителя или активировать систему предупреждения о нарушении дорожного положения.
3. Распознавание жестов и звуков: Некоторые системы мониторинга водителя могут распознавать не только движения глаз и лица, но и жесты рук и другие звуковые сигналы. Например, система может реагировать на отвлечение водителя от дороги, незаконные маневры или другие опасные действия.
4. Предупреждение о состоянии водителя: В случае обнаружения признаков усталости, отвлечения или других опасных действий со стороны водителя, система может принимать различные меры предупреждения. Например, она может выдать звуковой или световой сигнал, активировать управляемые помощники, снизить скорость или автоматически вызвать аварийную службу.
Системы мониторинга водителя с использованием технического зрения помогают снижать вероятность происшествий на дорогах, обеспечивать безопасность как водителя, так и пассажиров, а также повышать эффективность управления автомобилем. Такие системы становятся все более популярными и важными для современных автомобилей, помогая предотвращать аварии и снижать риски на дорогах.
3. Проблемы технического зрения в автомобильной промышленности
3.1 Точность и надежность
Проблема "точность и надежность" технического зрения включает в себя несколько аспектов, которые играют важную роль в разработке и применении систем мониторинга водителя. Рассмотрим более подробно эти аспекты:
1. Точность распознавания: Одним из ключевых вызовов является обеспечение высокой точности системы распознавания данных, получаемых от камер и датчиков системы мониторинга водителя. Точность определения положения глаз, мимики лица, жестов и других параметров важна для правильной интерпретации действий и состояния водителя.
2. Надежность работы: Для систем мониторинга водителя критично обеспечение высокой надежности работы, чтобы минимизировать возможность ложных срабатываний или ошибок в интерпретации данных. Надежность системы включает в себя стабильную работу датчиков и камер, а также надежную передачу и обработку данных.
3. Быстродействие: Еще одним вызовом является необходимость быстрого и эффективного обнаружения изменений в поведении водителя. Система мониторинга должна быть способна мгновенно реагировать на опасные ситуации и предупреждать водителя о возможных рисках.
Для успешного преодоления вызовов "точности и надежности" в системах мониторинга водителя важно уделять особое внимание разработке высокоточных алгоритмов анализа данных, использованию качественного оборудования и тщательному тестированию системы в различных условиях эксплуатации. Только в этом случае можно обеспечить эффективную работу системы мониторинга и повысить безопасность на дорогах.
3.2 Адаптация к разнообразным условиям
Проблема "Адаптация к разнообразным условиям" технического зрения означает способность системы мониторинга или распознавания образов успешно функционировать в различных, часто изменяющихся, условиях окружающей среды. Рассмотрим более подробно, как это проявляется и какие аспекты нужно учитывать для успешной адаптации:
1. Освещение и условия освещенности: Один из наиболее критических аспектов адаптации – это способность системы работать в широком диапазоне условий освещенности. Это включает в себя возможность обнаружения объектов и распознавания данных как в условиях яркого света, так и в низкой освещенности или в условиях ночного видения.
2. Климатические условия: Системы мониторинга должны адаптироваться к различным климатическим условиям, таким как повышенная влажность, экстремальные температуры, пыль, снег и дождь. Важно, чтобы оборудование системы работало надежно и стабильно в любых погодных условиях.
3. Различные типы дорог и покрытий: Для успешной адаптации системы мониторинга нужно учитывать различные типы дорожных покрытий, разметки, рельефа и других особенностей дороги. Это поможет обеспечить правильную интерпретацию данных и улучшить точность работы системы.
4. Сигналы и помехи: Системы мониторинга должны быть способными адаптироваться к различным типам сигналов и помех, которые могут влиять на работу оборудования. Например, могут возникать электромагнитные помехи, перекрытие сигналов или другие внешние воздействия, которые могут повлиять на качество сбора и обработки данных.
5. Динамические изменения окружающей среды: Неконтролируемые факторы, такие как движение других транспортных средств, пешеходов, животных или различные объекты, также могут оказывать влияние на работу системы мониторинга. Важно, чтобы система могла адаптироваться к таким динамическим изменениям окружающей среды.
Для успешной адаптации к разнообразным условиям, системы мониторинга должны быть оснащены современными технологиями, такими как искусственный интеллект и машинное обучение, которые позволяют системе быстро и эффективно реагировать на изменения окружающей среды. Также важно проводить регулярное тестирование и обновление оборудования и программного обеспечения, чтобы удерживать систему на высоком уровне работоспособности в различных условиях эксплуатации.
3.3 Конфиденциальность данных
Проблема "Конфиденциальность данных" технического зрения означает обеспечение сохранности информации, передаваемой и обрабатываемой с помощью технических устройств и систем. Рассмотрим более подробно, как этот вызов реализуется и какие аспекты нужно учитывать для обеспечения конфиденциальности данных:
1. Шифрование данных: Один из наиболее важных аспектов обеспечения конфиденциальности данных – это использование шифрования. Шифрование позволяет защитить информацию от несанкционированного доступа путем преобразования данных в зашифрованную форму, которая может быть расшифрована только с помощью правильного ключа.
2. Аутентификация и авторизация: Для предотвращения несанкционированного доступа к данным особенно важно использовать механизмы аутентификации (подтверждение подлинности пользователей) и авторизации (определение прав доступа пользователей к информации). Это позволяет контролировать доступ к данным и обеспечить, что только уполномоченные пользователи могут получить к ним доступ.
3. Физическая безопасность: Технические устройства и системы, обрабатывающие конфиденциальные данные, должны быть защищены от физического доступа несанкционированных лиц. Это может включать в себя использование биометрической идентификации, ограничение доступа к серверам и базам данных, а также другие меры безопасности.
4. Мониторинг и аудит безопасности: Важно вести систематический мониторинг и аудит безопасности системы, чтобы быстро обнаруживать любые аномалии или необычную активность, которая может указывать на потенциальные угрозы для конфиденциальности данных. Это поможет оперативно реагировать на инциденты безопасности и предотвращать утечки информации.
5. Обучение персонала: Важно проводить обучение персонала по правилам безопасности и конфиденциальности данных, чтобы сотрудники правильно использовали технические устройства и системы, и не создавали уязвимости в процессе работы. Обучение должно включать в себя процедуры обработки и хранения конфиденциальной информации, а также действия в случае возникновения инцидентов безопасности.
Для успешного решения проблемы "Конфиденциальность данных" технического зрения, необходимо комплексный подход к обеспечению безопасности данных, который включает в себя использование современных методов шифрования, механизмов аутентификации и авторизации, физическую безопасность, мониторинг и аудит безопасности, а также обучение персонала.
3.4 Обучение и регулирование
Проблема "Обучение и регулирование" технического зрения подразумевает не только обучение персонала в области технологий и технических навыков, но также создание и соблюдение правил и нормативов, регулирующих работу в технической области. Давайте рассмотрим более подробно, как этот вызов реализуется и какие аспекты нужно учитывать:
1. Обучение персонала: Одним из ключевых аспектов вызова "Обучение и регулирование" является обучение персонала. Это включает в себя не только получение технических знаний и навыков, необходимых для работы с техническими системами, но также обучение в области безопасности, соблюдения процедур и стандартов работы, этики и др.
2. Соблюдение правил и нормативов: Регулирование в технической области включает в себя создание и соблюдение правил, стандартов, законов и нормативов, регулирующих работу в этой области. Это включает в себя соблюдение законодательства, стандартов безопасности и т. д.
3. Актуализация знаний и обновление навыков: Техническое обучение и регулирование также включает в себя постоянное обновление знаний и навыков персонала в соответствии с быстрыми изменениями в технологической сфере. Это может включать в себя прохождение курсов повышения квалификации, участие в конференциях и семинарах, чтение специализированной литературы и т. д.
Эффективное обучение и регулирование в технической области позволяет снизить риски, связанные с ошибками персонала, улучшить безопасность информации и эффективность работы технических систем. Для успешной реализации вызова необходим комплексный подход, который включает в себя не только обучение персонала, но также создание соответствующих правил и нормативов, обеспечение безопасности информации и поддержку культуры безопасности в организации.
Приложение А
Введение
В данной теоретической части лабораторной работы будут описаны основные классы, используемые в основном коде лабораторной. Canny Edge Detector был разработан Джоном Ф. Канни в 1986 году. Алгоритм Canny направлен на удовлетворение трех основных критериев:
1. Низкая частота ошибок: означает хорошее обнаружение только существующих краев.
2. Хорошая локализация: расстояние между обнаруженными краевыми пикселями и реальными краевыми пикселями сведена к минимуму.
3. Минимальный отклик: только один отклик на каждый край.
Этапы реализации функции:
1. Фильтрация любых шумов. Для этого используется фильтр Гаусса. Пример гауссова ядра размером = 5, которое можно использовать, показан ниже
2. Поиск градиента интенсивности изображения. Используется процедура аналогичная Собелю:
a. Применение пары масок свертки (в направлениях x и y):
b. Нахождение силы и направления градиента с помощью
Направление округляется до одного из четырех возможных углов (а именно 0, 45, 90 или 135).
1. Применение не максимального подавления. То есть удаление пикселей, которые не считаются частью края. Следовательно, остаются только тонкие линии (потенциальные грани).
2. Гистерезис: последний шаг. Canny использует два порога (верхний и нижний):
a. Если градиент пикселя превышает верхний порог, пиксель принимается в качестве грани.
b. Если значение градиента пикселя ниже нижнего порога, то оно отклоняется.
c. Если градиент пикселя находится между двумя пороговыми значениями, он будет принят только в том случае, если он связан с пикселем, превышающим верхний порог.
1 Описание написанного кода
Программа будет состоять из нескольких блоков.
В начале кода происходит подключение библиотеки OpenCV и библиотеки для вывода текста в консоль. Во второй части кода определяется пространство имен.
Необходимо определить класс SimpleHist с переменными red, yellow, blue, black, а также присвоить им числовые значения равные 0.
Функция count_colors вычисляет процентное соотношение красной, жёлтой, синей, черной компоненты на изображении "frame" .
Класс "Mat" представляет собой одномерный числовой массив, его можно использовать для хранения изображений, в данный класс будет записываться считанный кадр из видеофайла Mat frame.
Описанный выше код программы считает количество пикселей красного, жёлтого, синего, чёрного цвета.
Для упрощения понимания раннее полученные значения переводятся в проценты. Данный этап необходим для определения классификации дорожных знаков.
Rect area_sign определяет область интереса на изображении, такой же код, но для Python использовался в прошлой лабораторной работе. Где 400 это х-координата верхнего левого угла области, 200 это y-координата верхнего левого угла области, 240 ширина области интереса в пикселях, а 120 высота области интереса в пикселях.
VideoCapture — это класс для захвата видео из видеофайлов или камер. Открывается видеофайл left.avi. Метод "isOpened()" возвращает true, если камера или видеофайл были открыты, false если нет.
Функция cap.isOpened проверяет открыта ли камера или видеофайл.
Если нет, то выводится сообщение "Unable to open video source".
Оптимальным размером кадра будет считаться кадр величиной 640x480, для ускорения процесса распознавания дорожных знаков из видеофайла. Изменение размеров файла меняется в WIDTH и HEIGHT.
Затем идет цикл, в котором происходит ожидание нового кадра из видеофайла и сохраняется это в «frame». Проверяется успешно ли считан кадр с помощью метода
«empty», где значение true если в массиве "Mat" нет элементов, если значение false, то цикл заканчивается, и программа переходит к следующему этапу.
Rectangle обозначает область появления дорожных знаков прямоугольником синего цвета так как (255, 0, 0) где 255 это Blue, 0 это Green и 0 это Red.
Далее идет основная часть с распознаванием знаков на изображении с помощью OpenCV с помощью структуры SimpleHist.
Создается копия кадра с помощью copy_frame. Необходимо перевести кадр из BGR в оттенки серого для выделения контуров. Образуется массив vector<point> с найденными контурами на изображении и создается аппроксимированный контур с помощью approx.
Следующим этапом необходимо найти все контуры на изображении с помощью функции findContours, это универсальная функция библиотеки OpenCV.
Идет поиск всех найденных контуров в цикле и аппроксимируется контур до более простой фигуры, где "contours" - входной контур для аппроксимации, а "approx" - выходной аппроксимированный контур.
Далее вычисляется площадь контура с помощью функции "contourArea". Где "fabs" возвращает положительное значение (беззнаковое) с плавающей точкой (поэтому не "abs"), а "area" - площадь контура.
Игнорируются малые или незамкнутые контуры с помощью обрезания площади менее чем 700 пикселей.
Узнаётся, в каком месте кадра находится контур, с помощью функции "boundingRect". "approx" - контур, расположение которого необходимо узнать, "boundingarea" - область, в которой находится контур, "boundingarea.x" - x координата верхнего левого края области, "boundingarea.y" - y координата верхнего левого края области, "boundingarea.width" - ширина области, а "boundingarea.height" - высота области.
Вырезается из всего кадра область boundingarea. Подсчитывается процентное соотношение красного, жёлтого, синего и чёрных цветов на вырезанной области, "rr" - область для подсчёта, а "colors" - структура с соотношением цветов на изображении.
Следующим этапом идет пример распознавания знаков на изображении.
Исходя из видеофайла было удобно определить знак направления движения используя положение стойки стрелки, то есть если стойка стрелки находится слева, то это знак "движение направо" и наоборот. Для нахождения положения стойки стрелки используется всего одна строчка пикселей в нижней части знака.
Если более 60% пикселей имеют синий цвет, то рассчитывается положение строчки пикселей для сканирования. Количество белых пикселей равно 0 и сумма х-координат белых пикселей в строчке тоже равна 0.
Просматриваются по пикселям строки, пропуская 4 первых и 4 последних пикселя, если нашелся белый пиксель в строке, то увеличивается счетчик белых пикселей на 1 с добавлением х-координаты белого пикселя.
После этого проверяется количество найденных белых пикселей, если количество белых пикселей меньше 1, то цикл продолжается, если нет то происходит сканирование пикселей снова.
Далее узнается положение белой стойки стрелки с помощью float center. А также положенпе в процентах float light_position.
Затем определяется какой знак направления нашелся, если положение больше или равно 60%, то знак движения налево (рисунок 1.1), если больше или равно 40%, то знак движения прямо (рисунок 1.2), а если больше или равно 10%, то направо (рисунок 1.3).
Также, было реализовано распознавание знака “кирпич”. Для этого происходит следующее. Принцип работы такой же, как и в случае с синими знаками. Отличия начинаются в моменте определения преобладающего цвета в кадре. Если более 60% пикселей имеют красный цвет, то знак по умолчанию принимается знаком “кирпич” (рисунок 1.4).
Код, с помощью которого было реализовано распознавание знаков, представлено в приложении А.
Заключение
В ходе работы был протестирован и изменён код для распознавания дорожных знаков. Можно отметить, что программа довольно точно производит распознавание знаков дорожного движения. В ходе работы было столкновение с небольшой трудностью, которая заключалась в установке библиотеки OpenCV.
Приложение А
Листинг 1
#include <iostream>
#include "opencv2\opencv.hpp"
using namespace cv;
using namespace std;
struct SimpleHist {
int red,
yellow,
blue,
black;
SimpleHist(int red_ = 0, int yellow_ = 0, int blue_ = 0, int black_ = 0) :
red(red_),
yellow(yellow_),
blue(blue_),
black(black_)
{}
};
SimpleHist count_colors(Mat& frame) { //вычисляет процентное соотношение красной, жёлтой, синий,
//черной компоненты на изображении "frame"
SimpleHist colors;
for (size_t y = 0; y < frame.rows; y++) {
for (size_t x = 0; x < frame.cols; x++) {
Vec3b pixel = frame.at<Vec3b>(Point(x, y));
if ((pixel[0] <= 100 && abs(pixel[0] - pixel[1]) < 25 &&
abs(pixel[0] - pixel[2]) < 25 && abs(pixel[2] - pixel[1]) < 25))
colors.black++;
if (pixel[2] > (pixel[1] + pixel[0]) * 0.7)
colors.red++;
if ((pixel[0] - max(pixel[1], pixel[2])) > 10)
colors.blue++;
if (pixel[1] - pixel[0] > 20 && pixel[2] - pixel[0] > 20)
colors.yellow++;
}
}
// считает количество пикселей красного, жёлтого, синего, чёрного цвета с //помощью выражений
float count = frame.cols * frame.rows;
// вычисление процентного соотношения цветов
colors.red = (float)colors.red / count * 100;
colors.yellow = (float)colors.yellow / count * 100;
colors.blue = (float)colors.blue / count * 100;
colors.black = (float)colors.black / count * 100;
return colors;
}
SimpleHist count_colors(Mat& frame);
int main()
{
Rect area_sign(150, 150, 200, 200); // область интереса изображения
// x y wdt hgt
Mat frame;
VideoCapture cap(0);
if (!cap.isOpened()) {
cout << "Unable to open video source" << endl;
return 1;
}
cap.set(cv::CAP_PROP_FRAME_WIDTH, 640); // задаётся размер видео
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
while (1) {
cap.read(frame); // покадровое считывание видео
if (frame.empty())
continue;
rectangle(frame, area_sign, Scalar(0, 255, 0), 5); // кадр, цвет и область появления знака
SimpleHist colors;
Mat result, copy_frame; // создание копии кадра
frame(area_sign).copyTo(result);
frame(area_sign).copyTo(copy_frame);
cvtColor(result, result, COLOR_BGR2GRAY);
vector < vector < Point > > contours; // вектор с найденными контурами
vector < Point > approx; // выходной аппроксимированный вектор
Canny(result, result, 50, 150, 3);
findContours(result, contours, RETR_TREE, CHAIN_APPROX_SIMPLE); //функция нахождения контуров
int jj = 0;
for (size_t i = 0; i < contours.size(); i++) {
jj++;
approxPolyDP(Mat(contours[i]), approx, 5, true);
double area = fabs(contourArea((Mat)contours[i])); // вычисление площади контура
if (area < 700) // обрезание нещамкнутые и малые площади
continue;
Rect boundingarea = boundingRect(approx); // нахождение места на кадре, где находится контур
double ratio = (double)boundingarea.width / (double)boundingarea.height; //
if (ratio < 0.7 || ratio > 1.3)
continue;
Mat rr = copy_frame(boundingarea); // область подсчёта процентного соотношения цветов
colors = count_colors(rr);
// cout << "RED:" << colors.red << "BLUE:" << colors.blue << "BLACK:" << colors.black << endl;
if (colors.blue > 60) {
int scan_row = rr.rows * 0.7,
white_pixels = 0,
pixels_offset = 0;
for (int offset = 4; offset < (rr.cols - 4); offset++) {
if (((rr.at <Vec3b>(Point(offset, scan_row))[2]) > 90) &&
((rr.at <Vec3b>(Point(offset, scan_row))[1]) > 90) &&
((rr.at <Vec3b>(Point(offset, scan_row))[0]) > 90))
{
white_pixels++;
pixels_offset += offset;
}
}
if (white_pixels < 1)
continue;
float center = pixels_offset / white_pixels;
float light_position = center / rr.cols;
// cout << light_position << endl;
if (light_position >= 0.6)
cout << "LEFT BLUE" << endl;
else if (light_position >= 0.4)
cout << "FORWARD BLUE" << endl;
else if (light_position >= 0.1)
cout << "RIGHT BLUE" << endl;
}
if (colors.red > 60) {
int scan_row = rr.rows * 0.7,
white_pixels = 0,
pixels_offset = 0;
for (int offset = 4; offset < (rr.cols - 4); offset++) {
if (((rr.at<Vec3b>(Point(offset, scan_row))[2]) > 90) &&
((rr.at<Vec3b>(Point(offset, scan_row))[1]) > 90) &&
((rr.at<Vec3b>(Point(offset, scan_row))[0]) > 90))
{
white_pixels++;
pixels_offset += offset;
}
}
if (white_pixels < 1)
continue;
float center = pixels_offset / white_pixels;
float light_position = center / rr.cols;
// cout << light_position << endl;
if (light_position >= 0.6)
cout << "LEFT RED" << endl;
else if (light_position >= 0.4)
cout << "STOP RED" << endl;
else if (light_position >= 0.1)
cout << "RIGHT RED" << endl;
}
}
imshow("frame", frame);
if (waitKey(50) >= 0)
break;
}
return 0;
}