Sadržaj:
- Korak 1: Stvari korištene u ovom projektu
- Korak 2: Ideja?
- Korak 3: Početak rada?
- Korak 4: Zapisati Raspbian na SD karticu?
- Korak 5: Prikupljanje skupa podataka? ️
- Korak 6: Dizajniranje mrežne mreže i obuka modela ⚒️⚙️
- Korak 7: Testiranje modela ✅
- Korak 8: Igra škare za kamen-papir
- Korak 9: Integracija servo motora?
- Korak 10: Rad na projektu?
- Korak 11: Kod - Repo projekta
Video: Škare AI za škare za kamen: 11 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
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?
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?
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?
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:
Zadana lozinka je malina
Ovdje sam koristio zaseban monitor za povezivanje s Raspberry Pi.
Korak 5: Prikupljanje skupa 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 ⚒️⚙️
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 ✅
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 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?
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:
Dizajn igre brzim pokretom u 5 koraka: 5 koraka
Dizajn igre u Flick -u u 5 koraka: Flick je zaista jednostavan način stvaranja igre, osobito nečega poput zagonetke, vizualnog romana ili avanturističke igre
Broj koraka: 17 koraka
الكشف عن عن أنواع المحاليل: محمدآل سعودالكشف عن المحاليل رابط الفديو
Prepoznavanje lica na Raspberry Pi 4B u 3 koraka: 3 koraka
Prepoznavanje lica na Raspberry Pi 4B u 3 koraka: U ovom Instructableu ćemo izvršiti detekciju lica na Raspberry Pi 4 sa Shunya O/S pomoću knjižnice Shunyaface. Shunyaface je biblioteka za prepoznavanje/otkrivanje lica. Cilj projekta je postići najbržu brzinu otkrivanja i prepoznavanja s
Ručne Arduino papirnate škare za škare za papir pomoću 20x4 LCD zaslona s I2C: 7 koraka
Ručne Arduino papirnate škare za škare za papir pomoću 20x4 LCD zaslona s I2C: Pozdrav svima ili bih možda trebao reći "Hello World!" Ovo je ručna Arduino škare za papirne stijene koje koriste I2C 20x4 LCD zaslon. Ja
Škare za kameni papir: 10 koraka
Škare za papirni kamen: svrha: Nakon što ste ovo dovršili, naučit ćete napraviti jednostavnu igru Rock, škare za papir od nule pomoću Code.org. Potrebni materijali / preduvjeti: Osnovno razumijevanje Javascript sintakse, računalo, Code.org račun