Taula de continguts:

Rock Paper Scissor AI: 11 passos
Rock Paper Scissor AI: 11 passos

Vídeo: Rock Paper Scissor AI: 11 passos

Vídeo: Rock Paper Scissor AI: 11 passos
Vídeo: Animators React 11: Mulan, Aladdin, Anime Rock Paper Scissors 2024, De novembre
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Us heu sentit avorrits sols? Juguem al rock, al paper i a les tisores contra un sistema interactiu alimentat amb intel·ligència.

Pas 1: coses utilitzades en aquest projecte

Components de maquinari

  • Raspberry Pi 3 Model B + × 1
  • Mòdul de càmera Raspberry Pi V2 × 1
  • Micro-servo motor SG90 × 1

Aplicacions de programari

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Pas 2: idea?

Image
Image

Després de treballar en diversos projectes en diferents dominis, vaig planejar fer un projecte divertit i vaig decidir fer un joc de paper-tisora :)

En aquest projecte, farem un joc interactiu i jugarem contra l’ordinador que funciona amb IA per prendre decisions. AI utilitza la càmera connectada al Raspberry Pi per reconèixer els moviments que ha fet l'usuari amb la mà, classificar-los en la millor categoria (etiqueta) de roca, paper o tisores. Un cop l’ordinador es mou, el motor pas a pas connectat al Raspberry Pi apunta cap a la direcció basada en el seu moviment.

Regles que cal tenir en compte per a aquest joc:

  • Rock esmalla la tisora
  • El paper cobreix la roca
  • Les tisores tallen paper

El guanyador es decidirà en funció de les tres condicions anteriors. Vegem una ràpida demostració del projecte aquí.

Pas 3: Introducció?

Començant ?
Començant ?
Començant ?
Començant ?

Raspberry Pi

He utilitzat un Raspberry Pi 3 Model B + que té grans millores i és més potent que l’anterior Raspberry Pi 3 Model B.

Raspberry Pi 3 B + s’integra amb el processador de quatre nuclis a 1,4 GHz de 64 bits, LAN sense fils de doble banda, Bluetooth 4.2 / BLE, Ethernet més ràpida i suport Power-over-Ethernet (amb PoE HAT separat).

Especificacions: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bits SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz i 5 GHz IEEE 802.11.b / g / n / ac LAN sense fils, Bluetooth 4.2, BLE, Gigabit Ethernet per USB 2.0 (rendiment màxim de 300 Mbps), capçalera GPIO de 40 pines ampliada, ports USB 2.0 HDMI4 de mida completa, port de càmera CSI per connectar una càmera Raspberry Pi, port de visualització DSI per connectar una pantalla tàctil Raspberry Pi sortida estèreo de 4 pols i composite port de vídeo, port Micro SD per carregar el vostre sistema operatiu i emmagatzemar dades Entrada de potència de 5 V / 2,5 A, compatibilitat amb Power-over-Ethernet (PoE) (requereix PoE HAT independent).

Servomotor

Utilitzem un servomotor SG-90, un motor d’alt parell que pot suportar la càrrega de fins a 2,5 kg (1 cm).

Càmera USB

Una càmera USB per fer que el joc sigui interactiu amb el processament d’imatges

Alguns cables Jumper s’utilitzen per connectar el motor pas a pas i el Raspberry Pi.

Pas 4: gravar Raspbian a la targeta SD?

Voleu gravar Raspbian a la targeta SD?
Voleu gravar Raspbian a la targeta SD?
Voleu gravar Raspbian a la targeta SD?
Voleu gravar Raspbian a la targeta SD?
Voleu gravar Raspbian a la targeta SD?
Voleu gravar Raspbian a la targeta SD?

Raspbian és la distribució preferida de Linux que s’executa al Raspberry Pi. En aquesta guia, farem servir la versió Lite, però també es pot utilitzar la versió d'escriptori (que inclou un entorn gràfic).

  • Descarregueu Etcher i instal·leu-lo.
  • Connecteu un lector de targetes SD amb la targeta SD que hi ha a dins.
  • Obriu Etcher i seleccioneu del disc dur el fitxer.img o.zip de Raspberry Pi que vulgueu escriure a la targeta SD.
  • Seleccioneu la targeta SD a la qual voleu escriure la imatge.
  • Reviseu les seleccions i feu clic a "Flash". per començar a escriure dades a la targeta SD.

Connecteu el dispositiu a la vostra xarxa

  • Activeu l'accés SSH afegint un fitxer ssh buit, situat de nou a l'arrel del volum d'arrencada de la vostra targeta SD.
  • Inseriu la targeta SD al Raspberry Pi. S’arrencarà en aproximadament 20 segons. Ara hauríeu de tenir accés SSH al vostre Raspberry Pi. Per defecte, el seu nom d'amfitrió serà raspberrypi.local. A l’ordinador, obriu una finestra de terminal i escriviu el següent:

ssh [email protected]

La contrasenya per defecte és raspberry

Aquí he utilitzat un monitor independent per relacionar-me amb el Raspberry Pi.

Pas 5: recopilació del conjunt de dades? ️

Recolliu el conjunt de dades? ️
Recolliu el conjunt de dades? ️
Recolliu el conjunt de dades? ️
Recolliu el conjunt de dades? ️

El primer pas d’aquest projecte és la recollida de dades. El sistema ha d’identificar el gest de la mà i reconèixer l’acció i fer que es mogui en conseqüència.

Instal·lem diverses biblioteques al Raspberry Pi mitjançant pip install

comandament.

sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip instal·lar tensorflow pip instal·lar Werkzeug pip instal·lar Keras-Aplicacions pip instal·lar Keras-preprocessament instal·lar pip keras-squeezenet instal·lar astor pip instal·lar tensorboard pip instal·lar tensorflow-estimer pip instal·lar mock pip instal·lar grpcio pip instal·lar absl-pypip instal·lar gast pip instal·lar joblib pip instal·lar Markdown pip install protobuf pip install PyYAML pip install sis

Si teniu problemes amb l'OpenCVpackage, us recomano instal·lar aquests paquets.

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

Hem instal·lat totes les dependències necessàries per a aquest projecte. El conjunt de dades es realitza mitjançant col·leccions i arranjaments de les imatges sota l’etiqueta adequada.

Aquí creem les imatges del conjunt de dades per a l’etiqueta rock, paper i tisora mitjançant el següent fragment.

roi = marc [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

La imatge es captura per a cada etiqueta (roca, paper, tisora i Cap).

Pas 6: Dissenyar una NN i formar el model ⚒️⚙️

Dissenyar una NN i formar el model ⚒️⚙️
Dissenyar una NN i formar el model ⚒️⚙️

El nucli d’aquest projecte és un classificador d’imatges que classifica una de les tres categories. Per fer aquest classificador, fem servir la CNN (Xarxa Convolucional) prèviament anomenada SqueezeNet.

Aquí fem servir Keras i TensorFlow per generar el model SqueezeNet que permet identificar el gest. Les imatges que vam generar al pas anterior s’utilitzen per entrenar el model. El model s’entren mitjançant el conjunt de dades generat per a cap època (cicle) esmentada.

El model es configura amb els hiperparàmetres com es mostra a continuació.

model = Seqüencial ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Abandonament (0,5), Convolution2D (NUM_CLASSES, (1, 1), farcit = "vàlid"), Activació ('relu'), GlobalAveragePooling2D (), Activació ('softmax')])

Mentre el model s’està entrenant, podeu trobar la pèrdua i precisió del model per a cada època i la precisió augmenta en algun moment després d’unes poques èpoques.

Va trigar aproximadament dues hores a generar el model amb la màxima precisió després de 10 èpoques. Si teniu algun error d’assignació de memòria, feu els passos següents (gràcies a Adrian)

Per augmentar l'espai d'intercanvi, obriu / etc / dphys-swapfile i, a continuació, editeu la variable CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Tingueu en compte que augmento l'intercanvi de 100 MB a 1024 MB. A partir d'aquí, reinicieu el servei d'intercanvi:

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

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

Nota:

Augmentar la mida de l’intercanvi és una manera excel·lent de cremar la targeta de memòria, així que assegureu-vos de revertir aquest canvi i reinicieu el servei d’intercanvi quan hàgiu acabat. Podeu obtenir més informació sobre les mides grans que corrompen les targetes de memòria aquí.

