Оглавление:
- Шаг 1. Видео
- Шаг 2: Оборудование
- Шаг 3: фрагмент кода
- Шаг 4: Получение изображений
- Шаг 5. Используемые инструменты и язык
- Шаг 6: Подготовка набора данных для обучения
- Шаг 7: нейронная сеть
- Шаг 8: обучение нейронной сети
- Шаг 9: Тестирование нейронной сети
- Шаг 10: Результат и следующая часть…
- Шаг 11: Обнаружение объекта
- Шаг 12: видео
- Шаг 13: маркировка
- Шаг 14: Маркировка графического интерфейса
- Шаг 15: Необходимые библиотеки
- Шаг 16: оставшиеся клетки
Видео: Это рука? (Камера Raspberry Pi + нейронная сеть) Часть 1/2: 16 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Несколько дней назад в спортзале я повредил запястье правой руки. Впоследствии каждый раз, когда я использовал компьютерную мышь, это причиняло много боли из-за крутого угла запястья.
Вот когда меня осенило: «Было бы здорово, если бы мы могли преобразовать любую поверхность в трекпад», и я не знаю почему, но по какой-то причине я подумал о ней, о фильме «ЕЕ», я позволю вам, ребята, понять это из. Это была захватывающая мысль, но я не знал, смогу ли я это сделать, я решил попробовать.
В этой статье рассказывается, что из этого получилось.
Прежде чем мы начнем, у меня есть заявление об отказе от ответственности:
«В конце этой статьи я не смог превратить любую поверхность в трекпад, но я многому не научился и добавил в свой арсенал большие инструменты. Я надеюсь, что и с тобой такое случится '
Давайте начнем.
Шаг 1. Видео
Вот крошечное 5-минутное видео, охватывающее все шаги. Взглянем.
Шаг 2: Оборудование
Я установил raspberry pi вместе с камерой raspberry pi на высоте около 45 см. Это дает нам зону наблюдения около 25x25 см под камерой.
Камера Raspberry Pi и Raspberry Pi легко доступны, просто погуглите, и вы сможете найти местный магазин.
Взгляните на эту ссылку или на один из моих плейлистов Raspberry pi, чтобы запустить ваш безголовый пи.
После этой настройки нам нужен фрагмент кода, который решает, есть ли рука в области, которую контролирует камера, и если да, то где она.
Шаг 3: фрагмент кода
Часть кода, которая позволяет нам решить, есть ли рука в интересующей области, использует нечто, называемое нейронной сетью. Они подпадают под категорию программирования, где мы не определяем правила для принятия решения, но мы показываем нейронной сети достаточно данных, чтобы она сама определяла правила.
В нашем случае вместо кодирования того, как выглядит рука, мы показываем изображения нейронной сети, захваченные из Raspberry Pi, которые содержат руку и не содержат руку. Этот этап называется обучением нейронной сети, а используемые изображения - набором данных для обучения.
Шаг 4: Получение изображений
Я удаленно вошел в свой raspberry pi и снял кучу изображений, используя следующую команду.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame% 04d.jpg
Я сделал 80 изображений рукой и 80 изображений без руки. 160 изображений недостаточно для правильного обучения нейронной сети, но должно быть достаточно для подтверждения концепции.
Помимо 160 изображений, я сделал еще 20 изображений, чтобы протестировать нашу сеть после ее обучения.
Когда набор данных был готов, я начал писать код для нейронной сети.
Шаг 5. Используемые инструменты и язык
Я написал свою нейронную сеть в библиотеке глубокого обучения Python под названием Keras, а код написан на блокноте jupyter из навигатора anaconda.
Шаг 6: Подготовка набора данных для обучения
Сначала (Изображение №1) я включил все библиотеки, необходимые для этого проекта, включая PIL, matplotlib, numpy, os и Keras. Во второй ячейке записной книжки Python (Изображение №2) я определяю пути к набору данных и распечатываю количество образцов. Теперь нам нужно загрузить все изображения в массив numpy, поэтому в третьей ячейке (Image # 2) я создал массив numpy из 82 (количество образцов рук) +75 (количество образцов без рук), то есть 157x100x100x3. 157 - это общее количество изображений, которые у меня есть, 100x100 - это размер нашего изображения с измененным размером, а 3 - для слоев красного, зеленого и синего цветов в изображении.
В четвертой и пятой ячейках мы загружаем изображения, содержащие руку, за которыми следуют изображения, не содержащие руку в массиве numpy. В шестой ячейке мы делим каждое значение на 255, тем самым ограничивая диапазон значений от 0 до 1. (Изображение №3)
Прошу прощения, если прикрепленные изображения недостаточно хороши. Вот ссылка на репозиторий GITHUB, чтобы вы могли посмотреть код. Не забудьте заменить пути к каталогам своим путем:).
Идем дальше.
Затем нам нужно пометить каждое изображение, поэтому мы создаем одномерный массив numpy длиной 157. Первые 82 записи установлены на 1, а остальные 75 записей установлены на 0, передающая нейронная сеть, что первые 82 изображения относятся к одному классу, а остальные - к другому (Изображение № 4).
Теперь создадим нейронную сеть.
Шаг 7: нейронная сеть
В девятой ячейке мы определяем нашу нейронную сеть. Он содержит три повторения сверточного слоя, за которыми следуют слои maxpool с 8, 12 и 16 сверточными фильтрами соответственно. После этого у нас есть две плотные нейронные сети. Прикрепляем два изображения для этого шага. Первая - это привязка кода, который создает нейронную сеть, а вторая - графическое представление нейронной сети с выходным размером и аннотированными операциями.
Шаг 8: обучение нейронной сети
В десятой ячейке мы настраиваем оптимизатор нейронной сети на «adam» и функцию потерь на «binary_crossentropy». Они играют важную роль в том, как обновляются веса сети. Наконец, когда мы запускаем одиннадцатую ячейку, нейронная сеть начинает обучаться. Пока сеть обучается, посмотрите на функцию потерь и убедитесь, что она уменьшается.
Шаг 9: Тестирование нейронной сети
После обучения нейронной сети нам нужно подготовить набор тестовых данных. Мы повторяем процедуру, сделанную для подготовки обучающего набора в 3-й, 4-й, 5-й и 6-й ячейках на тестовых данных, чтобы создать тестовый набор. Мы также готовим этикетку для набора тестов, но на этот раз мы запускаем модель на этом наборе данных, чтобы получать прогнозы, а не обучать.
Шаг 10: Результат и следующая часть…
Я получил точность теста 88%, но воспринимаю это с долей скептицизма, так как набор данных, используемый для обучения и тестирования этой модели, очень, очень мал и недостаточен для правильного обучения этой модели.
В любом случае, я надеюсь, вам понравилась эта статья. Мое намерение, стоящее за этим упражнением, еще не завершено, и следите за второй частью. Я загружу его, как только смогу.
В следующей части мы обучим другую нейронную сеть, которая будет сообщать нам местоположение руки на изображении, обнаруженном рукой.
Все запросы приветствуются.
Если кто-то заинтересован в использовании моего крошечного набора данных, дайте мне знать в комментариях. Я сделаю это доступным.
Спасибо за прочтение. Увидимся скоро со второй частью, а пока почему бы вам не создать и не обучить нейронную сеть.
Изменить: - Следующие шаги относятся ко второй части.
Шаг 11: Обнаружение объекта
На предыдущих шагах мы создали сетевую сеть, которая сообщает нам, содержит ли тестовое изображение руку или нет. Что дальше? Если NN классифицирует изображение как содержащее руку, мы хотели бы знать, где находится рука. В литературе по компьютерному зрению это называется обнаружением объектов. Итак, давайте обучим NN, которая делает то же самое.
Шаг 12: видео
3-минутное видео, объясняющее все оставшиеся шаги. Взглянем.
Шаг 13: маркировка
Если вы хотите, чтобы нейронная сеть выводила местоположение руки, нам нужно обучить ее таким образом, то есть в отличие от предыдущей нейронной сети, где каждое изображение было помечено как с рукой или без руки. На этот раз все изображения с изображением руки будут иметь четыре метки, соответствующие диагональным координатам ограничивающей рамки вокруг руки на этом изображении.
Прикрепленное изображение csv файла содержит метку для каждого изображения. Обратите внимание, что координаты нормализованы с размером изображения, т.е. если верхняя координата X находится на 320-м пикселе в изображении с шириной 640 пикселей, мы обозначим его как 0,5.
Шаг 14: Маркировка графического интерфейса
Вам может быть интересно, как мне удалось пометить все 82 изображения, ну, я написал графический интерфейс на Python, который помог мне с этой задачей. Как только изображение загружено в графический интерфейс. Я щелкнул левой кнопкой мыши по верхней координате и правой кнопкой мыши по нижней координате вероятной ограничительной рамки вокруг руки. Эти координаты затем записываются в файл, после чего я нажимаю кнопку «Далее», чтобы загрузить следующее изображение. Я повторил эту процедуру для всех 82 поездов и 4 тестовых изображений. Когда этикетки были готовы, пришло время обучения.
Шаг 15: Необходимые библиотеки
Для начала нам нужно загрузить все необходимые библиотеки. Который включает в себя
- PIL для обработки изображений,
- matplotlib для рисования,
- numpy для матричной операции,
- os для функций, зависящих от операционной системы и
- keras для нейронной сети.
Шаг 16: оставшиеся клетки
Во 2-й, 3-й, 4-й и 5-й ячейках мы загружаем изображения в массив numpy и создаем четырехмерный массив из файла csv, который будет действовать как метки. В ячейке №6 мы создаем нашу нейронную сеть. Его архитектура идентична нейронной сети, используемой для классификации, за исключением того, что размер выходного слоя равен 4, а не 1. Другое отличие заключается в использовании функции потерь, которая представляет собой среднеквадратичную ошибку. В ячейке номер 8 мы начинаем обучение нашей нейронной сети после обучения. Я запустил эту модель на тестовом наборе, чтобы получить прогнозы для ограничивающей рамки при наложении координат ограничительной рамки, они выглядели довольно точно.
Спасибо за прочтение.
Рекомендуемые:
Если это, то это ArDino: 3 шага
Если это, то то, что ArDino: для нашего школьного проекта, если это то, что нам нужно было создать интерактивный объект с помощью Arduino. Решил сделать симпатичный Ардино. Он очень талантлив и одним нажатием кнопки споет для вас тему парка юрского периода
Светодиодная галочка Nike! Это отличный декор для комнаты. Это единственный проект, который может повторить каждый: 5 шагов
Светодиодная галочка Nike! Это отличный декор для комнаты. Это единственный проект, который может повторить каждый. 2x-брус 20-20-3000 2x-шурупы для фанеры 500-1000мм (45мм) 150x-саморезы (35мм) 30x-scr
Если это, чем это: 5 шагов
If This Than That: Interactieve Bijenkorf. В этом проекте система интерактивного взаимодействия проберет эту информацию, а также повысит уровень организации. Dit systeem neemt geluid en trillingen weer en reageert daar op door middel van licht. De toeschouwer kan interactie встретились
Напиши это ! Сделай это ! Поделись!: 4 шага
Напиши это ! Сделай это ! Поделись им!: Мои ученики использовали Legos, чтобы добавить творчества в их письмо, организовать письмо и продемонстрировать свою работу в цифровом формате со своей семьей и со своими сверстниками в классе
Третья рука ++: универсальная рука помощи для электроники и других деликатных работ: 14 шагов (с изображениями)
Третья рука ++: Многофункциональная рука помощи для электроники и другой деликатной работы. Раньше я использовал третьи руки / руки помощи, доступные в сетевых магазинах электроники, и был разочарован их удобством использования. Мне никогда не удавалось получить клипы именно там, где я хотел, или на настройку уходило больше времени, чем следовало бы