Բովանդակություն:
- Քայլ 1: Այս նախագծում օգտագործվող բաները
- Քայլ 2: Գաղափար:
- Քայլ 3: Սկսե՞լ:
- Քայլ 4. Այրել Raspbian- ը SD քարտի վրա:
- Քայլ 5. Տվյալների հավաքագրո՞ւմ: ️
- Քայլ 6. NN- ի ձևավորում և մոդելի ուսուցում ⚒️⚙️
- Քայլ 7: Մոդելի փորձարկում
- Քայլ 8. Rock-Paper-Scissors Game
- Քայլ 9. Servo Motor Integration?
- Քայլ 10. Նախագծի մշակում:
- Քայլ 11. Կոդ - Reրագրի վերանայում
Video: Rock Paper Scissor AI: 11 Քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:46
Երբևէ մենակ ձանձրացե՞լ եք: Եկեք ռոք, թուղթ և մկրատ խաղանք ինտելեկտուալ համակարգի դեմ, որը սնվում է խելքով:
Քայլ 1: Այս նախագծում օգտագործվող բաները
Սարքավորման բաղադրիչներ
- Ազնվամորի Pi 3 մոդել B+ × 1
- Raspberry Pi Camera Module V2 × 1
- SG90 Միկրո servo շարժիչ × 1
Softwareրագրային ծրագրեր
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Քայլ 2: Գաղափար:
Տարբեր տիրույթների վրա տարբեր նախագծերի վրա աշխատելուց հետո ես պլանավորեցի պատրաստել զվարճալի նախագիծ, և որոշեցի պատրաստել ժայռ-թուղթ-մկրատ խաղ:)
Այս նախագծում մենք կկատարենք ինտերակտիվ խաղ և կխաղանք համակարգչի դեմ, որը որոշումներ կայացնելու համար սնուցվում է AI- ով: AI- ն օգտագործում է Raspberry Pi- ի հետ կապված տեսախցիկը `ճանաչելու, թե ինչ շարժումներ է կատարում օգտվողը ձեռքով, դասակարգելու դրանք լավագույն կատեգորիայի (պիտակ) ժայռի, թղթի կամ մկրատի մեջ: Երբ համակարգիչն իր շարժումն է կատարում, Raspberry Pi- ին միացած սլաքային շարժիչը ցույց է տալիս դեպի իր շարժման հիման վրա ուղղված ուղղությունը:
Կանոններ, որոնք պետք է հաշվի առնել այս խաղի համար.
- Ռոքը բթացնում է մկրատը
- Թուղթը ծածկում է ժայռը
- Մկրատը կտրեց թուղթ
Հաղթողը կորոշվի վերը նշված երեք պայմանների հիման վրա: Եկեք տեսնենք նախագծի արագ ցուցադրումը այստեղ:
Քայլ 3: Սկսե՞լ:
Ազնվամորի Պի
Ես օգտագործել եմ 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, Gigabit Ethernet USB 2.0-ի միջոցով (առավելագույն թողունակությունը ՝ 300 Մբիթ / վրկ), Ընդլայնված 40-պինանոց GPIO վերնագիր, Լայն չափի HDMI4 USB 2.0 պորտեր, CSI տեսախցիկի պորտ ՝ Raspberry Pi տեսախցիկին միացնելու համար, DSI ցուցադրման նավահանգիստ ՝ Raspberry Pi սենսորային էկրանին միացնելու համար 4 բևեռ ստերեո ելք և կոմպոզիտային վիդեո պորտ, Micro SD պորտ ՝ ձեր օպերացիոն համակարգը բեռնելու և տվյալների պահպանման համար 5V/2.5A DC հոսանքի մուտք, Power-over-Ethernet (PoE) աջակցություն (պահանջում է առանձին PoE HAT):
Servo Motor
Մենք օգտագործում ենք SG-90 servo շարժիչ, բարձր ոլորող շարժիչով շարժիչ, որը կարող է դիմակայել բեռը մինչև 2,5 կգ (1 սմ):
USB տեսախցիկ
USB տեսախցիկ ՝ խաղը պատկերների մշակման հետ ինտերակտիվ դարձնելու համար
Որոշ Jumper մալուխներ օգտագործվում են stepper շարժիչը և Raspberry Pi- ն լարելու համար:
Քայլ 4. Այրել Raspbian- ը SD քարտի վրա:
Raspbian- ը Raspberry Pi- ով աշխատող ընտրովի Linux բաշխումն է: Այս ուղեցույցում մենք կօգտագործենք Lite տարբերակը, բայց Desktop տարբերակը (որը գալիս է գրաֆիկական միջավայրով) նույնպես կարող է օգտագործվել:
- Ներբեռնեք Etcher- ը և տեղադրեք այն:
- Միացրեք SD քարտի ընթերցողին SD քարտի ներսում:
- Բացեք Etcher- ը և ձեր կոշտ սկավառակից ընտրեք Raspberry Pi.img կամ.zip ֆայլը, որը ցանկանում եք գրել SD քարտին:
- Ընտրեք SD քարտը, որին ցանկանում եք գրել ձեր պատկերը:
- Վերանայեք ձեր ընտրած տարբերակները և կտտացրեք «Flash»: սկսել SD քարտին տվյալների գրել:
Միացրեք սարքը ձեր ցանցին
- Միացրեք SSH մուտքը ՝ ավելացնելով դատարկ ֆայլի ssh, որը կրկին տեղադրված է ձեր SD քարտի բեռնախցիկի ծավալի արմատում:
- Տեղադրեք SD քարտը Raspberry Pi- ի մեջ: Այն կբեռնվի մոտ 20 վայրկյանում: Այժմ դուք պետք է SSH մուտք ունենաք ձեր Raspberry Pi- ին: Լռելյայն, դրա հյուրընկալողի անունը կլինի raspberrypi.local: Ձեր համակարգչում բացեք տերմինալի պատուհան և մուտքագրեք հետևյալը.
Լռելյայն գաղտնաբառը ազնվամորին է
Այստեղ ես օգտագործել եմ առանձին մոնիտոր ՝ Raspberry Pi- ի հետ ինտերֆեյսի համար:
Քայլ 5. Տվյալների հավաքագրո՞ւմ: ️
Այս նախագծի առաջին քայլը տվյալների հավաքագրումն է: Համակարգը պետք է նույնացնի ձեռքի ժեստը և ճանաչի գործողությունը և համապատասխանաբար ստիպի շարժվել:
Մենք մի քանի գրադարան ենք տեղադրում Raspberry Pi- ի վրա ՝ օգտագործելով pip install
հրաման.
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 install h5py pip install Keras pip տեղադրել tensorflow pip install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estator pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install 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 install libatlas-base-dev sudo apt-get install 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 (count + 1)) cv2.imwrite (save_path, roi)
Պատկերը վերցված է յուրաքանչյուր պիտակի համար (ժայռ, թուղթ, մկրատ և ոչ մեկը):
Քայլ 6. NN- ի ձևավորում և մոդելի ուսուցում ⚒️⚙️
Այս նախագծի առանցքը պատկերի դասակարգիչ է, որը դասակարգում է երեք կատեգորիաներից մեկը: Այս դասակարգիչը պատրաստելու համար մենք օգտագործում ենք նախապես պատրաստված CNN- ը (Կոնվոլյուցիոն ցանց), որը կոչվում է SqueezeNet:
Այստեղ մենք օգտագործում ենք Keras և TensorFlow ՝ SqueezeNet մոդելը գեներացնելու համար, որը կարող է նույնականացնել ժեստը: Մոդելը վարժեցնելու համար օգտագործվում են այն պատկերները, որոնք մենք ստեղծել ենք նախորդ քայլում: Մոդելը վերապատրաստվում է ՝ օգտագործելով նշված դարաշրջանների (ցիկլերի) համար ստեղծված Տվյալների հավաքածուն:
Մոդելը կազմաձևված է հիպեր պարամետրերով, ինչպես ցույց է տրված ստորև:
մոդել = հաջորդական ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Բաց թողնում (0.5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Ակտիվացում ('relu'), GlobalAveragePooling2D (), Ակտիվացում («softmax»)])
Մինչ մոդելը մարզվում է, դուք կարող եք գտնել մոդելի կորուստն ու ճշգրտությունը յուրաքանչյուր դարաշրջանի համար, և ճշգրտությունը մեծանում է ինչ -որ ժամանակաշրջանից հետո ինչ -որ պահի:
Մոտավորապես 2 ժամ տևեց մոդելը 10 դարաշրջանից հետո ամենաբարձր ճշգրտությամբ: Եթե հիշողության բաշխման որևէ սխալ եք բախվում, կատարեք հետևյալ քայլերը (Ադրիանի շնորհիվ)
Փոխանակման տարածքը մեծացնելու համար բացեք /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» ելքային ֆայլը: Այս ֆայլը օգտագործվում է որպես աղբյուր ՝ ստուգելու համար, թե արդյոք համակարգը կարող է նույնականացնել ձեռքի տարբեր ժեստեր և կարող է տարբերակել գործողությունները:
Մոդելը բեռնված է պիթոնի սցենարում հետևյալ կերպ
model = 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 (pred [0]) move_name = mapper (move_code) տպագիր («Կանխատեսված է ՝ {}». ձևաչափ (move_name))
Գործարկեք test.py սցենարը ՝ մոդելը փորձարկելու համար տարբեր տեստերի պատկերներով:
python3 test.py
Այժմ մոդելը պատրաստ է հայտնաբերել և հասկանալ ձեռքի շարժումները:
Քայլ 8. Rock-Paper-Scissors Game
Խաղը օգտագործում է պատահական թվերի ստեղծման գործառույթ ՝ համակարգչի քայլը որոշելու համար: Այն հետևում է վերը նշված կանոններին `հաղթողին որոշելու համար: Խաղը նախատեսված է երկու ռեժիմով ՝ Նորմալ ռեժիմ և Խելացի ռեժիմ, որտեղ խելացի ռեժիմը հակահարված է տալիս օգտագործողի շարժմանը, այսինքն ՝ Համակարգիչը շահում է օգտագործողի դեմ ուղղված բոլոր քայլերը:
cap = cv2. VideoCapture (0) # Տեսախցիկից լուսանկարելու համար
Այժմ եկեք խաղը դարձնենք նորմալ ռեժիմով, որտեղ համակարգը/ Raspberry Pi- ն վերցնում է ձեռքի նկարը և վերլուծում և նույնականացնում ձեռքի ժեստը: Այնուհետև օգտագործելով պատահական թվերի գեներատոր, խաղում է համակարգչի քայլը: Հաղթողը ընտրվում է կանոնների հիման վրա, այնուհետև ցուցադրվում է էկրանին: Սկսեք խաղը ՝ օգտագործելով հետևյալ հրամանը.
python3 play.py
Քայլ 9. Servo Motor Integration?
Վերջապես, այս նախագծին ավելացրեք servo շարժիչը: Servo շարժիչը Raspberry Pi- ի GPIO փին 17 -ն է, որն ունի PWM գործառույթ ՝ ռոտացիայի անկյունը վերահսկելու համար:
Այս նախագծում օգտագործվող Servo Motor- ը SG-90 է: Այն կարող է պտտել ժամացույցի սլաքի ուղղությամբ և հակառակ ՝ մինչև 180 °
Կապերը տրվում են հետևյալ կերպ.
Servo Motor - Ազնվամորի Պի
Vcc - +5V
GND - GND
Ազդանշան - GPIO17
Այս նախագծում օգտագործվում են այնպիսի գրադարաններ, ինչպիսիք են RPi. GPIO- ն և ժամանակը:
ներմուծեք RPi. GPIO- ն որպես GPIO
ներմուծման ժամանակը
GPIO- ի քորոցը այնուհետև կազմաձևված է PWM- ին ՝ օգտագործելով հետևյալ տողերը
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 – ը կազմաձևված է ՝ որպես PWM օգտագործելու 50 Հց հաճախականությամբ: Servo շարժիչի անկյունը ձեռք է բերվում PWM- ի աշխատանքային ցիկլը (Ton & Toff) սահմանելով
տուրք = անկյուն/18 + 2
GPIO.putput (servoPIN, True) p. ChangeDutyCycle (տուրք) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Սա կստեղծի ցանկալի քայլի անկյուն յուրաքանչյուր զարկերակի համար, ինչը կտա պտույտի ցանկալի անկյունը:
Այժմ ես վերցրեցի գծապատկերը և այն կտրեցի երեք մասի ՝ ռոքի, թղթի և մկրատի համար: Servo շարժիչը ամրագրված է գծապատկերի կենտրոնում: Inուցանիշը/փեղկը միացված է servo շարժիչի լիսեռին: Այս լիսեռը մատնանշում է համակարգչի քայլը ՝ ըստ սցենարում հաշվարկված տրամաբանության:
Քայլ 10. Նախագծի մշակում:
Եվ հիմա, խաղալու ժամն է: Եկեք տեսնենք նախագծի աշխատանքը:
Եթե այս նախագծի կառուցման ընթացքում որևէ խնդրի եք բախվել, ազատ զգացեք ինձ հարցնել: Խնդրում եմ առաջարկեք նոր նախագծեր, որոնք ցանկանում եք, որ ես անեմ հաջորդը:
Ձեռք տվեք, եթե դա իսկապես օգնեց ձեզ և հետևեք իմ ալիքին հետաքրքիր նախագծերի համար::)
Եթե ցանկանում եք, կիսվեք այս տեսանյութով:
Երջանիկ եմ, որ բաժանորդագրվել եք ՝
Շնորհակալություն կարդալու համար:
Քայլ 11. Կոդ - Reրագրի վերանայում
Կոդն ավելացվում է GitHub շտեմարանին, որը կարելի է գտնել կոդի բաժնում:
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Խորհուրդ ենք տալիս:
Ինչպես անել-E-INK E-PAPER DISPLAY MODULE-Part 2 - Ներմուծել Անհատականացված պատկերը ՝ 4 քայլ
Ինչպես անել-E-INK E-PAPER DISPLAY MODULE-Part 2 | Ներմուծել Անհատականացրեք պատկերը. Ինչպես ձեռնարկել այս ձեռնարկի 2-րդ մասում `E-INK E-PAPER DISPLAY MODULE | Ներմուծեք Անհատականացրեք պատկերը, ես պատրաստվում եմ կիսվել ձեզ հետ, թե ինչպես ներմուծել ձեզ դուր եկած պատկերը և ցուցադրել այն E-Ink Display Module- ում: Դա շատ պարզ է ՝ մի քանի վայրկյանների օգնությամբ
Light Up Paper Circuit LED քարտ `12 քայլ
Light Up Paper Circuit LED Card. Սա այն ձեռնարկն է, որին ես հետևել եմ ՝ սա պատրաստելու համար. ունեմ պղնձե ժապավեն, սա իմ տարբերակն է ՝ դրա շուրջ աշխատելու տարբեր եղանակներ: Սա է
Paper Doorbell W/ P5.js & Makey Makey: 9 քայլ
Paper Doorbell W/ P5.js & Makey Makey. Այս նախագիծը ստեղծում է ուրվագիծ p5.js- ում, որը կարող է աուդիո ֆայլ նվագարկել առանցքային սեղմման միջոցով, այնուհետև մատիտով, թուղթով և Makey Makey- ով մի պարզ կոճակ է ստեղծում ձայնը խթանելու համար: այս նախագիծը օգտագործում է դռան զանգի ձայնը, քայլերը ներառում են, թե ինչպես բեռնել
PAPER HUNGRY ROBOT - Pringles Recycle Arduino Robot. 19 քայլ (նկարներով)
PAPER HUNGRY ROBOT - Pringles Recycle Arduino Robot. Սա Hungry Robot- ի մեկ այլ տարբերակ է, որը ես կառուցել եմ 2018 թվականին: Այս ռոբոտը կարող եք պատրաստել առանց 3D տպիչի: Մնում է միայն գնել Pringles բանկա, սերվո շարժիչ, հարևանության ցուցիչ, arduino և որոշ գործիքներ: Դուք կարող եք ներբեռնել բոլոր
Rock Buggy Body RedCat Gen7: 9 քայլ (նկարներով)
Rock Buggy Body for RedCat Gen7: Inspiration3D Տպագրման պարագաները և նույնիսկ ամբողջ մարմինները մեծ ժողովրդականություն են վայելում RC համայնքում, հատկապես RC Crawlers- ի ժանրում: Ես և ուրիշները թողարկել ենք բոլոր տեսակի անվճար նախագծեր, բայց այն, ինչ չլսված է, արտադրողների կողմից թողարկվելն է