Мазмуну:
- 1 -кадам: Бул долбоордо колдонулган нерселер
- 2 -кадам: Идея?
- 3 -кадам: Баштоо?
- 4 -кадам: Raspbianди SD картага өрттөсүзбү?
- 5 -кадам: Маалыматтар топтому? ️
- 6 -кадам: NN долбоорлоо жана моделди окутуу ⚒️⚙️
- 7 -кадам: Моделди тестирлөө ✅
- 8-кадам: Рок-кагаз-кайчы оюну
- 9 -кадам: Servo мотор интеграциясы?
- 10 -кадам: Долбоордун иштеши?
- 11 -кадам: Code - Project Repo
Video: Rock Paper Scissor AI: 11 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Жалгыздыктан тажап көрдүңүз беле? Келгиле, акыл менен иштелген интерактивдүү системага каршы рок, кагаз жана кайчы ойноп көрөлү.
1 -кадам: Бул долбоордо колдонулган нерселер
Аппараттык компоненттер
- Raspberry Pi 3 Model B+ × 1
- Raspberry Pi камера модулу V2 × 1
- SG90 Micro-servo мотор × 1
Программалык колдонмолор
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
2 -кадам: Идея?
Ар кандай домендерде ар кандай долбоорлор менен иштегенден кийин, мен кызыктуу проект түзүүнү пландап, рок-кагаз-кайчы оюнун жасоону чечтим:)
Бул долбоордо биз интерактивдүү оюн жасап, чечимдерди кабыл алуу үчүн AI тарабынан иштетилген компьютерге каршы ойнойбуз. AI Raspberry Pi менен туташкан Камераны колдонуучунун колу менен жасаган нерселерин таануу, аларды эң жакшы категорияга (энбелгиге) рок, кагаз же кайчыга бөлүштүрүү үчүн колдонот. Компьютер өз кадамын жасаган соң, Raspberry Pi менен байланышкан тепкич мотору анын кыймылынын негизинде багытты көрсөтөт.
Бул оюнда каралышы керек болгон эрежелер:
- Рок кайчыны бүктөйт
- Кагаз ташты каптайт
- Кайчы кагазды кесип
Жеңүүчү жогорудагы үч шарттын негизинде аныкталат. Бул жерде долбоордун тез демосун көрөлү.
3 -кадам: Баштоо?
Raspberry Pi
Мен Raspberry Pi 3 Model B+ колдонгом, ал чоң жакшыртууларга ээ жана мурунку Raspberry Pi 3 Model Bге караганда күчтүү.
Raspberry Pi 3 B+ 1.4 ГГц 64-бит төрт ядролуу процессор, кош тилкелүү зымсыз LAN, Bluetooth 4.2/BLE, ылдамыраак Ethernet жана Power-over-Ethernet колдоосу (өзүнчө PoE HAT менен) менен интеграцияланган.
Техникалык шарттар: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-бит SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz жана 5GHz IEEE 802.11.b/g/n/ac зымсыз LAN, Bluetooth 4.2, BLE, USB 2.0 аркылуу гигабит Ethernet (максималдуу өткөрүмдүүлүк 300 Мбит / с), Узартылган 40-пин GPIO аталышы, Толук өлчөмдөгү HDMI4 USB 2.0 порту, Raspberry Pi камерасын туташтыруу үчүн CSI камера порту, Raspberry Pi сенсордук дисплейин туташтыруу үчүн DSI дисплей порту 4 полюстуу стерео чыгаруу жана курама видео порт, иштетүү тутумуңузду жүктөө жана берилиштерди сактоо үчүн Micro SD порту5V/2.5A DC кубаттуулугу, Ethernet аркылуу Power (PoE) колдоосу (өзүнчө PoE HAT талап кылынат).
Servo Motor
Биз SG-90 серво моторун колдонобуз, моменти 2,5 кг (1 см) чейин жүк көтөрө алат.
USB Камера
Сүрөттү иштетүү менен оюнду интерактивдүү кылуу үчүн USB камера
Кээ бир Jumper кабелдери тепкич моторуна жана Raspberry Piге зым салуу үчүн колдонулат.
4 -кадам: Raspbianди SD картага өрттөсүзбү?
Raspbian - бул Raspberry Piде иштеген Linuxтун бөлүштүрүүсү. Бул колдонмодо биз Lite версиясын колдонобуз, бирок Desktop версиясын (графикалык чөйрө менен келген) да колдонсо болот.
- Etcherди жүктөп алып, аны орнотуңуз.
- SD картты окуу куралын ичиндеги SD карта менен туташтырыңыз.
- Etcher'ди ачыңыз жана катуу дисктен SD картага жазгыңыз келген Raspberry Pi.img же.zip файлын тандаңыз.
- Сүрөтүңүздү жазгыңыз келген SD картаны тандаңыз.
- Тандоолоруңузду карап чыгып, "Жарк!" SD картага маалыматтарды жазууну баштоо үчүн.
Аспапты тармагыңызга туташтырыңыз
- SSH кирүү мүмкүнчүлүгүн иштетүү, бош SD картаңызды жүктөө көлөмүнүн тамырына кайра SD картаңызды кошуу.
- SD картаны Raspberry Pi'ге салыңыз. Ал болжол менен 20 секундада жүктөлөт. Сиз азыр Raspberry Piге SSH кирүү мүмкүнчүлүгүнө ээ болушуңуз керек. Демейки боюнча, анын хосттун аты raspberrypi.local болот. Компьютериңизде терминалдык терезени ачып, төмөнкүлөрдү териңиз:
Демейки сырсөз малина
Бул жерде мен Raspberry Pi менен иштөө үчүн өзүнчө мониторду колдондум.
5 -кадам: Маалыматтар топтому? ️
Бул долбоордун биринчи кадамы - маалыматтарды чогултуу. Система кол жаңсоосун аныктап, аракетти таанып, ошого жараша кыймыл жасашы керек.
Pip install аркылуу Raspberry Piге бир нече китепканаларды орнотобуз
буйрук.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip орнотуу opencv pip орнотуу numpy pip орнотуу scikit-learn pip орнотуу scikit-image pip орнотуу h5py pip орнотуу Keras pip tensorflow пип орнотуу Werkzeug пип орнотуу Keras-Колдонмолор пип орнотуу Keras-Алдын ала иштетүү пип орнотуу keras-squeezenet пип орнотуу astor пип орнотуу tensorboard пип орнотуу tensorflow-сметатор пип орнотуу gpcio пип орнотуу absl-pypip орнотуу gast пип орнотуу joblib pip орнотуу Markdown pip protobuf pip орнотуу PyYAML pip орнотуу алты
Эгерде сиз OpenCVpackage менен кандайдыр бир көйгөйлөргө туш болсоңуз, мен бул пакеттерди орнотууну сунуштайм.
sudo apt-get libhdf5-dev орнотуу
Sudo apt-get libhdf5-serial-dev орнотуу libo liblas-base-dev
Биз бул долбоор үчүн бардык керектүү көз карандылыктарды орноттук. Берилиштер топтому жана тиешелүү энбелгинин астындагы сүрөттөрдүн түзүлүшү менен жасалат.
Бул жерде биз таштын, кагаздын жана кайчынын энбелгиси үчүн төмөнкү үзүндү аркылуу маалымат топтомунун сүрөттөрүн түзөбүз.
roi = кадр [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Сүрөт ар бир этикетка үчүн тартылган (таш, кагаз, кайчы жана жок).
6 -кадам: NN долбоорлоо жана моделди окутуу ⚒️⚙️
Бул долбоордун өзөгү үч категориянын бирин классификациялаган сүрөт классификатору. Бул классификаторду жасоо үчүн биз SqueezeNet деп аталган алдын ала даярдалган CNN (Convolutional Network) колдонобуз.
Бул жерде биз жаңсоону аныктай турган SqueezeNet моделин түзүү үчүн Keras жана TensorFlow колдонобуз. Мурунку кадамда биз жараткан сүрөттөр моделди үйрөтүү үчүн колдонулат. Модель айтылган доорлордун эч бири үчүн түзүлгөн маалымат топтому аркылуу үйрөтүлөт.
Модель төмөндө көрсөтүлгөндөй гиперпараметрлер менен конфигурацияланган.
модель = ырааттуу ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Окууну таштоо (0.5), Convolution2D (NUM_CLASSES, (1, 1), толтуруу = 'жарактуу'), Жандандыруу ('relu'), GlobalAveragePooling2D (), Жандандыруу ('softmax')])
Модель машыгып жатканда, ар бир доор үчүн моделдин жоголушун жана тактыгын таба аласыз жана тактык бир нече доордон кийин бир убакта жогорулайт.
Моделди 10 доордон кийин эң тактык менен өндүрүү үчүн болжол менен 2 саат талап кылынган. Эгер сизде кандайдыр бир эс тутумун бөлүштүрүү катасы болсо, төмөнкү кадамдарды жасаңыз (Адрианга рахмат)
Алмашуу мейкиндигин жогорулатуу үчүн /etc /dphys-swapfile ачып, CONF_SWAPSIZE өзгөрмөсүн түзөтүңүз:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Мен алмашууну 100Мбдан 1024МБга көбөйтүп жатканымды байкап көр.
$ sudo /etc/init.d/dphys-swapfile токтотуу
$ sudo /etc/init.d/dphys-swapfile баштоо
Эскертүү:
Своптун көлөмүн көбөйтүү - эс тутум картаңызды күйгүзүүнүн эң сонун жолу, андыктан бул өзгөрүүнү артка кайтарып, бүткөндөн кийин своп кызматын кайра баштаңыз. Эстутум карталарын бузган чоң өлчөмдөр жөнүндө бул жерден көбүрөөк окуй аласыз.
7 -кадам: Моделди тестирлөө ✅
Модель түзүлгөндөн кийин, ал "rock-paper-scissors-model.h5" файлын чыгарат. Бул файл тутум ар кандай кол жаңсоолорун аныктай аларын жана аракеттерди айырмалай аларын текшерүү үчүн булак катары колдонулат.
Модель python скриптинде төмөнкүдөй жүктөлөт
модель = load_model ("рок-кагаз-кайчы-модель.h5")
Камера сыналган сүрөттү окуйт жана керектүү түстүү моделди өзгөртөт, андан кийин сүрөттүн өлчөмүн 227 x 227 пикселге чейин өзгөртөт (Модель түзүү үчүн колдонулган бирдей өлчөм). Моделди үйрөтүү үчүн колдонулган сүрөттөр, түзүлгөн моделди сыноо үчүн колдонулушу мүмкүн.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Модель жүктөлүп, сүрөт камера тарабынан алынган соң, модель жүктөлгөн SqueezeNet моделинин жардамы менен тартылган сүрөттү болжолдойт жана колдонуучунун кыймылдарына божомол жасайт.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) басып чыгаруу ("Болжолдонгон: {}". формат (move_name))
Моделди ар кандай тесттик сүрөттөр менен текшерүү үчүн test.py скриптин иштетүү.
python3 test.py
Эми модель кол жаңсоолорун аныктоого жана түшүнүүгө даяр.
8-кадам: Рок-кагаз-кайчы оюну
Оюн компьютердин кыймылын чечүү үчүн кокус сандарды түзүү функциясын колдонот. Бул жеңүүчүнү аныктоо үчүн жогоруда айтылган эрежелерге ылайык. Оюн эки режимде иштелип чыккан: Кадимки режим жана Акылдуу режим, мында акылдуу режим колдонуучунун кыймылына каршы чабуул жасайт, б.а. Компьютер колдонуучуга каршы бардык кыймылдарды жеңет.
cap = cv2. VideoCapture (0) # Камерадан сүрөт тартуу үчүн
Эми оюнду кадимки режимде жасайбыз, анда система/ Raspberry Pi колдун сүрөтүн тартып, анализдеп, кол жаңсасын аныктайт. Андан кийин кокус сандардын генераторун колдонуп, компьютердин кыймылы ойнотулат. Жеңүүчү эрежелердин негизинде тандалып, анан экранда көрсөтүлөт. Төмөнкү буйрукту колдонуп оюнду баштаңыз.
python3 play.py
9 -кадам: Servo мотор интеграциясы?
Акыры, бул долбоорго servo моторун кошуңуз. Серво мотору - бул Raspberry Piнин GPIO пин 17си, ал бурулуш бурчун көзөмөлдөө үчүн PWM функциясына ээ.
Бул долбоордо колдонулган Servo Motor SG-90 болуп саналат. Ал 180 ° га чейин сааттын жебеси боюнча жана сааттын жебесине каршы айланууларды жасай алат
Байланыштар төмөнкүчө берилет.
Servo Motor - Raspberry Pi
Vcc - +5V
GND - GND
Сигнал - GPIO17
Бул долбоордо RPi. GPIO жана убакыт сыяктуу китепканалар колдонулат.
GPO катары RPi. GPIO импорттоо
импорттоо убактысы
Кийин GPIO пин төмөнкү саптарды колдонуу менен PWMге конфигурацияланган
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 50 Гц жыштыкта PWM катары колдонуу үчүн конфигурацияланган. Серво моторунун бурчуна PWMдин иштөө циклин (Ton & Toff) коюу аркылуу жетишилет
милдет = бурч/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (милдет) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Бул каалаган айлануу бурчун бере турган ар бир импульс үчүн керектүү кадам бурчун чыгарат.
Эми мен диаграмманы алып, аны таш, кагаз жана кайчы үчүн үчкө бөлдүм. Серво мотору диаграмманын ортосуна бекитилген. Көрсөткүч/жапкыч servo мотордун валына туташтырылган. Бул вал компьютердин кыймылын сценарийде эсептелген логика боюнча көрсөтөт.
10 -кадам: Долбоордун иштеши?
Эми, бул ойноо убактысы. Келгиле, долбоордун ишин карап көрөлү.
Эгерде сиз бул долбоорду курууда кандайдыр бир көйгөйлөргө туш болсоңуз, менден сураңыз. Сураныч, кийинкиде эмне кылгыңыз келген жаңы долбоорлорду сунуштаңыз.
Бармагыңызды бериңиз, эгер бул сизге чындап жардам берген болсо жана менин каналымды кызыктуу долбоорлор үчүн ээрчиңиз.:)
Кааласаңыз бул видеону бөлүшүңүз.
Жазылууңузга кубанычтабыз:
Окуганыңыз үчүн рахмат!
11 -кадам: Code - Project Repo
Код GitHub репозиторийине кошулат, аны код бөлүмүндө табууга болот.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Сунушталууда:
Handxold Arduino Paper Rock Scissors Game 20x4 LCD дисплейин I2C менен колдонуу: 7 кадам
I2C менен 20х4 ЖК дисплейди колдонгон Arduino Paper Rock Scissors Оюну: Баарына салам же, балким, мен " Салам Дүйнө! &Quot; деп айтышым керек, Arduino менин көп нерселериме кирген долбоору менен бөлүшүү мен үчүн чоң кубаныч болмок. Бул I2C 20x4 ЖК дисплейин колдонгон Arduino Paper Rock Scissors оюну. Мен
Scissor Drive Servo Hat: 4 кадам (Сүрөттөр менен)
Scissor Drive Servo Hat: Бул жөнөкөй 3D басып чыгаруу жана серво кыймылдаткыч долбоору, мээнин шишигин алып салуу боюнча операция болгон Simone Giertz үчүн эң сонун сезим. Кайчы түзмөк кичине Ard менен иштеген микро сервво мотору жана Trinket микроконтроллери тарабынан башкарылат
X-box Rock Band барабандарын Midi Stand Alone электрондук барабанына айландырыңыз: 4 кадам (сүрөттөр менен)
X-box Rock Band барабандарын Midi Stand Alone электрондук барабанына айландырыңыз. Мен колдонулган x-box барабан топтомун алуу бактысына ээ болдум, ал бир аз орой формада, калак жок, бирок эч нерсе оңдолбойт. аны өз алдынча электр барабанына айландырыңыз. Пьезо сенсорунан аналогдук маанини окуп, аны MIDI комментарийине айландырыңыз
Робототехника Remote Control Rock Crawler Arduino: 4 кадам
Robotics Remote Control Rock Crawler Arduino: Бул окшош жана абдан сөөктүү. Мен бул долбоорду жасагысы келгендерге сууну жана кирден коргоо үчүн электрониканы жабуунун бир жолун карап көрүүнү сунуштаар элем
RedCat Gen7 үчүн Rock Buggy Body: 9 кадам (сүрөттөр менен)
RedCat Gen7 үчүн Rock Buggy Body: Inspiration3D Басып чыгаруучу аксессуарлар жана ал тургай бүт денелер RC коомчулугунда, айрыкча RC Crawlers жанрында абдан популярдуу. Өзүм жана башкалар ар кандай бекер долбоорлорду чыгардык, бирок буга чейин болуп көрбөгөн нерсе - өндүрүүчүлөр чыгарышы керек