Sommario:
- Passaggio 1: cose utilizzate in questo progetto
- Passaggio 2: idea?
- Passaggio 3: iniziare?
- Passaggio 4: masterizzare Raspbian sulla scheda SD?
- Passaggio 5: raccolta del set di dati ?️
- Passaggio 6: progettazione di un NN e formazione del modello ⚒️⚙️
- Passaggio 7: test del modello ✅
- Passaggio 8: gioco sasso-carta-forbici
- Passaggio 9: integrazione del servomotore ?
- Fase 10: Lavorazione del progetto ?
- Passaggio 11: codice - Repo del progetto
Video: Rock Paper Scissor AI: 11 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Ti sei mai sentito annoiato da solo? Giochiamo a sasso, carta e forbici contro un sistema interattivo potenziato dall'intelligenza.
Passaggio 1: cose utilizzate in questo progetto
Componenti hardware
- Raspberry Pi 3 Modello B+ × 1
- Modulo fotocamera Raspberry Pi V2 × 1
- Micro-servomotore SG90 × 1
Applicazioni software
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Passaggio 2: idea?
Dopo aver lavorato su vari progetti su diversi domini, ho pensato di realizzare un progetto divertente e ho deciso di creare un gioco sasso-carta-forbici:)
In questo progetto, realizzeremo un gioco interattivo e giocheremo contro il computer alimentato dall'intelligenza artificiale per prendere decisioni. L'intelligenza artificiale utilizza la fotocamera collegata al Raspberry Pi per riconoscere i movimenti che l'utente ha fatto con la mano, classificarli nella migliore categoria (etichetta) sasso, carta o forbici. Una volta che il computer si muove, il motore passo-passo collegato al Raspberry Pi punta nella direzione in base al suo movimento.
Regole che devono essere considerate per questo gioco:
- Rock smussa le forbici
- La carta copre la roccia
- Le forbici tagliano la carta
Il vincitore sarà deciso in base alle tre condizioni di cui sopra. Vediamo una rapida demo del progetto qui.
Passaggio 3: iniziare?
Lampone Pi
Ho usato un Raspberry Pi 3 Model B+ che ha grandi miglioramenti ed è più potente del precedente Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ è integrato con il processore quad-core a 64 bit da 1,4 GHz, LAN wireless dual-band, Bluetooth 4.2/BLE, Ethernet più veloce e supporto Power-over-Ethernet (con HAT PoE separato).
Specifiche: Broadcom BCM2837B0, SoC Cortex-A53 (ARMv8) a 64 bit a 1,4 GHz, SDRAM LPDDR2 da 1 GB, 2,4 GHz e 5 GHz IEEE 802.11.b/g/n/ac LAN wireless, Bluetooth 4.2, BLE, Gigabit Ethernet su USB 2.0 (velocità massima di 300 Mbps), intestazione GPIO estesa a 40 pin, porte HDMI4 USB 2.0 full-size, porta per fotocamera CSI per il collegamento di una fotocamera Raspberry Pi, porta display DSI per il collegamento di un display touchscreen Raspberry PiUscita stereo a 4 poli e composito porta video, porta Micro SD per caricare il sistema operativo e memorizzare dati Ingresso alimentazione CC 5V/2,5A, supporto Power-over-Ethernet (PoE) (richiede HAT PoE separato).
Servomotore
Utilizziamo un servomotore SG-90, un motore a coppia elevata in grado di sopportare carichi fino a 2,5 kg (1 cm).
Fotocamera USB
Una fotocamera USB per rendere il gioco interattivo con l'elaborazione delle immagini
Alcuni cavi Jumper vengono utilizzati per cablare il motore passo-passo e Raspberry Pi.
Passaggio 4: masterizzare Raspbian sulla scheda SD?
Raspbian è la distribuzione Linux preferita in esecuzione su Raspberry Pi. In questa guida utilizzeremo la versione Lite, ma può essere utilizzata anche la versione Desktop (che viene fornita con un ambiente grafico).
- Scarica Etcher e installalo.
- Collega un lettore di schede SD con la scheda SD all'interno.
- Apri Etcher e seleziona dal tuo disco rigido il file Raspberry Pi.img o.zip che desideri scrivere sulla scheda SD.
- Seleziona la scheda SD su cui desideri scrivere la tua immagine.
- Rivedi le tue selezioni e fai clic su "Flash!" per iniziare a scrivere i dati sulla scheda SD.
Connetti il dispositivo alla tua rete
- Abilita l'accesso SSH aggiungendo un file vuoto ssh, ancora una volta posizionato nella radice del volume di avvio sulla tua scheda SD.
- Inserisci la scheda SD nel Raspberry Pi. Si avvierà in circa 20 secondi. Ora dovresti avere accesso SSH al tuo Raspberry Pi. Per impostazione predefinita, il suo nome host sarà raspberrypi.local. Sul tuo computer, apri una finestra di terminale e digita quanto segue:
La password predefinita è lampone
Qui ho usato un monitor separato per interfacciarmi con il Raspberry Pi.
Passaggio 5: raccolta del set di dati ?️
Il primo passo in questo progetto è la raccolta dei dati. Il sistema deve identificare il gesto della mano e riconoscere l'azione e farla muovere di conseguenza.
Installiamo diverse librerie sul Raspberry Pi usando pip install
comando.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip installa opencv pip installa numpy pip installa scikit-learn pip installa scikit-image pip installa h5py pip installa Keras pip installa tensorflow pip installa Werkzeug pip installa Keras-Applications pip installa Keras-Preprocessing pip installa keras-squeezenet pip installa astor pip installa tensorboard pip installa tensorflow-estimator pip installa mock pip installa grpcio pip installa absl-pypip installa gast pip installa joblib pip installa Markdown pip install protobuf pip install PyYAML pip install sei
In caso di problemi con il pacchetto OpenCV, consiglio vivamente di installare questi pacchetti.
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
Abbiamo installato tutte le dipendenze richieste per questo progetto. Il Data-set è costituito da raccolte e arrangiamenti delle immagini sotto l'apposita etichetta.
Qui creiamo le immagini del set di dati per l'etichetta rock, paper e scissor usando il seguente frammento.
roi = frame[100:500, 100:500]
save_path = os.path.join(img_class_path, '{}.jpg'.format(count + 1)) cv2.imwrite(save_path, roi)
L'immagine viene catturata per ogni etichetta (sasso, carta, forbice e Nessuno).
Passaggio 6: progettazione di un NN e formazione del modello ⚒️⚙️
Il nucleo di questo progetto è un classificatore di immagini che classifica una delle tre categorie. Per creare questo classificatore, utilizziamo la CNN (Convolutional Network) pre-addestrata chiamata SqueezeNet.
Qui usiamo Keras e TensorFlow per generare il modello SqueezeNet che può identificare il gesto. Le immagini che abbiamo generato nel passaggio precedente vengono utilizzate per addestrare il modello. Il modello viene addestrato utilizzando il set di dati generato per n. di Epoche (Cicli) menzionate.
Il modello è configurato con gli iperparametri come mostrato di seguito.
modello = Sequenziale([SqueezeNet(input_shape=(227, 227, 3), include_top=False), Abbandono(0,5), Convolution2D(NUM_CLASSES, (1, 1), padding='valid'), attivazione('relu'), GlobalAveragePooling2D(), Attivazione('softmax')])
Mentre il modello si sta addestrando, puoi trovare la perdita e l'accuratezza del modello per ogni epoca e l'accuratezza aumenta ad un certo punto nel tempo dopo qualche epoca.
Ci sono volute circa 2 ore per generare il modello con la massima precisione dopo 10 epoche. In caso di errori di allocazione della memoria, eseguire i seguenti passaggi (grazie ad Adrian)
Per aumentare lo spazio di swap, apri /etc/dphys-swapfile e quindi modifica la variabile CONF_SWAPSIZE:
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
Nota che sto aumentando lo swap da 100 MB a 1024 MB. Da lì, riavvia il servizio di swap:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Nota:
L'aumento delle dimensioni di scambio è un ottimo modo per bruciare la scheda di memoria, quindi assicurati di annullare questa modifica e riavviare il servizio di scambio quando hai finito. Puoi leggere di più sui grandi formati che danneggiano le schede di memoria qui.
Passaggio 7: test del modello ✅
Una volta generato il modello, produce il file di output "rock-paper-scissors-model.h5". Questo file viene utilizzato come fonte per verificare se il sistema è in grado di identificare diversi gesti delle mani e di differenziare le azioni.
Il modello viene caricato nello script python come segue
model = load_model("rock-paper-scissors-model.h5")
La fotocamera legge l'immagine di prova e trasforma il modello di colore richiesto, quindi ridimensiona l'immagine a 227 x 227 pixel (stesse dimensioni utilizzate per la generazione del modello). Le immagini utilizzate per l'addestramento del modello possono essere utilizzate per testare il modello generato.
img = cv2.imread (percorso file)
img = cv2.cvtColor(img, cv2. COLOR_BGR2RGB) img = cv2.resize(img, (227, 227))
Una volta caricato il modello e acquisita l'immagine dalla telecamera, il modello prevede l'immagine acquisita utilizzando il modello SqueezeNet caricato ed effettua la previsione per i movimenti dell'utente.
pred = modello.predict(np.array())
move_code = np.argmax(pred[0]) move_name = mapper(move_code) print("Previsto: {}".format(move_name))
Esegui lo script test.py per testare il modello con varie immagini di test.
python3 test.py
Ora il modello è pronto per rilevare e comprendere i gesti delle mani.
Passaggio 8: gioco sasso-carta-forbici
Il gioco utilizza una funzione di generazione di numeri casuali per decidere la mossa del computer. Segue le regole di cui sopra per determinare il vincitore. Il gioco è progettato con due modalità: modalità normale e modalità intelligente, in cui la modalità intelligente contrattacca il movimento dell'utente, ovvero il computer vince tutte le mosse contro l'utente.
cap = cv2. VideoCapture(0) # Per catturare l'immagine dalla fotocamera
Ora facciamo il gioco in modalità Normale dove il sistema/ Raspberry Pi scatta l'immagine della mano e analizza e identifica il gesto della mano. Quindi, utilizzando un generatore di numeri casuali, viene riprodotta la mossa del computer. Il vincitore viene scelto in base alle regole e quindi visualizzato sullo schermo. Avvia il gioco usando il seguente comando.
python3 play.py
Passaggio 9: integrazione del servomotore ?
Infine, aggiungi il servomotore a questo progetto. Il servomotore è il pin 17 GPIO del Raspberry Pi, che ha la funzione PWM per controllare l'angolo di rotazione.
Il servomotore utilizzato in questo progetto è SG-90. Può effettuare rotazioni in senso orario e antiorario fino a 180°
I collegamenti sono forniti come segue.
Servomotore - Raspberry Pi
Vcc - +5V
GND - GND
Segnale - GPIO17
Le librerie come RPi. GPIO e time vengono utilizzate in questo progetto.
importa RPi. GPIO come GPIO
tempo di importazione
Il pin GPIO viene quindi configurato su PWM utilizzando le seguenti righe
servoPIN = 17
GPIO.setmode(GPIO. BCM) GPIO.setup(servoPIN, GPIO. OUT)
Il pin 17 GPIO è configurato per essere utilizzato come PWM alla frequenza di 50Hz. L'angolo del servomotore si ottiene impostando il ciclo di lavoro (Ton & Toff) del PWM
dovere = angolo/18 + 2
GPIO.output(servoPIN, True) p. ChangeDutyCycle(duty) time.sleep(1) GPIO.output(servoPIN, False) p. ChangeDutyCycle(0)
Questo produrrà l'angolo di passo desiderato per ogni impulso, che darebbe l'angolo di rotazione desiderato.
Ora ho preso il grafico e l'ho diviso in tre sezioni, per sasso, carta e forbice. Il servomotore è fissato al centro del grafico. L'indicatore/flap è collegato all'albero del servomotore. Questo albero indica la mossa del computer secondo la logica calcolata nello script.
Fase 10: Lavorazione del progetto ?
E ora, è tempo di giocare. Vediamo il funzionamento del progetto.
Se hai riscontrato problemi nella creazione di questo progetto, non esitare a chiedermelo. Per favore, suggerisci nuovi progetti che vuoi che io faccia dopo.
Metti un pollice in su se ti è stato davvero d'aiuto e segui il mio canale per progetti interessanti.:)
Condividi questo video se ti va.
Felice di esserti iscritto:
Grazie per aver letto!
Passaggio 11: codice - Repo del progetto
Il codice viene aggiunto al repository GitHub che può essere trovato nella sezione del codice.
Rahul24-06 / Forbici-sasso-carta -
Consigliato:
Crea il tuo adattatore Ekit Rock Band (senza adattatore legacy), in modo non distruttivo!: 10 passaggi
Crea il tuo adattatore Ekit Rock Band (senza adattatore legacy), in modo non distruttivo!: Dopo aver sentito un famoso host di podcast menzionare la sua preoccupazione per la morte del suo adattatore legacy USB cablato, sono andato alla ricerca di una soluzione fai-da-te per collegare un eKit migliore / personalizzato a RB . Grazie a Mr DONINATOR su Youtube che ha realizzato un video che descrive in dettaglio il suo simile p
Trasforma la batteria X-box Rock Band in una batteria elettronica Midi Stand Alone.: 4 passaggi (con immagini)
Trasforma la batteria X-box Rock Band in una batteria elettronica Midi Stand Alone.: Sono stato fortunato ad avere una batteria x-box usata, è in una forma un po 'ruvida e senza paddle, ma niente che non possa essere riparato.I trasformalo in una batteria elettrica autonoma. Leggere il valore analogico dal sensore piezo e trasformarlo in un comando MIDI
Robotics Remote Control Rock Crawler Arduino: 4 passaggi
Robotics Remote Control Rock Crawler Arduino: questo sembra ed è molto scarno. Consiglierei a chiunque voglia realizzare questo progetto di prendere in considerazione un modo per coprire l'elettronica per proteggerla dall'acqua e dallo sporco
Rock Buggy Body per RedCat Gen7: 9 passaggi (con immagini)
Rock Buggy Body per RedCat Gen7: Gli accessori di stampa Inspiration3D e persino interi corpi sono molto popolari tra la comunità RC, specialmente nel genere di RC Crawlers. Io e altri abbiamo rilasciato tutti i tipi di progetti gratuiti, ma ciò che è inaudito è che i produttori rilascino
WISH ROCK: 5 passaggi (con immagini)
WISH ROCK: si adatta alla mano con comfort, calore e piacevole da tenere.. Rilascio di energia psichica.. Con la guida ai suggerimenti assertivi del colore del cristallo per più utenti;.~VERDE == Energia curativa..~~BLU == Meditativa dell'anima calma