Škare AI za makaze za papir: 11 koraka
Škare AI za makaze za papir: 11 koraka

Video: Škare AI za makaze za papir: 11 koraka

Video: Škare AI za makaze za papir: 11 koraka
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2025, Januar
Anonim
Škare za kameni papir AI
Škare za kameni papir AI

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

Korak 1: Stvari koje se koriste 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 škare za kamen-papir:)

U ovom projektu napravit ćemo interaktivnu igru i igrati protiv računara koji pokreće AI za donošenje odluka. Vještačka inteligencija koristi kameru povezanu s Raspberry Pi kako bi prepoznala pokrete koje je korisnik napravio rukom, svrstala ih u najbolju kategoriju (etiketu) kamen, papir ili škare. Nakon što se računar pokrene, koračni motor povezan sa Raspberry Pi pokazuje prema smjeru na osnovu njegovog kretanja.

Pravila koja se moraju uzeti u obzir za ovu igru:

  • Rock otupljuje makaze
  • Papir prekriva stijenu
  • Makaze rezati papir

Dobitnik će biti odlučen na osnovu gore navedena tri uslova. Pogledajmo kratku demonstraciju projekta ovdje.

Korak 3: Početak?

Počinjemo ?
Počinjemo ?
Počinjemo ?
Počinjemo ?

Raspberry 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, Bluetooth 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 portovi u punoj veličini, port za CSI kameru za povezivanje Raspberry Pi kamere, DSI port za povezivanje Raspberry Pi ekrana osjetljivog na dodir 4-polni stereo izlaz i kompozitni video port, Micro SD port za učitavanje vašeg operativnog sistema i skladištenje podataka 5V/2.5A DC ulazna struja, Power-over-Ethernet (PoE) podrška (zahtijeva zasebni PoE HAT).

Servo motor

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

USB kamera

USB kamera koja igru čini interaktivnom sa obradom slike

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

Korak 4: Narezati Raspbian na SD karticu?

Narezati Raspbian na SD karticu?
Narezati Raspbian na SD karticu?
Narezati Raspbian na SD karticu?
Narezati Raspbian na SD karticu?
Narezati Raspbian na SD karticu?
Narezati 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 Desktop verzija (koja dolazi s grafičkim okruženjem).

  • Preuzmite Etcher i instalirajte ga.
  • Povežite č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 svoj odabir i kliknite 'Flash!' za početak upisivanja podataka na SD karticu.

Povežite uređaj sa mrežom

  • Omogućite SSH pristup dodavanjem prazne datoteke ssh, koja se ponovo nalazi u korijenu volumena za pokretanje na vašoj 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čunaru otvorite prozor terminala i upišite sljedeće:

ssh [email protected]

Zadana lozinka je malina

Ovdje sam koristio zaseban monitor za povezivanje sa 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. Sistem mora identificirati pokret ruke i prepoznati radnju te je prema tome pokrenuti.

Instaliramo nekoliko biblioteka na Raspberry Pi pomoću pip install

komanda.

sudo apt-get update && sudo apt-get nadogradi 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 bilo kakve 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 se sastoji od zbirki i rasporeda slika pod odgovarajućom oznakom.

Ovdje stvaramo slike skupa podataka za etiketu rock, papir i škare koristeći sljedeći isječak.

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 obuka modela ⚒️⚙️
Dizajniranje nacionalne mreže i obuka modela ⚒️⚙️

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

Ovdje koristimo Keras i TensorFlow za generiranje SqueezeNet modela koji može identificirati pokret. Slike koje smo generirali u prethodnom koraku koriste se za obuku modela. Model je obučen korištenjem skupa podataka generiranih za nijednu od spomenutih epoha (ciklusa).

Model je konfiguriran s hiperparametrima kako je dolje prikazano.

model = Sekvencijalno ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Odustajanje (0,5), Konvolucija2D (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 se suočite s greškom 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 ponovo pokrenite uslugu zamjene:

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

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

Bilješka:

Povećanje veličine zamjene odličan je način za sagorijevanje memorijske kartice, stoga svakako poništite ovu promjenu i ponovo pokrenite uslugu zamjene kada 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 datoteka se koristi kao izvor za provjeru može li sistem identificirati različite pokrete rukama i može li razlikovati radnje.

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

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

Kamera čita probnu 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 (putanja datoteke)

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

Nakon što se model učita i slika se prikupi kamerom, model predviđa snimljenu sliku pomoću učitanog modela SqueezeNet i predviđa kretanje korisnika.

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

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("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 Rock-Paper-Makaze
Igra Rock-Paper-Makaze

Igra koristi funkciju generiranja slučajnih brojeva za odlučivanje o kretanju računara. Slijedi gore navedena pravila za određivanje pobjednika. Igra je dizajnirana s dva načina rada: normalni način rada 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 sa kamere

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

python3 play.py

Korak 9: Integracija servo motora?

Konačno, dodajte servo motor ovom projektu. 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 sledeći način.

Servo motor - Raspberry Pi

Vcc - +5V

GND - GND

Signal - GPIO17

Biblioteke kao što su RPi. GPIO i vrijeme koriste se u ovom projektu.

uvezite RPi. GPIO kao GPIO

vreme uvoza

GPIO pin je zatim konfiguriran na PWM koristeći sljedeće redove

servoPIN = 17

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

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

dužnost = ugao/18 + 2

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

Ovo ć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 sredinu karte. Pokazivač/poklopac je spojen na vratilo servo motora. Ovo vratilo ukazuje na potez računara 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 pri izgradnji ovog projekta, slobodno me pitajte. Molim vas predložite nove projekte koje želite da radim sljedeće.

Palac gore ako vam je zaista 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

Kod se dodaje 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