Tartalomjegyzék:
- 1. lépés: A projektben használt dolgok
- 2. lépés: Ötlet?
- 3. lépés: Első lépések?
- 4. lépés: A Raspbian írása az SD -kártyára?
- 5. lépés: Az adathalmaz összegyűjtése? ️
- 6. lépés: NN tervezése és a modell betanítása ⚒️⚙️
- 7. lépés: A modell tesztelése ✅
- 8. lépés: Kő-papír-olló játék
- 9. lépés: Szervomotor integráció?
- 10. lépés: A projekt működése?
- 11. lépés: Kód - Project Repo
Videó: Rock Paper Scissor AI: 11 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Unatkozott valaha egyedül? Játsszunk rockot, papírt és ollót egy intelligens intelligens rendszerrel.
1. lépés: A projektben használt dolgok
Hardver alkatrészek
- Raspberry Pi 3 B+ × 1 modell
- Raspberry Pi kamera modul V2 × 1
- SG90 Mikroszervo motor × 1
Szoftver alkalmazások
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
2. lépés: Ötlet?
Miután különböző projekteken dolgoztam különböző területeken, szórakoztató projektet terveztem, és úgy döntöttem, hogy kő-papír-olló játékot készítek:)
Ebben a projektben egy interaktív játékot fogunk csinálni, és játszani fogunk a számítógép ellen, amely AI segítségével hajtja végre a döntéseket. Az AI a Raspberry Pi -hez csatlakoztatott kamerát használja fel, hogy felismerje, mi mozgatja a felhasználó kezét, és besorolja őket a legjobb kategóriába (címke), kőzetbe, papírba vagy ollóba. Miután a számítógép megmozdult, a Raspberry Pi -hez csatlakoztatott léptetőmotor a mozgása alapján az irány felé mutat.
A játék során figyelembe veendő szabályok:
- Rock tompítja az ollót
- Papír borítja a sziklát
- Olló vágott papírt
A nyertes a fenti három feltétel alapján dől el. Nézzük itt a projekt gyors bemutatóját.
3. lépés: Első lépések?
Raspberry Pi
Olyan Raspberry Pi 3 B+ modellt használtam, amely nagyszerű fejlesztésekkel rendelkezik és erősebb, mint a korábbi Raspberry Pi 3 B modell.
A Raspberry Pi 3 B+ integrálva van az 1,4 GHz-es 64 bites négymagos processzorral, a kétsávos vezeték nélküli LAN-val, a Bluetooth 4.2/BLE-vel, a gyorsabb Ethernet és a Power-over-Ethernet támogatással (külön PoE HAT).
Műszaki adatok: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bites SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz és 5 GHz IEEE 802.11. B/g/n/ac vezeték nélküli LAN, Bluetooth 4.2, BLE, Gigabit Ethernet USB 2.0-n keresztül (maximális átviteli sebesség 300 Mbps), a kibővített 40 tűs GPIO fejléc, teljes méretű HDMI4 USB 2.0 portok, CSI kamera port a Raspberry Pi kamera csatlakoztatásához, DSI kijelző port a Raspberry Pi érintőképernyős kijelző csatlakoztatásához 4 pólusú sztereó kimenet és kompozit video port, Micro SD port az operációs rendszer betöltéséhez és az adatok tárolásához 5V/2,5A DC tápellátás, Power-over-Ethernet (PoE) támogatás (külön PoE HAT szükséges).
Szervómotor
SG-90 szervo motort használunk, nagy nyomatékú motort, amely képes elviselni a terhelést 2,5 kg-ig (1 cm).
USB kamera
USB kamera, amely interaktívvá teszi a játékot a képfeldolgozással
Néhány Jumper kábelt a léptetőmotor és a Raspberry Pi vezetékezésére használnak.
4. lépés: A Raspbian írása az SD -kártyára?
A Raspbian a Raspberry Pi -n futó Linux -disztribúció. Ebben az útmutatóban a Lite verziót fogjuk használni, de az asztali verzió (amely grafikus környezettel rendelkezik) is használható.
- Töltse le és telepítse az Etcher programot.
- Csatlakoztasson egy SD -kártyaolvasót a benne lévő SD -kártyával.
- Nyissa meg az Etcher alkalmazást, és válassza ki a merevlemezről azt a Raspberry Pi.img vagy.zip fájlt, amelyet az SD -kártyára szeretne írni.
- Válassza ki azt az SD -kártyát, amelyre a képet be szeretné írni.
- Tekintse át a választásokat, és kattintson a "Flash!" elkezdeni az adatok írását az SD -kártyára.
Csatlakoztassa az eszközt a hálózatához
- Engedélyezze az SSH -hozzáférést üres ssh fájl hozzáadásával, amely ismét az SD -kártya rendszerindító kötetének gyökerében található.
- Helyezze be az SD -kártyát a Raspberry Pi -be. Nagyjából 20 másodperc múlva indul. Most SSH -hozzáféréssel kell rendelkeznie a Raspberry Pi -hez. Alapértelmezés szerint a gazdagép neve raspberrypi.local lesz. A számítógépen nyisson meg egy terminál ablakot, és írja be a következőt:
Az alapértelmezett jelszó a málna
Itt külön monitort használtam a Raspberry Pi -vel való interfészhez.
5. lépés: Az adathalmaz összegyűjtése? ️
A projekt első lépése az adatgyűjtés. A rendszernek azonosítania kell a kézmozdulatot, fel kell ismernie a műveletet, és ennek megfelelően kell mozognia.
Számos könyvtárat telepítünk a Raspberry Pi -re a pip install használatával
parancs.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip telepítés numpy pip telepítés telepítse a tensorflow pip telepítést Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-becslő pip install 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
Ha bármilyen problémával szembesül az OpenCVpackage programmal, erősen javaslom ezeknek a csomagoknak a telepítését.
sudo apt-get install 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
A projekthez szükséges összes függőséget telepítettük. Az adatkészletet a képek gyűjtése és elrendezése állítja össze a megfelelő címke alatt.
Itt az alábbi részlet segítségével hozzuk létre a szikla, papír és olló címke adatkészlet -képeit.
roi = keret [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
A kép minden címke esetében rögzítésre kerül (kő, papír, olló és nincs).
6. lépés: NN tervezése és a modell betanítása ⚒️⚙️
A projekt lényege egy képosztályozó, amely a három kategória egyikét osztályozza. Ennek az osztályozónak az elkészítéséhez a SqueezeNet nevű, előre betanított CNN-t (Convolutional Network) használjuk.
Itt a Keras és a TensorFlow segítségével generáljuk a SqueezeNet modellt, amely azonosítani tudja a gesztust. Az előző lépésben készített képeket a modell betanítására használjuk. A modell képzése az említett korszakok (ciklusok) számára generált adatkészlet használatával történik.
A modell az alább látható hiperparaméterekkel van konfigurálva.
modell = Szekvenciális ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Kiesés (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'érvényes'), Aktiválás („relu”), GlobalAveragePooling2D (), Aktiválás (softmax)])
Amíg a modell képzés alatt áll, megtalálhatja a modell veszteségét és pontosságát minden korszakban, és néhány pont után bizonyos ponton megnő a pontosság.
Nagyjából 2 órát vett igénybe a modell legmagasabb pontossággal történő generálása 10 korszak után. Ha bármilyen memóriaelosztási hibával szembesül, tegye a következőket (Adriannak köszönhetően)
A csereterület növeléséhez nyissa meg az /etc /dphys-swapfile fájlt, majd szerkessze a CONF_SWAPSIZE változót:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Figyelje meg, hogy a csere értékét 100 MB -ról 1024 MB -ra növelem. Innen indítsa újra a csereszolgáltatást:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Jegyzet:
A csereméret növelése nagyszerű módja annak, hogy kiégjen a memóriakártya, ezért győződjön meg róla, hogy visszaállítja ezt a módosítást, és ha végzett, indítsa újra a csereszolgáltatást. Itt olvashat bővebben a nagy méretű memóriakártyák sérüléséről.
7. lépés: A modell tesztelése ✅
A modell létrehozása után létrehozza a "rock-paper-scissors-model.h5" kimeneti fájlt. Ezt a fájlt használják forrásként annak tesztelésére, hogy a rendszer képes -e azonosítani a különböző kézmozdulatokat, és képes -e megkülönböztetni a műveleteket.
A modell a következőképpen töltődik be a python szkriptbe
model = load_model ("rock-paper-scissors-model.h5")
A fényképezőgép beolvassa a tesztképet, és átalakítja a kívánt színmodellt, majd átméretezi a képet 227 x 227 képpont méretűre (A modellgeneráláshoz használt méret). A modell oktatásához használt képek felhasználhatók a generált modell tesztelésére.
img = cv2.imread (fájlútvonal)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Miután a modell betöltődött, és a fényképezőgép megszerezte a képet, a modell megjósolja a rögzített képet a betöltött SqueezeNet modell segítségével, és előrejelzi a felhasználó mozgását.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = leképező (move_code) print ("Predipped: {}". format (move_name))
Futtassa a test.py szkriptet, hogy tesztelje a modellt különböző tesztképekkel.
python3 test.py
Most a modell készen áll a kézmozdulatok észlelésére és megértésére.
8. lépés: Kő-papír-olló játék
A játék véletlenszám -generáló függvényt használ a számítógép lépésének eldöntésére. A győztes kiválasztásához a fenti szabályokat kell követnie. A játék két móddal készült: Normál mód és Intelligens mód, ahol az intelligens mód ellentámadásba lendíti a felhasználó mozgását, azaz a számítógép minden lépést megnyer a felhasználó ellen.
cap = cv2. VideoCapture (0) # Kép rögzítése a kamerából
Most készítsük el a játékot normál módban, ahol a rendszer/ Raspberry Pi felveszi a kezét, és elemzi és azonosítja a kézmozdulatot. Ezután egy véletlenszám -generátor segítségével a számítógép mozog. A nyertest a szabályok alapján választják ki, majd megjelenítik a képernyőn. Indítsa el a játékot a következő paranccsal.
python3 play.py
9. lépés: Szervomotor integráció?
Végül adja hozzá a szervomotort ehhez a projekthez. A szervomotor a Raspberry Pi GPIO 17 -es csapja, amely PWM funkcióval rendelkezik a forgásszög szabályozásához.
A projektben használt szervomotor az SG-90. Elforgathatja az óramutató járásával megegyező és az óramutató járásával ellentétes irányban 180 ° -ig
A kapcsolatok az alábbiak szerint vannak megadva.
Szervomotor - Raspberry Pi
Vcc - +5V
GND - GND
Jel - GPIO17
Ebben a projektben olyan könyvtárakat használnak, mint az RPi. GPIO és az idő.
importálja az RPi. GPIO -t GPIO -ként
importálási idő
A GPIO pin ezután PWM -re van konfigurálva a következő sorok használatával
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
A GPIO Pin 17 úgy van konfigurálva, hogy PWM -ként használja 50 Hz -es frekvencián. A szervomotor szöge a PWM munkaciklusának (Ton & Toff) beállításával érhető el
szolgálat = szög/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Ez minden impulzushoz előállítja a kívánt lépési szöget, amely megadja a kívánt forgásszöget.
Most vettem a diagramot, és három részre vágtam, szikla, papír és olló számára. A szervomotor a diagram közepére van rögzítve. A mutató/szárny a szervomotor tengelyéhez van csatlakoztatva. Ez a tengely a számítógép mozgására mutat a szkriptben kiszámított logika szerint.
10. lépés: A projekt működése?
És most itt a játékidő. Lássuk a projekt működését.
Ha bármilyen probléma merült fel a projekt építése során, kérdezzen bátran. Kérem, javasoljon új projekteket, amelyeket szeretne, hogy legközelebb tegyek.
Tedd a hüvelykujjad, ha tényleg segített neked, és kövesd a csatornámat az érdekes projektekért.:)
Ossza meg ezt a videót, ha tetszik.
Örülök, hogy feliratkoztál:
Köszönöm, hogy elolvasta!
11. lépés: Kód - Project Repo
A kód hozzáadódik a GitHub adattárhoz, amely a kódrészletben található.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Sisssors
Ajánlott:
Készítse el saját Rock Band Ekit adapterét (régebbi adapter nélkül), pusztítóan!: 10 lépés
Készíts saját Rock Band Ekit adaptert (régebbi adapter nélkül), megsemmisítő! . Köszönet DONINATOR úrnak a Youtube -on, aki készített egy videót, amely részletesen bemutatja hasonló
Az X-box Rock Band dobjait midi önálló elektronikus dobokká alakíthatja: 4 lépés (képekkel)
Kapcsolja be az X-box Rock Band dobjait Midi Stand Alone Electronic Drums-ba: Szerencsém volt, hogy használt x-box dobkészletet kaptam, kissé durva formában, és nincs lapát, de semmi, amit nem lehet megjavítani. alakítsa önálló elektromos dobkészletté. Az analóg érték beolvasása a piezo szenzorból, és MIDI comman -vé alakítása
Robotika távirányító Arduino Rock Crawler: 4 lépés
Robotika távirányító Arduino Rock Crawler: Ez úgy néz ki, és nagyon csupasz. Azt javaslom mindazoknak, akik szeretnék megvalósítani ezt a projektet, fontolják meg az elektronika takarásának valamilyen módját, hogy megvédjék a vizet és a szennyeződést
Rock Buggy Body for RedCat Gen7: 9 lépés (képekkel)
Rock Buggy Body for RedCat Gen7: Inspiration3D A nyomtatási kiegészítők és akár egész testek is nagyon népszerűek az RC közösség körében, különösen az RC Crawlers műfajában. Jómagam és mások mindenféle ingyenes projektet adtak ki, de ami hallatlan, az a gyártók kiadása
WISH ROCK: 5 lépés (képekkel)
WISH ROCK: Kényelembe, melegségbe és kellemes fogásba illik .. Pszichés energia felszabadítása .. A többfelhasználós kristály színű határozott tippekkel; ~ ZÖLD == Gyógyító energia