Pas 7: provar el model ✅

Prova del model ✅
Prova del model ✅
Prova del model ✅
Prova del model ✅
Prova del model ✅
Prova del model ✅

Un cop generat el model, produeix el fitxer de sortida "rock-paper-scissors-model.h5". Aquest fitxer s’utilitza com a font per comprovar si el sistema pot identificar diferents gestos de la mà i és capaç de diferenciar les accions.

El model es carrega a l'script python de la següent manera

model = load_model ("paper-tisora-model-model.h5")

La càmera llegeix la imatge de prova i transforma el model de color requerit i, a continuació, canvia la mida de la imatge a 227 x 227 píxels (la mateixa mida que s’utilitza per a la generació del model). Les imatges que es van utilitzar per entrenar el model es poden utilitzar per provar el model generat.

img = cv2.imread (pathpath)

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

Una vegada que el model es carrega i la imatge és adquirida per la càmera, el model prediu la imatge capturada mitjançant el model SqueezeNet carregat i farà la predicció dels moviments de l'usuari.

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

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predict: {}". format (move_name))

Executeu l'script test.py per provar el model amb diverses imatges de prova.

python3 test.py

Ara el model està preparat per detectar i comprendre els gestos de les mans.

Pas 8: Joc de paper-tisora de roca

Joc Rock-Paper-tisores
Joc Rock-Paper-tisores

El joc utilitza una funció de generació de números aleatoris per decidir el moviment de l'ordinador. Segueix les regles esmentades per determinar el guanyador. El joc està dissenyat amb dos modes: el mode normal i el mode intel·ligent, on el mode intel·ligent contraataca el moviment de l'usuari, és a dir, l'ordinador guanya tots els moviments contra l'usuari.

cap = cv2. VideoCapture (0) # Per capturar imatge de la càmera

Ara fem el joc en mode Normal, on el sistema / Raspberry Pi pren la foto de la mà i analitza i identifica el gest de la mà. Després, mitjançant un generador de números aleatoris, es juga el moviment de l’ordinador. El guanyador es tria segons les regles i després es mostra a la pantalla. Comenceu el joc amb l'ordre següent.

python3 play.py

Pas 9: integració del servomotor?

Per fi, afegiu el servomotor a aquest projecte. El servomotor és el pin GPIO 17 del Raspberry Pi, que té la funció PWM per controlar l’angle de rotació.

El Servo Motor utilitzat en aquest projecte és SG-90. Pot fer rotacions en sentit horari i antihorari fins a 180 °

Les connexions es donen de la següent manera.

Servomotor: Raspberry Pi

Vcc - + 5V

GND - GND

Senyal: GPIO17

Les biblioteques com RPi. GPIO i time s’utilitzen en aquest projecte.

importar RPi. GPIO com a GPIO

temps d'importació

El pin GPIO es configura a PWM mitjançant les línies següents

servoPIN = 17

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

El pin 17 GPIO està configurat per utilitzar-lo com a PWM a la freqüència de 50Hz. L’angle del servomotor s’aconsegueix configurant el cicle de treball (Ton & Toff) del PWM

deure = angle / 18 + 2

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

Això produirà l'angle de pas desitjat per a cada pols, que donaria l'angle de rotació desitjat.

Ara he pres el gràfic i el tallo en tres seccions, per a roca, paper i tisora. El servomotor està fixat al centre del gràfic. El punter / solapa està connectat a l’eix del servomotor. Aquest eix assenyala el moviment de l'ordinador segons la lògica calculada a l'script.

Pas 10: Treball del projecte?

Image
Image

I ara, és hora de jugar. Vegem el funcionament del projecte.

Si teniu problemes per construir aquest projecte, no dubteu a preguntar-me’l. Suggeriu nous projectes que vulgueu que faci a continuació.

Doneu un cop de polze si realment us ha ajudat i seguiu el meu canal per a projectes interessants.:)

Comparteix aquest vídeo si vols.

Feliç d’haver-vos subscrit:

Gràcies per llegir!

Pas 11: Codi: repòs del projecte

El codi s’afegeix al dipòsit de GitHub que es pot trobar a la secció de codis.

Rahul24-06 / Rock-Paper-Scissors -

Recomanat: