Kazalo:

Škarje za papirni kamen AI: 11 korakov
Škarje za papirni kamen AI: 11 korakov

Video: Škarje za papirni kamen AI: 11 korakov

Video: Škarje za papirni kamen AI: 11 korakov
Video: Дэниел Шмахтенбергер: Уничтожат ли нас технологии? 2024, November
Anonim
Škarje za papirni kamen AI
Škarje za papirni kamen AI

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?

Image
Image

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?

Kako začeti?
Kako začeti?
Kako začeti?
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?

Želite zapisati Raspbian na kartico SD?
Želite zapisati Raspbian na kartico SD?
Želite zapisati Raspbian na kartico SD?
Želite zapisati Raspbian na kartico SD?
Želite zapisati Raspbian na kartico SD?
Želite 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:

ssh [email protected]

Privzeto geslo je malina

Tukaj sem uporabil ločen monitor za vmesnik z Raspberry Pi.

5. korak: Zbiranje nabora podatkov? ️

Zbirate nabor podatkov? ️
Zbirate nabor podatkov? ️
Zbirate nabor podatkov? ️
Zbirate nabor 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 ⚒️⚙️

Oblikovanje NN in usposabljanje modela ⚒️⚙️
Oblikovanje NN 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 ✅

Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje 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 škarje za kamen
Igra škarje za kamen

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?

Image
Image

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: