Kazalo:
- 1. korak: Stvari, uporabljene v tem projektu
- 2. korak: Ideja?
- 3. korak: Kako začeti?
- 4. korak: zapisati Raspbian na kartico SD?
- 5. korak: Zbiranje nabora podatkov? ️
- 6. korak: Oblikovanje omrežja in usposabljanje modela ⚒️⚙️
- 7. korak: Preizkus modela ✅
- 8. korak: Igra škarje za kamen, papir
- 9. korak: Integracija servo motorja?
- 10. korak: Delovanje projekta?
- 11. korak: Koda - Project Repo
Video: Škarje za papirni kamen AI: 11 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:04
Vam je bilo kdaj dolgčas sami? Igrajmo kamen, papir in škarje proti interaktivnemu sistemu, ki deluje na inteligenci.
1. korak: Stvari, uporabljene v tem projektu
Strojne komponente
- Raspberry Pi 3 Model B+ × 1
- Modul kamere Raspberry Pi V2 × 1
- SG90 Mikro servo motor × 1
Programske aplikacije
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
2. korak: Ideja?
Ko sem delal na različnih projektih na različnih področjih, sem nameraval narediti zabaven projekt in odločil sem se, da bom naredil igro s škarjami za kamen:)
V tem projektu bomo naredili interaktivno igro in se igrali proti računalniku, ki ga poganja AI, za sprejemanje odločitev. AI uporablja kamero, povezano z Raspberry Pi, da prepozna, kaj uporabnik premakne z roko, jih razvrsti v najboljšo kategorijo (nalepko), kamen, škarje. Ko se računalnik premakne, koračni motor, povezan z Raspberry Pi, kaže na smer, ki temelji na njegovem premiku.
Pravila, ki jih je treba upoštevati pri tej igri:
- Rock topi škarje
- Papir prekriva skalo
- Škarje režejo papir
Zmagovalec bo določen na podlagi zgornjih treh pogojev. Oglejmo si hiter predstavitev projekta tukaj.
3. korak: Kako začeti?
Malina Pi
Uporabil sem Raspberry Pi 3 Model B+, ki ima velike izboljšave in je močnejši od prejšnjega Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ je integriran s 1,4-GHz 64-bitnim štirijedrnim procesorjem, dvopasovnim brezžičnim LAN-om, Bluetooth 4.2/BLE, hitrejšim Ethernetom in podporo Power-over-Ethernet (z ločenim PoE HAT).
Specifikacije: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitni SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz in 5 GHz IEEE 802.11.b/g/n/ac brezžično omrežje, Bluetooth 4.2, BLE, Gigabitni ethernet prek USB 2.0 (največja prepustnost 300 Mb / s), podaljšana 40-polna glava GPIO, vrata HDMI4 polne velikosti USB 2.0, vrata za kamero CSI za priključitev kamere Raspberry Pi, vrata za prikaz DSI za priključitev zaslona na dotik Raspberry Pi 4-polni stereo izhod in kompozitni video vrata, vrata Micro SD za nalaganje operacijskega sistema in shranjevanje podatkov 5V/2.5A enosmerna vhodna moč, podpora Power-over-Ethernet (PoE) (zahteva ločeno PoE HAT).
Servo motor
Uporabljamo servo motor SG-90, motor z visokim navorom, ki prenese obremenitev do 2,5 kg (1 cm).
USB kamera
Kamera USB za interaktivno igro z obdelavo slik
Nekateri skakalni kabli se uporabljajo za ožičenje koračnega motorja in Raspberry Pi.
4. korak: zapisati Raspbian na kartico SD?
Raspbian je izbrana distribucija Linuxa, ki deluje na Raspberry Pi. V tem priročniku bomo uporabljali različico Lite, lahko pa uporabimo tudi namizno različico (ki prihaja z grafičnim okoljem).
- Prenesite Etcher in ga namestite.
- Bralnik kartic SD povežite s kartico SD znotraj.
- Odprite Etcher in na trdem disku izberite datoteko Raspberry Pi.img ali.zip, ki jo želite zapisati na kartico SD.
- Izberite kartico SD, na katero želite zapisati svojo sliko.
- Preglejte svoje izbire in kliknite 'Flash!' za začetek zapisovanja podatkov na kartico SD.
Napravo povežite z omrežjem
- Omogočite dostop SSH tako, da dodate prazno datoteko ssh, ki je spet postavljena v koren zagonskega nosilca na kartici SD.
- Vstavite kartico SD v Raspberry Pi. Začel se bo v približno 20 sekundah. Zdaj bi morali imeti dostop do SSH do vašega Raspberry Pi. Privzeto bo njegovo ime gostitelja raspberrypi.local. V računalniku odprite terminalsko okno in vnesite naslednje:
Privzeto geslo je malina
Tukaj sem uporabil ločen monitor za vmesnik z Raspberry Pi.
5. korak: Zbiranje nabora podatkov? ️
Prvi korak v tem projektu je zbiranje podatkov. Sistem mora prepoznati potezo roke in prepoznati dejanje ter se ustrezno premakniti.
Na Raspberry Pi namestimo več knjižnic z uporabo pip install
ukaz.
sudo apt-get update && sudo apt-get nadgradi install 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-estimator 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
Če imate težave z OpenCVpackage, toplo priporočam namestitev teh paketov.
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
Za ta projekt smo namestili vse potrebne odvisnosti. Nabor podatkov je sestavljen iz zbirk in razporeditev slik pod ustrezno oznako.
Tukaj ustvarimo slike nabora podatkov za nalepko rock, papir in škarje z naslednjim delčkom.
roi = okvir [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Slika se zajame za vsako nalepko (kamen, papir, škarje in nič).
6. korak: Oblikovanje omrežja in usposabljanje modela ⚒️⚙️
Jedro tega projekta je klasifikator slik, ki razvršča eno od treh kategorij. Za izdelavo tega klasifikatorja uporabljamo vnaprej usposobljeno CNN (konvolucijsko omrežje), imenovano SqueezeNet.
Tukaj uporabljamo Keras in TensorFlow za ustvarjanje modela SqueezeNet, ki lahko identificira potezo. Slike, ki smo jih ustvarili v prejšnjem koraku, se uporabljajo za usposabljanje modela. Model je usposobljen z naborom podatkov, ustvarjenim za nobeno od omenjenih epoh (ciklov).
Model je konfiguriran s hiperparametri, kot je prikazano spodaj.
model = zaporedno ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Opustitev (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivacija ('relu'), GlobalAveragePooling2D (), Aktivacija ('softmax')])
Medtem ko se model usposablja, lahko ugotovite izgubo in natančnost modela za vsako epoho, natančnost pa se v določenem času po nekaj obdobjih poveča.
Ustvarjanje modela z največjo natančnostjo po desetih obdobjih je trajalo približno 2 uri. Če naletite na napake pri dodeljevanju pomnilnika, naredite naslednje (hvala Adrian)
Če želite povečati svoj prostor za zamenjavo, odprite /etc /dphys-swapfile in nato uredite spremenljivko CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Upoštevajte, da zamenjavo povečujem s 100 MB na 1024 MB. Od tam znova zaženite storitev zamenjave:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Opomba:
Povečanje velikosti zamenjave je odličen način za izgorevanje pomnilniške kartice, zato to spremembo razveljavite in znova zaženite storitev zamenjave, ko končate. Več o poškodovanih pomnilniških karticah velikih velikosti lahko preberete tukaj.
7. korak: Preizkus modela ✅
Ko je model ustvarjen, ustvari izhodno datoteko "rock-paper-scissors-model.h5". Ta datoteka se uporablja kot vir za preverjanje, ali sistem lahko prepozna različne kretnje rok in ali lahko razlikuje dejanja.
Model se naloži v skript python na naslednji način
model = model_tovora ("kamen-papir-škarje-model.h5")
Kamera prebere preskusno sliko in preoblikuje zahtevani barvni model, nato pa spremeni velikost slike na 227 x 227 slikovnih pik (enaka velikost za generiranje modela). Slike, ki so bile uporabljene za usposabljanje modela, se lahko uporabijo za testiranje ustvarjenega modela.
img = cv2.imread (pot datoteke)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Ko je model naložen in kamera pridobi sliko, model napoveduje posneto sliko z uporabo naloženega modela SqueezeNet in naredi napoved gibanja uporabnika.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predvideno: {}". format (move_name))
Zaženite skript test.py, da preizkusite model z različnimi preskusnimi slikami.
python3 test.py
Zdaj je model pripravljen zaznati in razumeti kretnje rok.
8. korak: Igra škarje za kamen, papir
Igra uporablja funkcijo ustvarjanja naključnih števil za odločitev o potezi računalnika. Za določitev zmagovalca sledimo zgoraj navedenim pravilom. Igra je zasnovana z dvema načinoma: normalni način in inteligenten način, kjer inteligentni način nasprotuje gibanju uporabnika, torej računalnik zmaga v vseh potezah proti uporabniku.
cap = cv2. VideoCapture (0) # Za zajem slike iz fotoaparata
Zdaj pa naredimo igro v običajnem načinu, kjer sistem/ Raspberry Pi posname sliko roke in analizira ter identificira potezo roke. Nato se z generatorjem naključnih števil predvaja računalniška poteza. Zmagovalec je izbran na podlagi pravil in nato prikazan na zaslonu. Začnite igro z naslednjim ukazom.
python3 play.py
9. korak: Integracija servo motorja?
Končno temu projektu dodajte servo motor. Servo motor je GPIO pin 17 Raspberry Pi, ki ima funkcijo PWM za nadzor kota vrtenja.
Servo motor, uporabljen v tem projektu, je SG-90. Lahko se vrti v smeri urinega kazalca in v nasprotni smeri urinega kazalca do 180 °
Povezave so podane na naslednji način.
Servo motor - Raspberry Pi
Vcc - +5V
GND - GND
Signal - GPIO17
V tem projektu se uporabljajo knjižnice, kot sta RPi. GPIO in čas.
uvozite RPi. GPIO kot GPIO
čas uvoza
Pin GPIO je nato konfiguriran na PWM z naslednjimi vrsticami
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 je konfiguriran za uporabo kot PWM pri frekvenci 50Hz. Kot servo motorja se doseže z nastavitvijo obratovalnega cikla (Ton & Toff) PWM
dajatev = kot/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
To bo ustvarilo želeni kot koraka za vsak impulz, kar bi dalo želeni kot vrtenja.
Zdaj sem vzel grafikon in ga razrezal na tri dele, za kamen, papir in škarje. Servo motor je pritrjen na sredino karte. Kazalec/loputa je povezana z gredjo servo motorja. Ta gred kaže na premik računalnika v skladu z logiko, izračunano v skripti.
10. korak: Delovanje projekta?
In zdaj je čas za igro. Poglejmo delovanje projekta.
Če ste pri gradnji tega projekta naleteli na kakršne koli težave, me vprašajte. Predlagajte nove projekte, ki jih želite narediti naslednje.
Palec gor, če vam je res pomagalo, in spremljajte moj kanal za zanimive projekte.:)
Če želite, delite ta video.
Veseli smo, da ste se naročili:
Hvala za branje!
11. korak: Koda - Project Repo
Koda je dodana v skladišče GitHub, ki ga najdete v razdelku s kodo.
Rahul24-06/škarje za kamen-papir-https://github.com/Rahul24-06/Rock-Paper-Scissors
Priporočena:
KAMEN LCD s pametnim domom: 5 korakov
STONE LCD s pametnim domom: Danes sem dobil STONE -ov zaslon s serijskimi vrati, ki lahko komunicira prek serijskih vrat MCU, logično zasnovo uporabniškega vmesnika tega zaslona pa lahko oblikujemo neposredno s programsko opremo VGUS, ki je na uradni spletni strani STONE. udobje
Medicinski ventilator + KAMEN LCD + Arduino UNO: 6 korakov
Medicinski ventilator + STONE LCD + Arduino UNO: Od 8. decembra 2019 so v mestu Wuhan v provinci Hubei na Kitajskem poročali o več primerih pljučnice z neznano etiologijo. V zadnjih mesecih je bilo v celotni državi povzročenih skoraj 80000 potrjenih primerov, vpliv epidemije pa je
Igra s škarjami za kamen: 6 korakov
Igra s škarjami za kamen: To je moj prvi pouk. Že dolgo sem ga želel napisati, vendar nisem imel pri roki nobenega projekta, ki bi ga lahko objavil tukaj. Ko sem prišel na idejo o tem projektu, sem se odločil, da je to tisti. Tako sem brskal po spletnem mestu tensorflow.js, da sem
Ročne Arduino škarje za papir Rock Rock z 20 -palčnim LCD zaslonom z I2C: 7 korakov
Ročne Arduino škarje za papir Rock Rock z 20 -palčnim LCD zaslonom z I2C: Pozdravljeni ali pa bi lahko rekel "Hello World!" To je ročna igra Arduino Paper Rock Scissors, ki uporablja LCD zaslon I2C 20x4. JAZ
Škarje za skalni papir: 10 korakov
Škarje za skalni papir: Namen: Ko končate to, se boste naučili, kako narediti preprosto igro Rock, škarje za papir iz nič z uporabo Code.org. Potrebni materiali / zahteve: Osnovno razumevanje skladnje Javascript, računalnik, račun Code.org