Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2: 16 стъпки (със снимки)
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2: 16 стъпки (със снимки)
Anonim
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2
Това ръка ли е? (Камера Raspberry Pi + Невронна мрежа) Част 1/2

Преди няколко дни нараних китката на дясната си ръка във фитнес залата. Впоследствие всеки път, когато използвах компютърната мишка, това причиняваше много болка поради стръмния ъгъл на китката.

Точно тогава ме удари "не би ли било чудесно, ако можем да преобразуваме всякаква повърхност в тракпад" и не знам защо, но по някаква причина се сетих за нея, филма НЕ, ще ви позволя да разберете навън. Това беше вълнуваща мисъл, но не знаех дали мога да го направя, реших да опитам.

Тази статия улавя това, което излезе от нея.

Преди да започнем, имам отказ от отговорност-

„В края на тази статия не можах да превърна нито една повърхност в тракпад, но не научих много и добавих големи инструменти към моя арсенал. Надявам се, че това се случва и с вас '

Да започваме.

Стъпка 1: Видео

Image
Image

Ето едно малко 5 -минутно видео, обхващащо всички стъпки. Погледни.

Стъпка 2: Хардуер

Хардуер
Хардуер

Аз инсталирам малинов пи заедно с малина пи камера на височина около 45 см. Това ни дава площ за наблюдение от около 25x25 cm под камерата.

Raspberry pi и raspberry pi camera са лесно достъпни, просто го потърсете в Google и трябва да можете да намерите местен магазин.

Разгледайте тази връзка или някой от плейлиста ми за Raspberry pi, за да стартирате безглавното си пи.

След тази настройка се нуждаем от парче код, който решава дали има ръка в областта, която камерата наблюдава, и ако да, къде е тя.

Стъпка 3: Парче код

Парче код
Парче код
Парче код
Парче код

Парче код, което ни позволява да решим дали има ръка в област на интерес, използва нещо, наречено Neural Network. Те попадат в категорията програмиране, при която ние не дефинираме правила за вземане на решение, но показваме достатъчно данни за невронната мрежа, че тя сама определя правилата.

В нашия случай, вместо да кодираме как изглежда ръката, ние показваме изображения от невронна мрежа, заснети от малиново пи, което съдържа ръка и което не съдържа ръка. Тази фаза се нарича обучение на невронна мрежа, а използваните изображения се наричат набор от данни за обучение.

Стъпка 4: Получаване на изображения

Получаване на изображения
Получаване на изображения

Влязох отдалечено в моето малиново пи и заснех куп изображения с помощта на следната команда.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o кадър%04d.jpg

Заснех 80 изображения с ръка и 80 изображения, които не съдържат ръка. 160 изображения не са достатъчни за правилно обучение на невронна мрежа, но трябва да са достатъчни за доказателство на концепцията.

Освен 160 изображения, заснех още 20 изображения, за да тествам нашата мрежа, след като тя бъде обучена.

След като наборът от данни беше готов, започнах да пиша код за невронна мрежа.

Стъпка 5: Използвани инструменти и език

Използвани инструменти и език
Използвани инструменти и език
Използвани инструменти и език
Използвани инструменти и език

Написах моята невронна мрежа в библиотека за дълбоко обучение на Python, наречена Keras, и кодът е написан на тетрадка jupyter от anaconda navigator.

Стъпка 6: Подготовка на набора от данни за обучение

Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение
Подготовка на набора от данни за обучение

Първо (Изображение #1) Включих всички библиотеки, необходими за този проект, който включва PIL, matplotlib, numpy, os и Keras. Във втората клетка на бележника на Python (Изображение #2) дефинирам пътища към набора от данни и отпечатвам броя на пробите. Сега трябва да заредим всички изображения в масив от numpy, следователно в третата клетка (Изображение #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 класифицира изображението като съдържащо ръка, бихме искали да знаем местоположението на ръката. Това се нарича откриване на обекти в литературата за компютърно зрение. Така че нека тренираме NN, който прави точно същото.

Стъпка 12: Видео

Image
Image

3 -минутно видео, обясняващо всички останали стъпки. Погледни.

Стъпка 13: Етикетиране

Етикетиране
Етикетиране
Етикетиране
Етикетиране
Етикетиране
Етикетиране

Ако искате невронна мрежа да изведе местоположението на ръката, ние трябва да я обучим по такъв начин, т.е. за разлика от предишната невронна мрежа, където всяко изображение беше означено или с ръка, и без ръка. Този път всички изображения с ръка ще имат четири етикета, съответстващи на диагоналните координати на граничната рамка около ръката в това изображение.

Прикаченото изображение на csv файл съдържа етикет за всяко изображение. Моля, имайте предвид, че координатите са нормализирани с размер на изображението, т.е. ако горната X координата е на 320 -и пиксел в изображението с ширина 640 пиксела, ние ще го обозначим като 0,5.

Стъпка 14: Етикетиране на GUI

Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI
Етикетиране на GUI

Може би се чудите как успях да маркирам всички 82 изображения, добре, че написах графичен интерфейс в python, който ми помогна с тази задача. След като изображението се зареди в GUI. Щракнах с левия бутон върху горната координата и с десния бутон върху долната координата на вероятната ограничаваща кутия около ръката. След това тези координати се записват във файл, след което щраквам върху следващия бутон, за да заредя следващото изображение. Повторих тази процедура за всички 82 влакови и 4 тестови изображения. След като етикетите бяха готови, беше време за обучение.

Стъпка 15: Необходими библиотеки

Необходими библиотеки
Необходими библиотеки
Необходими библиотеки
Необходими библиотеки
Необходими библиотеки
Необходими библиотеки

Първо трябва да заредим всички необходими библиотеки. Което включва

  • PIL за манипулиране на изображения,
  • matplotlib за начертаване,
  • numpy за матрична работа,
  • os за зависима от операционната система функционалност и
  • keras за невронна мрежа.

Стъпка 16: Оставащи клетки

Останалите клетки
Останалите клетки
Останалите клетки
Останалите клетки
Останалите клетки
Останалите клетки
Останалите клетки
Останалите клетки

Във втората, третата, четвъртата и петата клетка зареждаме изображения в масив numpy и създаваме четириизмерен масив от csv файл, който да действа като етикети. В клетка номер 6 създаваме нашата невронна мрежа. Неговата архитектура е идентична с невронната мрежа, използвана за класификация, с изключение на измерването на изходния слой, което е 4, а не 1. Друга разлика идва от използваната функция за загуба, която е средната квадратна грешка. В клетка номер 8 започваме обучението на нашата невронна мрежа, след като тренирах, пуснах този модел на тестовия набор, за да получа прогнози за ограничаваща кутия върху наслагващи се координати на гранична кутия, те изглеждаха доста точни.

Благодаря за четенето.

Препоръчано: