Детектирование дорожных знаков по цветам
HTML-код
- Опубликовано: 24 июн 2018
- Вторая часть видео-курса по компьютерному зрению в беспилотном автомобиле. Задача курса - дать возможность всем желающим быстро и без глубокой теоретической подготовки научиться реализовывать простейшие алгоритмы компьютерного зрения с использованием библиотек OpenCV и применить их в Открытом Кубке России по программированию беспилотного автомобиля: newgen.education/rosdc
В зависимости от версии OpenCV, функция поиска контуров работает по разному.
после cv2.findContours(), у меня написано contours=contours[1]
В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Это видео:
- НЕ учебник по программированию на Python
- НЕ пособие по академическому программированию компьютерного зрения
- НЕ инструкция к использованию OpenCV
По всем этим темам есть подробные специализированные образовательные материалы, и для глубокого изучения мы рекомендуем воспользоваться ими. Наша целевая аудитория: учащиеся 6-11 классов, их наставники и студенты вузов.
Организаторы Russian Open Self Driving Cup - ООО "АСРоботикс", Кружковое движение НТИ и проект "Школа новых технологий"
В зависимости от версии OpenCV, функция поиска контуров работает по разному.
После cv2.findContours(), у меня написано contours=contours[1]
В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]
Спасибо! Очень наглядно, логично и динамично! Один минус - очень мелкий шрифт. Удачи Вам!
Спасибо за урок всё наглядно и последовательно объяснено.
Спасибо, очень познавательно! Жалко раньше ролик не выпустили! А так вы молодец(цы)! Успехов в вашем деле!
Очень круто! Хоть мне и 11 лет но я все понял, потому , что все очень хорошо обьясено! Спасибо за эти видео!
Мы старались, спасибо большое.
Такие комментарии вдохновляют. Ради них хочется работать. ⭐️
Видео очень полезно, но музыкальные вставки очень сильно раздражает когда ты сидишь ночью и оно заиграло
Да, нам все уже сказали. Приносим свои извинения. Все следующие ролики мы монтируем без этого.
@@avt.global или в наушниках))
Поработайте пожалуйста над своим стилей написания кода. Неудобно воспринимать код, когда между операторами или аргументами нет пробелов.
Очень неудачно выбраны разные типы знаков для демонстрации. Попробуйте распознать, например, круглые синие знаки: поворот налево, поворот направо и прямо. Уверен, что результат не будет такой однозначный. Нужно сделать вначале кластеризацию по цвету и типу ограничивающей геометрической фигуры. В таком случае нам придется между собой сравнивать, например, синие круги только с синими кругами. Также нужно ввести аффинные преобразования, например билинейные, этого достаточно, определив, по какой оси имеется деформация. Также можно не делать отдельно эрозию и дилатацию, а применить функцию morphologyEx с параметром MORPH_CLOSE . Также мне кажется, что лучше делать не попарное сравнение одинаковых точек, а вычитать знак из эталона и анализировать оставшиеся ненулевые точки, для каждого типа знака это будет свой порог. Например при разрешении 32х32 для синих круглых знаков пороговое значение будет около 30, а для знака "кирпич" - около 50. И вообще этот алгоритм будет работать только в идеальных условиях: при хорошем освещении, когда знак не искажен. В реальной жизни нет альтернативы сверточной нейронной сети.
Максим, наша целевая аудитория - учащиеся общеобразовательных школ. К сожалению, они ничего не поймут в афинных билинейных преобразованиях.
@@avt.global Так, сам школьник. Я из Нижнего Новгорода, учусь в 38 лицее. Учусь в 11 классе, а это я начал делать ещё в 9-м классе
@@user-ry8rz5wo3l сравнить 38 лицей и общеобразовательную школу - это, конечно, мощно)
Здравствуйте, есть ли у вас или знаете ли программы(на Python ) для распознавания дорожных знаков?
Появляется ошибка при запуске на 28:50 мин, с чем она может быть связана?
cv.drawContours(frame, contours, -1, (0, 255, 0), 3)
cv2.error: OpenCV(4.1.0) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2509: error: (-215:Assertion failed) npoints > 0 in function 'cv::drawContours'
Это я с cv2 попробовал, с cv тоже самое
ctr = np.array(contours).reshape((-1, 1, 2)).astype(np.int32)
cv.drawContours(frame, contours, 0, (0, 255, 0), 3)
@@user-dt9vo8sh3k, если не знаешь разницу между cv и cv2 - не лезь в этот курс. Лучше изучи Python.
такая же ошибка что делать
У меня была такая же проблема. Всё стало работать после того как я заменил contours = contours[1] на contours = contours[0]
для чего нужно преобразовывать в hsv?
Ответ:
Why is color segmentation easier on HSV
"The big reason is that it separates color information (chroma) from intensity or lighting (luma). Because value is separated, you can construct a histogram or thresholding rules using only saturation and hue. This in theory will work regardless of lighting changes in the value channel. In practice it is just a nice improvement. Even by singling out only the hue you still have a very meaningful representation of the base color that will likely work much better than RGB. The end result is a more robust color thresholding over simpler parameters."
Спасибо! Но шрифт бы больше(
Как у вас выделяется синий и одновременно красный
Переведите изображение в цветовое пространство HSV, после этого выполняйте бинаризацию и всё получится!
cv.drawContours(frame, contours, -1, (255,0,255), 3)
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2508: error: (-215:Assertion failed) npoints > 0 in function 'cv::drawContours'
6:07