Оглавление:
- Шаг 1. Требования
- Шаг 2: Обучение данных
- Шаг 3: Реализация прогнозов камеры Pi
- Шаг 4: робот Arduino
- Шаг 5: Тестирование
- Шаг 6: все дополнительные файлы
Видео: Робот для распознавания дорожных знаков Raspberry Pi 4: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Это руководство основано на моем университетском проекте. Цель состояла в том, чтобы создать систему, в которой нейронная сеть анализирует изображение, а затем на основе распознавания сообщает роботу Arduino о перемещении через Ros.
Например, если распознается знак поворота направо, то робот поворачивает направо, если распознается знак поворота налево, то робот поворачивает налево, если ни один из них не распознается, то робот продолжает движение вперед. Набор данных, который будет использоваться, является официальным распознаванием дорожных знаков от INI (2019) (Institut Fur Neuroinformatik), этот набор данных содержит 43 класса, однако необходимы только два; Папки 00033 и 00034 в наборе данных - это указатели левого и правого поворота.
Шаг 1. Требования
Требования к этому проекту следующие:
Робот Arduino. (в основном arduino uno, драйвер двигателя и моторы) (не требуется, если вы не используете робота)
Малиновый пи 4.
Пи-камера.
Требуется программное обеспечение:
Python 3.
OpenCV 4.
Тензорфлоу.
arduino IDE (не требуется, если вы не используете робота)
Рос (не требуется, если вы не используете робота)
Каким бы ни был ваш любимый идеал Python (на Raspberry Pi я использую Thonny).
Чтобы настроить OpenCV и Tensorflow, следуйте инструкциям Адриана. Ссылка:
Я рекомендую просмотреть как можно больше его руководств, они действительно интересны и полезны как для начинающих, так и для среднего уровня.
Шаг 2: Обучение данных
Сценарий поезда предназначен для доступа к набору данных, который объединяет около 50 000 изображений из 43 классов. Скрипт написан на Python с использованием различных библиотек: os - это для связывания скрипта Python с правильным каталогом, в котором находится набор данных. Matplotlib - это для отображения данных из обучающей модели. Tensorflow и keras - это библиотеки, которые используются для создания модели искусственной нейронной сети, они используются для проектирования модели. Numpy - эта библиотека предназначена для преобразования изображений в массив, который затем можно пропустить через модель для получения прогноза.
Прилагаемый скрипт представляет собой код Python для создания модели из набора данных. Это состоит из сверточного 2D с входом (5, 5) и активации relu, а затем объединения, как только это будет сделано, вход проходит через другую свертку с входом (3, 3) с той же активацией и объединением. Это происходит в последний раз перед сглаживанием, а затем плотность применяется к количеству имеющихся классов, в данном случае 43.
Следующим шагом было составление модели. Это часть, которая устанавливает оптимизатор, sgd был наиболее подходящим, поскольку он был похож на оптимизатор, используемый в назначении 1. Sgd означает стохастический градиентный спуск. Также в компиляторе необходимо установить потерю, выбор sparse_categorical_crossentropy loss является наилучшим подходом, поскольку категории являются целыми числами, и модель будет выводить прогноз для каждого класса в виде числа с плавающей запятой между 0 и 1.1, что соответствует 100% точности.
После завершения компиляции необходимо применить генератор, чтобы модель начала обрабатывать входные данные изображения. Генератор состоит из нескольких частей: training_set - это ссылка на набор данных, используемый для обучения, steps_per_epoch - это количество шагов на эпоху, которые требуются, эпохи - это сколько раз программа будет перебирать полный набор данных., validation_data - это ссылка на набор данных, используемый для проверки, validation_steps - количество шагов, используемых для проверки, проверка происходит в конце каждой эпохи.
Как правило, требуется полная очистка всего набора данных за эпоху. Следовательно, например, для набора данных из 1024 изображений потребуется: размер пакета = 32, количество шагов на эпоху = 32, эпохи = 1. Каждый шаг включает в себя весь размер пакета, поэтому при размере пакета 32 шагов будет 32. С другой стороны. стороны, лучше иметь размер пакета больше, чем количество классов, потому что, если размер пакета меньше, то каждый шаг не может включать изображение из каждого класса.
После того, как модель завершит обучение, с помощью matplotlib программа построит график результатов, на котором будет показана история обучения от начала до конца. График состоит из точности, точности проверки, потерь и потерь при проверке, он разбит по эпохам, чтобы показать, как продвигалось обучение. Заключительный этап - сохранить модель как файл.h5, к которому позже можно будет получить доступ для процесса прогнозирования. Сохранение модели означает, что при каждом запуске программы прогнозирования нет необходимости запускать программу обучения снова. Программа тренировок на малиновом пи может занимать до 10 минут в эпоху.
Прилагается сценарий обучения:
Шаг 3: Реализация прогнозов камеры Pi
Следующая программа - это сценарий предсказания и издателя.
Первый этап - загрузка модели с помощью model.load (). Второй этап - перебрать кадры с камеры pi с помощью opencv, а затем изменить размер кадра до того же размера, что и входные размеры, используемые на этапе обучения, 32 x 32 пикселя. Как только это будет сделано, новый кадр с измененным размером пропускается через модель с помощью model.predict (), который выводит матрицу, каждый элемент матрицы является числом с плавающей запятой от 0 до 1, индекс элемента такой же, как и класс, который он представляет, следовательно первый элемент - это первый класс, а число - это предсказание достоверности изображения из этого класса. Например.
ПРИМЕЧАНИЕ: Если вы не используете сторону робота. Просто удалите строки:
"импортный rospy"
def talker (направление):
сообщение = Строка ()
pub = rospy. Publisher ('робот', String, queue_size = 10)
rospy.init_node ('говорящий', анонимный = Истина)
сообщение = направление
rospy.loginfo (сообщение)
pub.publish (сообщение)"
"болтушка (направление)"
Прилагается скрипт камеры Pi.
Шаг 4: робот Arduino
Последний шаг - сценарий программы робота.
Он написан на C ++ и представляет собой файл.ino для arduino uno. Программе требуется библиотека ros, которую можно найти в диспетчере библиотек в ide. Как только это будет импортировано, появятся файлы примеров, я решил расширить светодиодный мигающий файл, так как это будет выполнять ту же задачу, что и мне нужно. Программа продолжает цикл до тех пор, пока не будет отключено питание, сначала она слушает тематического робота, а когда он улавливает команду из этой темы, у него будет оператор if, чтобы увидеть, что говорит команда. Если команда left, сценарий запускает метод поворота влево, если команда правая, то он запускает метод поворота вправо, иначе он запускает метод прямого. Эти три метода очень похожи друг на друга, они сообщают цифровым контактам либо НИЗКОЕ (заземление), либо 100 (ШИМ), это нужно для того, чтобы робот не слишком быстро, говоря драйверу двигателя, чтобы он позволил только немного выходное напряжение. Порядок этих выходов - это то, что заставляет робота поворачиваться влево и вправо или двигаться вперед, это связано с ориентацией напряжения, поступающего на двигатели.
Прилагается скрипт.ino для arduino.
Шаг 5: Тестирование
Изображения прилагаются, так что проект от начала до конца. Первое изображение показывает процесс обучения. Как только это будет завершено, будет показана распечатка сделанной модели. На третьем изображении показано предсказание из учебного сценария. это последний этап обучающего сценария. Если вы посмотрите в папку, в которой находится обучающий скрипт, то вы увидите график и модель. График должен выглядеть как изображение 4 здесь, это показывает историю тренировки от начала до конца.
Окончательное изображение при запуске сценария камеры pi, это прямой поток с камеры pi. прогноз выполняется для каждого кадра, и прогноз печатается в терминале. Рамка показывает то, что видит камера.
Прилагаю мой университетский отчет по этому проекту. Пожалуйста, прочтите подробности о проекте.
Шаг 6: все дополнительные файлы
Некоторые из них были тестовыми файлами, которые я делал в процессе.
Рекомендуемые:
Электронная прокрутка именных знаков Black Lives Matter: 5 шагов
Black Lives Matter Electronic Scrolling Names Sign: Кампании #sayhername, #sayhisname и #saytheirname привлекают внимание к именам и историям чернокожих, ставших жертвами расистского насилия со стороны полиции, и поощряют пропаганду расовой справедливости. Подробнее о требованиях и
Зеркало для распознавания лиц с секретным отделением: 15 шагов (с изображениями)
Зеркало для распознавания лиц с секретным отсеком: меня всегда заинтриговали вечно творческие секретные отсеки, используемые в рассказах, фильмах и тому подобном. Итак, когда я увидел Конкурс Секретных Отсеков, я решил сам поэкспериментировать с этой идеей и сделать обычное зеркало, открывающее
Система безопасности распознавания лиц для холодильника с Raspberry Pi: 7 шагов (с изображениями)
Система безопасности с распознаванием лиц для холодильника с Raspberry Pi: просматривая Интернет, я обнаружил, что цены на системы безопасности варьируются от 150 до 600 долларов и выше, но не все решения (даже очень дорогие) могут быть интегрированы с другими. умные инструменты у вас дома! Например, вы не можете установить
VRBOT (робот для распознавания голоса): 10 шагов (с изображениями)
VRBOT (робот для распознавания голоса): в этом руководстве мы создадим робота (больше похожего на радиоуправляемую машину), который управляется голосом, то есть распознаванием голоса. Прежде чем я начну давать вам какие-либо дальнейшие подробности, вы должны знать, что это распознавание голоса, а не распознавание речи, что означает
Добавление микрофона в систему GPS Omnitech для распознавания голоса: 4 шага
Добавление микрофона в систему Omnitech GPS для распознавания голоса: возясь с моим устройством, я нашел простой и быстрый способ добавить микрофон к этому глухому устройству. С микрофоном вы сможете воспользоваться функцией распознавания голоса для навигации. Это потребует небольшого количества пайки, но почти все