Sadržaj:

Škare AI za škare za kamen: 11 koraka
Škare AI za škare za kamen: 11 koraka

Video: Škare AI za škare za kamen: 11 koraka

Video: Škare AI za škare za kamen: 11 koraka
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Studeni
Anonim
Škare za rock papir AI
Škare za rock papir AI

Je li vam ikada bilo dosadno sami? Igrajmo se stijena, papira i škara protiv interaktivnog sustava pokrenutog inteligencijom.

Korak 1: Stvari korištene u ovom projektu

Hardverske komponente

  • Raspberry Pi 3 Model B+ × 1
  • Modul kamere Raspberry Pi V2 × 1
  • SG90 Mikro servo motor × 1

Softverske aplikacije

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Korak 2: Ideja?

Image
Image

Nakon što sam radio na raznim projektima na različitim domenama, planirao sam napraviti zabavan projekt i odlučio sam napraviti igru rock-paper-škare:)

U ovom projektu napravit ćemo interaktivnu igru i igrati protiv računala koje pokreće AI za donošenje odluka. AI koristi kameru povezanu s Raspberry Pi kako bi prepoznao pokrete koje je korisnik napravio rukom, klasificirao ih u najbolju kategoriju (naljepnicu) kamen, papir ili škare. Nakon što se računalo pomakne, koračni motor spojen na Raspberry Pi pokazuje prema smjeru na temelju svog kretanja.

Pravila koja se moraju uzeti u obzir za ovu igru:

  • Rock otupljuje škare
  • Papir prekriva stijenu
  • Škare rezati papir

Dobitnik će biti odlučen na temelju gore navedena tri uvjeta. Pogledajmo ovdje kratki demo projekta.

Korak 3: Početak rada?

Početak rada?
Početak rada?
Početak rada?
Početak rada?

Malina Pi

Koristio sam Raspberry Pi 3 model B+ koji ima velika poboljšanja i snažniji je od ranijeg Raspberry Pi 3 modela B.

Raspberry Pi 3 B+ integriran je sa 64-bitnim četverojezgrenim procesorom na 1,4 GHz, dvopojasnim bežičnim LAN-om, Bluetoothom 4.2/BLE, bržim Ethernetom i podrškom za Power-over-Ethernet (s zasebnim PoE HAT-om).

Specifikacije: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitni SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz i 5 GHz IEEE 802.11.b/g/n/ac bežični LAN, Bluetooth 4.2, BLE, Gigabitni Ethernet preko USB 2.0 (maksimalna propusna moć 300 Mbps), prošireno 40-pinsko GPIO zaglavlje, HDMI4 USB 2.0 priključci u punoj veličini, priključak za CSI kameru za povezivanje Raspberry Pi kamere, DSI priključak za prikaz za povezivanje Raspberry Pi zaslona osjetljivog na dodir 4-polni stereo izlaz i kompozitni video priključak, priključak za Micro SD za učitavanje vašeg operacijskog sustava i spremanje podataka 5V/2.5A istosmjerna ulazna snaga, podrška za Power-over-Ethernet (PoE) (zahtijeva zasebni PoE HAT).

Servo motor

Koristimo servo motor SG-90, motor velikog okretnog momenta koji može podnijeti opterećenje do 2,5 kg (1 cm).

USB kamera

USB kamera koja igru čini interaktivnom s obradom slike

Neki prespojni kabeli koriste se za ožičenje koračnog motora i Raspberry Pi.

Korak 4: Zapisati Raspbian na SD karticu?

Zapisati Raspbian na SD karticu?
Zapisati Raspbian na SD karticu?
Zapisati Raspbian na SD karticu?
Zapisati Raspbian na SD karticu?
Spaliti Raspbian na SD karticu?
Spaliti Raspbian na SD karticu?

Raspbian je Linux distribucija po izboru koja radi na Raspberry Pi. U ovom vodiču koristit ćemo Lite verziju, ali se može koristiti i verzija za računala (koja dolazi s grafičkim okruženjem).

  • Preuzmite Etcher i instalirajte ga.
  • Spojite čitač SD kartica sa SD karticom unutra.
  • Otvorite Etcher i s tvrdog diska odaberite Raspberry Pi.img ili.zip datoteku koju želite zapisati na SD karticu.
  • Odaberite SD karticu na koju želite zapisati svoju sliku.
  • Pregledajte svoje odabire i kliknite "Flash!" za početak upisivanja podataka na SD karticu.

Povežite uređaj s mrežom

  • Omogućite SSH pristup dodavanjem prazne datoteke ssh, ponovno postavljene u korijen volumena za pokretanje na SD kartici.
  • Umetnite SD karticu u Raspberry Pi. Pokrenut će se za otprilike 20 sekundi. Sada biste trebali imati SSH pristup svom Raspberry Pi. Prema zadanim postavkama, njegovo ime hosta bit će raspberrypi.local. Na računalu otvorite prozor terminala i upišite sljedeće:

ssh [email protected]

Zadana lozinka je malina

Ovdje sam koristio zaseban monitor za povezivanje s Raspberry Pi.

Korak 5: Prikupljanje skupa podataka? ️

Prikupljate skup podataka? ️
Prikupljate skup podataka? ️
Prikupljate skup podataka? ️
Prikupljate skup podataka? ️

Prvi korak u ovom projektu je prikupljanje podataka. Sustav mora identificirati pokret ruke i prepoznati radnju te je prema tome pokrenuti.

Instaliramo nekoliko knjižnica na Raspberry Pi pomoću pip install

naredba.

sudo apt-get update && sudo apt-get upgrade 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

Ako naiđete na probleme s OpenCVpackageom, toplo preporučujem instaliranje ovih paketa.

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

Instalirali smo sve potrebne ovisnosti za ovaj projekt. Skup podataka izrađen je zbirkama i rasporedom slika pod odgovarajućom oznakom.

Ovdje stvaramo slike skupa podataka za naljepnicu rock, papir i škare pomoću sljedećeg isječka.

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 snima za svaku naljepnicu (kamen, papir, škare i ništa).

Korak 6: Dizajniranje mrežne mreže i obuka modela ⚒️⚙️

Dizajniranje nacionalne mreže i obučavanje modela ⚒️⚙️
Dizajniranje nacionalne mreže i obučavanje modela ⚒️⚙️

Jezgra ovog projekta je klasifikator slika koji klasificira jednu od tri kategorije. Za izradu ovog klasifikatora koristimo unaprijed obučeni CNN (konvolucijska mreža) pod nazivom SqueezeNet.

Ovdje koristimo Keras i TensorFlow za generiranje modela SqueezeNet koji može identificirati pokret. Slike koje smo generirali u prethodnom koraku koriste se za obuku modela. Model se trenira pomoću skupa podataka generiranog za nijednu spomenutu epohu (ciklus).

Model je konfiguriran s hiperparametrima kako je dolje prikazano.

model = Sekvencijalno ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Ispadanje (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivacija ('relu'), GlobalAveragePooling2D (), Aktivacija ('softmax')])

Dok se model vježba, možete pronaći gubitak i točnost modela za svaku epohu, a točnost se povećava u nekom trenutku nakon nekoliko epoha.

Otprilike je trebalo 2 sata za generiranje modela s najvećom točnošću nakon 10 epoha. Ako naiđete na bilo kakvu pogrešku u dodjeli memorije, učinite sljedeće (Hvala Adrian -u)

Da biste povećali svoj prostor za zamjenu, otvorite /etc /dphys-swapfile, a zatim uredite varijablu CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Primijetite da povećavam zamjenu sa 100 MB na 1024 MB. Odatle ponovno pokrenite uslugu zamjene:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

Bilješka:

Povećanje veličine zamjene izvrstan je način za spaljivanje memorijske kartice, stoga svakako poništite ovu promjenu i ponovo pokrenite uslugu zamjene kad završite. Ovdje možete pročitati više o velikim veličinama koje oštećuju memorijske kartice.

Korak 7: Testiranje modela ✅

Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅
Testiranje modela ✅

Nakon što je model generiran, on proizvodi izlaznu datoteku "rock-paper-scissors-model.h5". Ova se datoteka koristi kao izvor za provjeru može li sustav identificirati različite geste rukama i može li razlikovati radnje.

Model se učitava u python skriptu na sljedeći način

model = model_ opterećenja ("model-škare-papir-model.h5")

Kamera čita testnu sliku i transformira potrebni model boje, a zatim veličinu slike mijenja na 227 x 227 piksela (ista veličina koja se koristi za generiranje modela). Slike koje su korištene za obuku modela mogu se koristiti za testiranje generiranog modela.

img = cv2.imread (put datoteke)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Nakon što se model učita i kamera dobije sliku, model predviđa snimljenu sliku pomoću učitanog modela SqueezeNet i predviđa kretnje korisnika.

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = mapper (move_code) ispis ("Predviđeno: {}". format (move_name))

Pokrenite skriptu test.py da biste testirali model s različitim testnim slikama.

python3 test.py

Sada je model spreman za otkrivanje i razumijevanje gesta rukama.

Korak 8: Igra škare za kamen-papir

Igra kamen-papir-škare
Igra kamen-papir-škare

Igra koristi funkciju generiranja slučajnih brojeva za odlučivanje o potezu računala. Slijedi gore navedena pravila za određivanje pobjednika. Igra je dizajnirana s dva načina rada: Normalni način i Inteligentni način rada, gdje inteligentni način rada kontrira kretanju korisnika, tj. Računalo pobjeđuje u svim potezima protiv korisnika.

cap = cv2. VideoCapture (0) # Za snimanje slike s fotoaparata

Sada napravimo igru u normalnom načinu rada gdje sustav/ Raspberry Pi snima ruku i analizira i identificira pokret ruke. Zatim se pomoću generatora slučajnih brojeva reproducira potez računala. Pobjednik se bira na temelju pravila, a zatim se prikazuje na ekranu. Pokrenite igru pomoću sljedeće naredbe.

python3 play.py

Korak 9: Integracija servo motora?

Konačno, ovom projektu dodajte servo motor. Servo motor je GPIO pin 17 Raspberry Pi, koji ima PWM funkciju za kontrolu kuta rotacije.

Servo motor koji se koristi u ovom projektu je SG-90. Može rotirati u smjeru kazaljke na satu i u suprotnom smjeru do 180 °

Veze su date na sljedeći način.

Servo motor - Raspberry Pi

Vcc - +5V

GND - GND

Signal - GPIO17

U ovom se projektu koriste knjižnice kao što su RPi. GPIO i vrijeme.

uvezite RPi. GPIO kao GPIO

vrijeme uvoza

GPIO pin se zatim konfigurira na PWM pomoću sljedećih redaka

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

GPIO Pin 17 konfiguriran je za upotrebu kao PWM na frekvenciji od 50Hz. Kut servo motora postiže se postavljanjem radnog ciklusa (Ton & Toff) PWM -a

dužnost = kut/18 + 2

GPIO.izlaz (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

To će proizvesti željeni kut koraka za svaki impuls, što bi dalo željeni kut rotacije.

Sada sam uzeo grafikon i podijelio ga na tri dijela, za kamen, papir i škare. Servo motor je pričvršćen na središte karte. Pokazivač/poklopac je spojen na vratilo servo motora. Ova osovina ukazuje na potez računala prema logici izračunatoj u skripti.

Korak 10: Rad na projektu?

Image
Image

A sada je vrijeme za igru. Pogledajmo rad projekta.

Ako ste naišli na bilo kakve probleme u izgradnji ovog projekta, slobodno me pitajte. Predložite nove projekte koje želite da radim sljedeće.

Palac gore ako vam je stvarno pomoglo i pratite moj kanal za zanimljive projekte.:)

Podijelite ovaj video ako vam se sviđa.

Drago mi je što ste se pretplatili:

Hvala na čitanju!

Korak 11: Kod - Repo projekta

Kôd je dodan u GitHub spremište koje se može pronaći u odjeljku koda.

Rahul24-06/škare za kamen-papir-https://github.com/Rahul24-06/Rock-Paper-Scissors

Preporučeni: