Мазмұны:
- 1 -қадам: Бұл жобада қолданылатын заттар
- 2 -қадам: Идея?
- 3 -қадам: Жұмысты бастау керек пе?
- 4 -қадам: Raspbian SD картасына жазылады ма?
- 5 -қадам: Деректер жинағы? ️
- 6 -қадам: NN жобалау және модельді оқыту ⚒️⚙️
- 7 -қадам: Үлгіні тестілеу ✅
- 8-қадам: Тас-қағаз-қайшы ойыны
- 9 -қадам: Серво қозғалтқышының интеграциясы?
- 10 -қадам: Жобаның жұмысы?
- 11 -қадам: Code - Project Repo
Бейне: Рок қағаз қайшы AI: 11 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Сіз жалғыздықтан жалыққан кезді сезіндіңіз бе? Ақылдылықпен жұмыс істейтін интерактивті жүйеге қарсы рок, қағаз және қайшы ойнайық.
1 -қадам: Бұл жобада қолданылатын заттар
Аппараттық компоненттер
- Таңқурай Pi 3 үлгісі B+ × 1
- Raspberry Pi камера модулі V2 × 1
- SG90 Микросерво қозғалтқышы × 1
Бағдарламалық қосымшалар
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
2 -қадам: Идея?
Әр түрлі домендердегі әр түрлі жобалармен жұмыс жасағаннан кейін мен қызықты жоба жасауды жоспарладым, мен рок-қағаз-қайшы ойынын жасауды шештім:)
Бұл жобада біз интерактивті ойын жасаймыз және шешімдер қабылдау үшін АИ -мен жұмыс істейтін компьютерге қарсы ойнаймыз. AI Raspberry Pi -ге қосылған камераны пайдаланушының қолымен не істегенін тану үшін, оларды тас, қағаз немесе қайшының ең жақсы санатына (белгісіне) жіктеу үшін пайдаланады. Компьютер қозғалғаннан кейін, Raspberry Pi -ге қосылған қадамдық қозғалтқыш оның қозғалысына негізделген бағытты көрсетеді.
Бұл ойынның ережелерін ескеру қажет:
- Рок қайшыны бұрады
- Қағаз тасқа жабылады
- Қайшы қағазды кеседі
Жеңімпаз жоғарыдағы үш шарт бойынша анықталады. Бұл жерде жобаның жылдам демонстрациясын көрейік.
3 -қадам: Жұмысты бастау керек пе?
Raspberry Pi
Мен Raspberry Pi 3 Model B+ қолдандым, ол керемет жақсартуларға ие және бұрынғы Raspberry Pi 3 Model B -ге қарағанда қуатты.
Raspberry Pi 3 B+ 1,4 ГГц төрт ядролы төрт ядролы процессормен, екі жолақты сымсыз LAN, Bluetooth 4.2/BLE, жылдам Ethernet және Ethernet арқылы қуатпен қолдау (бөлек PoE HAT бар) қосылған.
Ерекшеліктер: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 биттік SoC @ 1.4 ГГц, 1 ГБ LPDDR2 SDRAM, 2.4 ГГц және 5 ГГц 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 тұрақты ток кірісі, Ethernet арқылы қуат (PoE) қолдауы (бөлек PoE HAT қажет).
Серво моторы
Біз SG-90 сервоқозғалтқышын қолданамыз, ол 2,5 кг (1 см) дейінгі жүктемені көтере алатын жоғары моментті қозғалтқыш.
USB камерасы
USB камерасы ойынды кескінмен өңдеуге интерактивті етеді
Кейбір Jumper кабельдері қадамдық қозғалтқышты және Raspberry Pi -ді сымдау үшін қолданылады.
4 -қадам: Raspbian SD картасына жазылады ма?
Raspbian - бұл Raspberry Pi -де жұмыс істейтін Linux таңдауы. Бұл нұсқаулықта біз Lite нұсқасын қолданатын боламыз, бірақ жұмыс үстелінің нұсқасы (графикалық ортамен бірге келеді) де қолданыла алады.
- Etcher бағдарламасын жүктеп алыңыз және орнатыңыз.
- Ішінде SD картасы бар SD картасын оқу құралын қосыңыз.
- Etcher бағдарламасын ашып, қатты дискіден SD картасына жазғыңыз келетін Raspberry Pi.img немесе.zip файлын таңдаңыз.
- Суретті жазғыңыз келетін SD картасын таңдаңыз.
- Таңдауларды қарап шығып, 'Жарқыл!' Түймесін басыңыз. SD картасына деректерді жазуды бастау үшін.
Құрылғыны желіге қосыңыз
- SD картасына жүктеу көлемінің түбіріне қайтадан орналастырылған бос ssh файлын қосу арқылы SSH қатынасын қосыңыз.
- SD картасын Raspberry Pi ішіне салыңыз. Ол шамамен 20 секунд ішінде жүктеледі. Сізде Raspberry Pi -ге SSH қатынасы болуы керек. Әдепкі бойынша, оның хост атауы raspberrypi.local болады. Компьютерде терминал терезесін ашып, келесіні теріңіз:
Әдепкі құпия сөз - таңқурай
Мұнда мен Raspberry Pi интерфейсі үшін бөлек мониторды қолдандым.
5 -қадам: Деректер жинағы? ️
Бұл жобаның бірінші қадамы - мәліметтерді жинау. Жүйе қолдың қимылын анықтап, әрекетті тануы және соған сәйкес қимыл жасауы керек.
Pasp install көмегімен Raspberry Pi -ге бірнеше кітапхананы орнатамыз
команда
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip h5py pip install Keras pip tensorflow pip орнату Werkzeug pip орнату Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip astor pip орнату tensorboard-pipa орнату tensorflow-сметаторлық пип орнату mp pip install grpcio pip орнату absl-pypip орнату gast pip орнату joblib pip орнату Markdown pip install protobuf pip install PyYAML pip install six
Егер сізде OpenCVpackage -мен қандай да бір мәселелер туындаса, мен бұл пакеттерді орнатуды ұсынамын.
sudo apt-get libhdf5-dev орнатыңыз
sudo apt-get install libhdf5-serial-dev sudo apt-get орнату libatlas-base-dev sudo apt-get орнату libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Біз бұл жобаға қажетті барлық тәуелділіктерді орнаттық. Деректер жинағы суреттердің сәйкес белгі бойынша жиналуы мен реттелуімен жасалады.
Мұнда біз келесі үзінді көмегімен тас, қағаз және қайшы белгісіне арналған деректер жиынтығының суреттерін жасаймыз.
roi = кадр [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (санау + 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 сағат қажет болды, егер сізде жадты бөлу қателіктері болса, келесі әрекеттерді орындаңыз (Adrian арқасында)
Своп кеңістігін ұлғайту үшін /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 («rock-paper-scissors-model.h5»)
Камера сынақ суретін оқиды және қажетті түсті үлгіні түрлендіреді, содан кейін суреттің өлшемін 227 x 227 пиксельге дейін өзгертеді (Үлгіні құру үшін бірдей өлшем). Модельді үйрету үшін қолданылған суреттерді жасалған модельді тексеру үшін пайдалануға болады.
img = cv2.imread (файл жолы)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Модель жүктелгеннен кейін және камера суретті алғаннан кейін, модель жүктелген SqueezeNet үлгісі арқылы түсірілген суретті болжайды және пайдаланушының қозғалысына болжам жасайды.
pred = model.predict (np.array ())
move_code = np.argmax (пред [0]) move_name = mapper (move_code) басып шығару («Болжалды: {}». пішімі (move_name))
Үлгіні әр түрлі тест суреттерімен тексеру үшін test.py сценарийін іске қосыңыз.
python3 test.py
Енді модель қол қимылдарын анықтауға және түсінуге дайын.
8-қадам: Тас-қағаз-қайшы ойыны
Ойын компьютердің қозғалысын шешу үшін кездейсоқ сандарды генерациялау функциясын қолданады. Жеңімпазды анықтау үшін жоғарыда айтылған ережелер сақталады. Ойын екі режимде жасалған: қалыпты режим және интеллектуалды режим, онда интеллектуалды режим пайдаланушының қозғалысына қарсы шабуыл жасайды, яғни компьютер қолданушыға қарсы барлық қозғалыстарды жеңеді.
cap = cv2. VideoCapture (0) # Камерадан суретке түсіру үшін
Енді ойынды Қалыпты режимде жасайық, онда жүйе/ Raspberry Pi қолдың суретін түсіріп, қол қимылын талдайды және анықтайды. Содан кейін кездейсоқ сандар генераторының көмегімен компьютердің қозғалысы ойнатылады. Жеңімпаз ережелерге сәйкес таңдалады, содан кейін экранда көрсетіледі. Келесі пәрменді пайдаланып ойынды бастаңыз.
python3 play.py
9 -қадам: Серво қозғалтқышының интеграциясы?
Ақырында, бұл жобаға сервоприводты қосыңыз. Серво қозғалтқышы - айналу бұрышын басқаруға арналған PWM функциясы бар Raspberry Pi -дің GPIO түйрегіші 17.
Бұл жобада қолданылатын Servo Motor-SG-90. Ол 180 ° дейін сағат тілімен және сағат тіліне қарсы айналдыра алады
Қосылымдар келесі түрде беріледі.
Серво моторы - Raspberry Pi
Кернеу кернеуі - +5В
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 (жұмыс) уақыты.ұйқы (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Бұл кез келген бұрылу бұрышын беретін әр импульс үшін қажетті қадам бұрышын шығарады.
Енді мен диаграмманы алып, оны тасқа, қағазға және қайшыға арналған үш бөлікке бөлдім. Серво қозғалтқышы диаграмманың ортасына бекітілген. Көрсеткіш/жапқыш серво қозғалтқышының білігіне қосылған. Бұл білік сценарийде есептелген логикаға сәйкес компьютердің қозғалысын көрсетеді.
10 -қадам: Жобаның жұмысы?
Ал қазір ойын уақыты. Жобаның жұмысын көрейік.
Егер сіз осы жобаны құруда қандай да бір мәселелерге тап болсаңыз, мені сұраудан тартынбаңыз. Өтінемін, мен одан әрі жасағым келетін жаңа жобалар.
Егер бұл сізге шынымен көмектесті болса, бас бармағыңызды қойыңыз және қызықты жобалар үшін менің каналымды қадағалаңыз.:)
Егер сізге ұнаса, бұл видеоны бөлісіңіз.
Жазылғаныңызға қуаныштымын:
Оқығаныңыз үшін рахмет!
11 -қадам: Code - Project Repo
Код GitHub репозиторийіне қосылады, оны код бөлімінен табуға болады.
Rahul24-06/Рок-қағаз-қайшы-https://github.com/Rahul24-06/Rock-Paper-Scissors
Ұсынылған:
Өзіңіздің рок -тобыңыздың Ekit адаптерін жасаңыз (ескі адаптерсіз), зиянсыз !: 10 қадам
Өзіңіздің рок -тобыңыздың Ekit адаптерін жасаңыз (ескі адаптерсіз), зиянсыз !: Танымал подкаст жүргізушісі өзінің сымды USB -адаптерінің өшіп бара жатқанына алаңдаушылық білдіргенін естігеннен кейін, RB -ке жақсырақ/реттелетін eKit қосудың DIY шешімін іздедім. . Youtube -тегі DONINATOR мырзаға рахмет, ол өзінің ұқсас оқиғасы туралы бейне түсірді
Тас қағаз қайшы ойыны: 6 қадам
Тас қағаз қайшы ойыны: Бұл менің бірінші нұсқаулығым. Мен ұзақ уақыт бойы жазғым келді, бірақ менде жариялай алатын жоба жоқ. Мен бұл жоба туралы ойға келген кезде, мен бұл жоба деп шештім, сондықтан мен tensorflow.js сайтын шолдым, ол мен
Қолмен Arduino қағаз рок қайшы ойыны 20x4 СКД дисплейі I2C көмегімен: 7 қадам
IX форматындағы 20х4 СКД дисплейін қолданатын Arduino қағаздан жасалған қайшы ойыны: Барлығына сәлем немесе мен «Сәлем әлем!» Деп айтуым керек, мен сіздермен Arduino -ның көптеген нәрселерімен айналысқан жобаны бөліскеніме қуанышты болар едім. Бұл I2C 20x4 СКД дисплейі бар Arduino Paper Rock Scissors портативті ойыны. Мен
X-box рок-тобының барабандарын жалғыз электронды барабанға айналдырыңыз: 4 қадам (суреттермен)
X-box рок-тобының барабандарын жалғыз электронды барабанға айналдырыңыз. Маған х-бокс барабанының қондырғысы келді, ол сәл өрескел, қалақшасы жоқ, бірақ оны түзетуге болмайтын ештеңе жоқ. оны дербес электр барабан жинағына айналдырыңыз. Пьезо сенсорынан аналогтық мәнді оқу және оны MIDI комманына айналдыру
Қағаз қайшы: 10 қадам
Рок қағаз қайшылары: Мақсаты: Мұны аяқтағаннан кейін, Code.org көмегімен нөлден қарапайым рок, қағаз қайшысын жасауды үйренесіз. Қажетті материалдар / талаптар: Javascript синтаксисі, компьютер, Code.org тіркелгісі туралы негізгі түсінік