Восьмой запуск Starship
Восемь жизней куба в Blender
Испытания для роботов
Новые MacBook и iPad Air
Посадка на Луну

OpenCV для детектирования дорожных знаков

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

Принцип работы программы заключается в следующем: на вход подается изображение, где предварительно мы ожидаем детектировать дорожный знак. При этом работа с видео такая же, так как в таком случае видео покадрово передается в программу и дальнейший алгоритм не отличается. Обычно все изображения, привычные нашему глазу, находятся в формате RGB. С ним неудобно работать, так как падение тени или свечение солнца будут сильно искажать оттенки цвета. А работа программы основана именно на определении цвета. Поэтому первым шагом будет переход в цветовое пространство HSV. Здесь мы уже будем накладывать цветовой фильтр, который будет разрешать только те цвета, которые встречаются в дорожных знаках. Чтобы в контурах не было разрывов, сгладим разрешенные пиксели. Далее рисуем контуры вокруг разрешенных пикселей. Чтобы не было много лишних, можно поставить ограничения по площади контура, например, в данном случае контур должен находиться в пределе от 400 до 10000 пикселей.

def detectionRED(frame, spisok): """ В качестве аргумента функция принимает кадр, переводит в цветовой формат hsv, накладывает маску только красного цвета, сглаживает области и находит контуры. Цикл оставляет контуры, подходящие по размеру, и отрисовывает их. Функция возвращает кадр, с нарисованными контурами""" cv.imshow('img', frame) frame_hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV) cv.imshow('frame0', frame_hsv) frame_mask = cv.inRange(frame_hsv, (0, 162, 67), (255, 255, 255)) cv.imshow('frame1', frame_mask) frame_dilate = cv.dilate(frame_mask, None, iterations=2) cv.imshow('frame2', frame_dilate) contours, hierarchy = cv.findContours(frame_dilate.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE) sort = spisok for i in contours: area = cv.contourArea(i) if 400 < area < 10000: # можно регулировать дальность sort.append(i) cv.drawContours(frame, sort, -1, (0, 23, 44), 2) return frame, sort

Поэтапно все действия с изображением представлены на фото ниже.

OpenCV для детектирования дорожных знаков

Остается только вырезать дорожные знаки с изображения и сохранить отдельным файлом.

def detectionIMAGE(image_name): """ Функция принимает в качестве аргумента название изображения. Передает в функции отрисовывания контуров и возвращает изображение с нарисованными контурами. Для выхода нажмите кнопку "Esc". """ start_time = time.time() image = cv.imread(image_name) print(type(image)) cadr = cv.imread(image_name) spisok = [] frame, sort = dtRED(image, sort) while True: cv.drawContours(frame, sort, -1, (0, 234, 135), 2) cv.imshow('frame', frame) (x, y, w, h) = cv.boundingRect(sort[0]) detect = cadr[y:y + h, x:x + w] cv.imshow('q', detect) (x, y, w, h) = cv.boundingRect(sort[1]) detect = cadr[y:y + h, x:x + w] cv.imshow('r', detect) (x, y, w, h) = cv.boundingRect(sort[2]) detect = cadr[y:y + h, x:x + w] cv.imshow('u', detect) end_time = time.time() if cv.waitKey(1) == 27: break print('Время выполнения:', end_time - start_time) return frame
OpenCV для детектирования дорожных знаков

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

OpenCV для детектирования дорожных знаков

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

OpenCV для детектирования дорожных знаков
OpenCV для детектирования дорожных знаков

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

11
реклама
разместить
Начать дискуссию
СК завёл против блогера Александры Митрошиной уголовное дело об отмывании денег

В 2023-м она была фигурантом дела о неуплате 127 млн рублей налогов.

Источник: «<a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Ft.me%2Fskmoscowgsu%2F4453&postId=1852382" rel="nofollow noreferrer noopener" target="_blank">Столичный СК</a>»
55
33
33
11
реклама
разместить
Приезжайте к нам в Германию, у нас айтишники живут в коммуналках и пляшут с бубном, чтобы выжить

За 6 лет я успела поработать в трех крупных IT-компаниях, несколько раз меняла жилье и переехала из Мюнхена в Берлин. В статье я расскажу про немецкую бюрократию, налоги и почему даже айтишники с высокими зарплатами живут в коммуналках. А еще, как в Германии искать работу и жилье, сколько стоит здесь лечиться и жить, и как вы можете остаться без ви…

У меня дом 2016 года постройки. Это не лучшее фото фасада — я сделала снимок, чтобы показать последствия новогодних празднований в Берлине. Кто-то запустил фейерверк — квартира сгорела, фасад на несколько этажей закоптился. Но в целом дом чистый и уютный.
5757
66
44
22
11
Знакомый вернулся из Германии после трех лет работы там. Говорит, что не выдержал именно бюрократии и того, что к русским относятся как к людям второго сорта. В статье автор это деликатно обходит, но это реальность.
Как от меня с сессии наставничества убежал мой клиент? Делюсь с вами интересной историей, которая произошла пару недель назад.

Работаю с предпринимателем более 2-х месяцев. На этой неделе встречаюсь с ним на коуч сессии и начинаем работу, в процессе ведения сессии и задавания вопросов захожу в тему Денег.

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

Это поможет фильтровать входящие сообщения и избавиться от спама, считают в компании.

1010
55
44
33
33
11
Я вообще за то, чтобы только премиум пользователи сидели в нем, а то если денег нет - то пусть не сидят в тг
«Русского Boeing пока не появилось»: главное из интервью главы торговой палаты США в России

Исполнительный директор AmCham Russia Роберт Эйджи в разговоре с РБК порассуждал о возвращении американского бизнеса и о его конкуренции с Китаем на российском рынке.

Роберт Эйджи. Источник фото: Михаил Гребенщиков / РБК
99
33
22
22
11
Для Cisco дорога закрыта навсегда. Они никогда не пройдут сертификацию на соответствие требованиям ИБ. Боинг я бы тоже пускал только с требованием частичной локализации
Управляющий партнёр Y Combinator Джаред Фридман рассказал, что у четверти стартапов акселератора 95% кодовой базы сгенерировано ИИ

Глава YC предупредил, что разработчикам всё равно необходимы знания в программировании.

Кадр из беседы главы YC Гарри Тана с партнёрами. Источник: Y Combinator
55
Я создал музыку! Ничего в этом не понимая

Я всю жизнь мечтаю научиться играть на гитаре, петь песни и создавать музыку. Но увы, никак не могу сделать шаг на встречу мечте. Пока не пощупал пару нейронок и не понял, что вроде и так смогу!

22
Президент США Дональд Трамп подписал указ о крипторезерве

Он может состоять примерно из 200 тысяч биткоинов, заявил спецпредставитель по ИИ и криптовалютам Дэвид Сакс.

Источник фото: David Sacks / X
2929
44
33
22
11
Потому шо баксу уже никто не верит. Сейчас на пробу аккумулируют биткоинов а потом на всю котлету вложатся в крипто-рубль.
[]