Taula de continguts:
- Pas 1: coses utilitzades en aquest projecte
- Pas 2: idea?
- Pas 3: Introducció?
- Pas 4: gravar Raspbian a la targeta SD?
- Pas 5: recopilació del conjunt de dades? ️
- Pas 6: Dissenyar una NN i formar el model ⚒️⚙️
- Pas 7: provar el model ✅
- Pas 8: Joc de paper-tisora de roca
- Pas 9: integració del servomotor?
- Pas 10: Treball del projecte?
- Pas 11: Codi: repòs del projecte
Vídeo: Rock Paper Scissor AI: 11 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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?
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ó?
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?
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:
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? ️
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 ⚒️⚙️
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 ✅
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
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?
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:
Feu el vostre propi adaptador Ekit de banda de rock (sense adaptador heretat), sense destrucció: 10 passos
Make Your Own Rock Band Ekit Adapter (sense Legacy Adapter), Nondestructively !: Després d'escoltar un amfitrió de podcast popular que esmentava la seva preocupació per la seva mort de l'adaptador heretat USB per cable, vaig buscar una solució de bricolatge per connectar un eKit millorat / personalitzat a RB . Gràcies al senyor DONINATOR a Youtube que va fer un vídeo detallant la seva p
The Paper Preserver: estalvieu paper higiènic amb teràpia de xoc: 4 passos
The Paper Preserver: Save Paper toilet with Shock Therapy: Tots hem vist les prestatgeries buides de la botiga de queviures i sembla que hi haurà escassetat de paper higiènic durant un temps. Si no us heu aprovisionat aviat, probablement estigueu en la situació en què tinc. Tinc una casa de 6 persones i només queden uns quants rotlles
Converteix la bateria de banda de rock X-box en una bateria electrònica independent Midi: 4 passos (amb imatges)
Converteix la bateria X-box Rock Band en una bateria electrònica Midi Stand Alone .: Vaig tenir la sort d’aconseguir una bateria x-box usada, té una forma bastant aspra i no té pàdel, però res que no es pugui solucionar. converteix-lo en una bateria elèctrica independent. Llegint el valor analògic del sensor piezoelèctric i convertiu-lo en MIDI comman
Robòtica de control remot Rock Crawler Arduino: 4 passos
Robòtica de control remot Rock Crawler Arduino: té un aspecte i és molt òssia. Recomanaria a qui vulgui fer aquest projecte que consideri alguna manera de cobrir l'electrònica per protegir-lo contra l'aigua i la brutícia
Rock Buggy Body per a RedCat Gen7: 9 passos (amb imatges)
Rock Buggy Body per a RedCat Gen7: accessoris d’impressió Inspiration3D i fins i tot cossos sencers és molt popular entre la comunitat RC, especialment en el gènere de RC Crawlers. Jo i altres hem llançat tota mena de projectes gratuïts, però el que no se sent és que els fabricants els puguin llançar