Детектирование дорожных знаков по цветам

Поделиться
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 - ООО "АСРоботикс", Кружковое движение НТИ и проект "Школа новых технологий"

Комментарии • 30

  • @avt.global
    @avt.global  4 года назад +4

    В зависимости от версии OpenCV, функция поиска контуров работает по разному.
    После cv2.findContours(), у меня написано contours=contours[1]
    В версиях 3.4+ , нужно заменить 1 на 0. Получится так: countours = countours[0]

  • @markhavidzer7249
    @markhavidzer7249 Год назад

    Спасибо за урок всё наглядно и последовательно объяснено.

  • @ki2oo
    @ki2oo 3 года назад +1

    Очень круто! Хоть мне и 11 лет но я все понял, потому , что все очень хорошо обьясено! Спасибо за эти видео!

    • @avt.global
      @avt.global  3 года назад

      Мы старались, спасибо большое.
      Такие комментарии вдохновляют. Ради них хочется работать. ⭐️

  • @VanFlek
    @VanFlek 5 лет назад

    Спасибо! Очень наглядно, логично и динамично! Один минус - очень мелкий шрифт. Удачи Вам!

  • @artyomsultanov5204
    @artyomsultanov5204 5 лет назад +5

    Поработайте пожалуйста над своим стилей написания кода. Неудобно воспринимать код, когда между операторами или аргументами нет пробелов.

  • @user-wt7ks7ud3d
    @user-wt7ks7ud3d 5 лет назад

    Спасибо, очень познавательно! Жалко раньше ролик не выпустили! А так вы молодец(цы)! Успехов в вашем деле!

  • @egoraltynov6755
    @egoraltynov6755 5 лет назад +8

    Видео очень полезно, но музыкальные вставки очень сильно раздражает когда ты сидишь ночью и оно заиграло

    • @avt.global
      @avt.global  5 лет назад

      Да, нам все уже сказали. Приносим свои извинения. Все следующие ролики мы монтируем без этого.

    • @mechanic1271
      @mechanic1271 4 года назад

      @@avt.global или в наушниках))

  • @user-ry8rz5wo3l
    @user-ry8rz5wo3l 5 лет назад +1

    Очень неудачно выбраны разные типы знаков для демонстрации. Попробуйте распознать, например, круглые синие знаки: поворот налево, поворот направо и прямо. Уверен, что результат не будет такой однозначный. Нужно сделать вначале кластеризацию по цвету и типу ограничивающей геометрической фигуры. В таком случае нам придется между собой сравнивать, например, синие круги только с синими кругами. Также нужно ввести аффинные преобразования, например билинейные, этого достаточно, определив, по какой оси имеется деформация. Также можно не делать отдельно эрозию и дилатацию, а применить функцию morphologyEx с параметром MORPH_CLOSE . Также мне кажется, что лучше делать не попарное сравнение одинаковых точек, а вычитать знак из эталона и анализировать оставшиеся ненулевые точки, для каждого типа знака это будет свой порог. Например при разрешении 32х32 для синих круглых знаков пороговое значение будет около 30, а для знака "кирпич" - около 50. И вообще этот алгоритм будет работать только в идеальных условиях: при хорошем освещении, когда знак не искажен. В реальной жизни нет альтернативы сверточной нейронной сети.

    • @avt.global
      @avt.global  5 лет назад

      Максим, наша целевая аудитория - учащиеся общеобразовательных школ. К сожалению, они ничего не поймут в афинных билинейных преобразованиях.

    • @user-ry8rz5wo3l
      @user-ry8rz5wo3l 5 лет назад +2

      @@avt.global Так, сам школьник. Я из Нижнего Новгорода, учусь в 38 лицее. Учусь в 11 классе, а это я начал делать ещё в 9-м классе

    • @tolikbegyn9999
      @tolikbegyn9999 4 года назад +1

      @@user-ry8rz5wo3l сравнить 38 лицей и общеобразовательную школу - это, конечно, мощно)

    • @TOPTOP-wp3wm
      @TOPTOP-wp3wm 3 года назад

      Здравствуйте, есть ли у вас или знаете ли программы(на Python ) для распознавания дорожных знаков?

  • @user-dt9vo8sh3k
    @user-dt9vo8sh3k 5 лет назад +1

    Появляется ошибка при запуске на 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'

    • @user-dt9vo8sh3k
      @user-dt9vo8sh3k 5 лет назад

      Это я с cv2 попробовал, с cv тоже самое

    • @radifkurbanov3026
      @radifkurbanov3026 5 лет назад

      ctr = np.array(contours).reshape((-1, 1, 2)).astype(np.int32)
      cv.drawContours(frame, contours, 0, (0, 255, 0), 3)

    • @radifkurbanov3026
      @radifkurbanov3026 5 лет назад

      @@user-dt9vo8sh3k, если не знаешь разницу между cv и cv2 - не лезь в этот курс. Лучше изучи Python.

    • @omegajustpewpew3450
      @omegajustpewpew3450 5 лет назад

      такая же ошибка что делать

    • @funroom4367
      @funroom4367 4 года назад +4

      У меня была такая же проблема. Всё стало работать после того как я заменил contours = contours[1] на contours = contours[0]

  • @vorobushek6590
    @vorobushek6590 4 года назад

    для чего нужно преобразовывать в hsv?

    • @igorthelight
      @igorthelight 4 года назад

      Ответ:
      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."

  • @madiaromurserikov6859
    @madiaromurserikov6859 3 года назад

    Как у вас выделяется синий и одновременно красный

    • @avt.global
      @avt.global  3 года назад

      Переведите изображение в цветовое пространство HSV, после этого выполняйте бинаризацию и всё получится!

  • @ed6280
    @ed6280 Год назад

    Спасибо! Но шрифт бы больше(

  • @user-ee1er2qf7f
    @user-ee1er2qf7f 4 года назад

    6:07

  • @user-gl4ww6mq4b
    @user-gl4ww6mq4b Год назад

    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'