Sadržaj:
- Korak 1: Stvari koje se koriste u ovom projektu
- Korak 2: Ideja?
- Korak 3: Početak?
- Korak 4: Narezati 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 makaze za papir: 11 koraka
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
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?
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?
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?
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:
Zadana lozinka je malina
Ovdje sam koristio zaseban monitor za povezivanje sa Raspberry Pi.
Korak 5: Prikupljanje skupa 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 ⚒️⚙️
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 ✅
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 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?
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