Распознавание цвета с захватом одного кадра
Last updated
Last updated
Напишем программу по распознаванию цветных объектов. Сразу скажу, что эта область обширна, и здесь мы будем касаться лишь той небольшой части, которая нам нужна для соревнований WorldSkills.
Для начала откроем гитбук разработчика квадрокоптера Клевер и скопируем готовый скрипт, который будем перерабатывать:
Скопируем этот код в пустой текстовый файл с расширением .py. На забудем изменить наименование импортирования модуля clover.
Отлично, теперь удалим все лишнее, и оставим только фрагмент по распознаванию цветов:
Итого, наш код принимает следующий вид:
Прокомментируем теперь каждую строчку:
Для более точного распознавания будем использовать захват только одного кадра. Для этого поменяем строчку, где происходит захват изображения на следующую:
В итоге наш код примет следующий вид:
Теперь добавим полет в цветовую метку с координатами (x=2, y=0) и не забудем вызвать процедуру для распознавания цветовой метки. Будем распознавать красный цвет, поэтому будет в условии сравнивать с ключом 'r':
Сохраним полученный код и запустим квадрокоптер.
Ничего не получилось, давайте добавим второе условие на случай, если не сработает распознавание. Тогда будет точно ясно, как ведет себя программа. Также добавим функцию print для вывода на экран текущего изображения, чтобы понимать значение красного цвета. В результате получим следующий код:
Сохраним и запустим код:
Цвет мы не распознали, но зато получили матрицу значений нашего цвета, как видит его камера квадрокоптера. Цвет имеет 3 значения. Эти 3 значения постоянно повторяются. Сделаем небольшую выборку из всех полученных значений и выберем максимальное и минимальное для каждого значения.
Итого:
для первого числа максимальное — 134, минимальное -113
для второго числа максимальное — 150, минимальное -134
для третьего числа максимальное — 163, минимальное -151
Отнимем по 40 от минимального и прибавим 40 к максимальному, так мы получим диапазон измерений для нашего красного цвета.
Получим диапазон:
максимальное значение (174, 194, 203)
минимальное значение (75, 94, 111)
Теперь полученные значения внесем в код для красного цвета. Проверку на выборку диапазона можно убрать. В результате наша программа примет вид:
Теперь вновь запустим нашу программу.
Как видите, теперь все работает и красный цвет он определяет. Однако, вы должны знать, что на распознавание цвета влияют многие факторы, один из которых это освещение в помещении. В симуляторе Gazebo идеальные условия, и здесь освещение постоянное, поэтому настройка диапазона проводится за один проход. В реальности, таких проходов для получения выборки диапазона, возможно более 2-ух раз.
Для более точного определения поменяем границы определения на следующие:
ЗАДАНИЯ НА САМОСТОЯТЕЛЬНУЮ РАБОТУ:
Распознайте цветовые метки в других двух точках и выведите сообщение о результате. Если вы цвет распознали выведите сообщение «Raspoznal», в противном случае «Neraspoznal». Координаты первой цветовой метки (x=2, y=0). Координаты второй цветовой метки (x=1, y=2). Координаты третьей цветовой метки (x=3, y=3).