Sommario:

Rock Paper Scissor AI: 11 passaggi
Rock Paper Scissor AI: 11 passaggi

Video: Rock Paper Scissor AI: 11 passaggi

Video: Rock Paper Scissor AI: 11 passaggi
Video: ANIME ROCK, PAPER, SCISSORS 2024, Dicembre
Anonim
Forbice di carta sasso AI
Forbice di carta sasso AI

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?

Image
Image

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?

Iniziare ?
Iniziare ?
Iniziare ?
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?

Masterizzare Raspbian sulla scheda SD?
Masterizzare Raspbian sulla scheda SD?
Masterizzare Raspbian sulla scheda SD?
Masterizzare Raspbian sulla scheda SD?
Masterizzare Raspbian sulla scheda SD?
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:

ssh [email protected]

La password predefinita è lampone

Qui ho usato un monitor separato per interfacciarmi con il Raspberry Pi.

Passaggio 5: raccolta del set di dati ?️

Raccolta del set di dati ?️
Raccolta del set di dati ?️
Raccolta del set di dati ?️
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 ⚒️⚙️

Progettare una NN e addestrare il modello ⚒️⚙️
Progettare una NN e addestrare il 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 ✅

Testare il modello ✅
Testare il modello ✅
Testare il modello ✅
Testare il modello ✅
Testare il modello ✅
Testare il 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

Gioco Sasso-Carta-Forbici
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 ?

Image
Image

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: