Inhoudsopgave:

Steen Papier Scissor AI - Ajarnpa
Steen Papier Scissor AI - Ajarnpa

Video: Steen Papier Scissor AI - Ajarnpa

Video: Steen Papier Scissor AI - Ajarnpa
Video: Man V.S. AI (this is clickbait) | Smart Rock-Paper-Scissors Robot | Demo Video 2024, November
Anonim
Steen Papierschaar AI
Steen Papierschaar AI

Heb je je ooit alleen gevoeld? Laten we steen, papier en schaar spelen tegen een interactief systeem dat wordt aangedreven door intelligentie.

Stap 1: Dingen die in dit project worden gebruikt

Hardware onderdelen

  • Raspberry Pi 3 Model B+ × 1
  • Raspberry Pi-cameramodule V2 × 1
  • SG90 Micro-servomotor × 1

Software-apps

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Stap 2: Idee?

Image
Image

Na aan verschillende projecten op verschillende domeinen te hebben gewerkt, was ik van plan een leuk project te maken, en ik besloot een steen-papier-schaar-spel te maken:)

In dit project zullen we een interactief spel maken en spelen tegen de computer die wordt aangedreven door AI om beslissingen te nemen. AI gebruikt de camera die is aangesloten op de Raspberry Pi om te herkennen welke bewegingen de gebruiker met de hand heeft gemaakt, en classificeert ze in de beste categorie (label) steen, papier of schaar. Zodra de computer zijn beweging maakt, wijst de stappenmotor die op de Raspberry Pi is aangesloten in de richting op basis van zijn beweging.

Regels waarmee rekening moet worden gehouden voor dit spel:

  • Steen maakt de schaar bot
  • Papier bedekt de rots
  • Schaar gesneden papier

De winnaar wordt bepaald op basis van de bovenstaande drie voorwaarden. Laten we hier een korte demo van het project bekijken.

Stap 3: Aan de slag?

Beginnen ?
Beginnen ?
Beginnen ?
Beginnen ?

Raspberry Pi

Ik heb een Raspberry Pi 3 Model B+ gebruikt die geweldige verbeteringen heeft en krachtiger is dan de eerdere Raspberry Pi 3 Model B.

Raspberry Pi 3 B+ is geïntegreerd met de 1,4GHz 64-bit quad-coreprocessor, dual-band draadloos LAN, Bluetooth 4.2/BLE, sneller Ethernet en Power-over-Ethernet-ondersteuning (met aparte PoE HAT).

Specificaties: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz en 5 GHz IEEE 802.11.b/g/n/ac draadloos LAN, Bluetooth 4.2, BLE, Gigabit Ethernet via USB 2.0 (maximale doorvoer van 300 Mbps), De uitgebreide 40-pins GPIO-header, Full-size HDMI4 USB 2.0-poorten, CSI-camerapoort voor het aansluiten van een Raspberry Pi-camera, DSI-displaypoort voor het aansluiten van een Raspberry Pi-aanraakscherm 4-polige stereo-uitgang en composiet videopoort, Micro SD-poort voor het laden van uw besturingssysteem en het opslaan van data5V/2,5A DC-voedingsingang, Power-over-Ethernet (PoE)-ondersteuning (vereist aparte PoE HAT).

Servomotor

We gebruiken een SG-90 servomotor, een motor met hoog koppel die een belasting tot 2,5 kg (1 cm) aankan.

USB-camera

Een USB-camera om het spel interactief te maken met de beeldverwerking

Sommige startkabels worden gebruikt om de stappenmotor en Raspberry Pi te bedraden.

Stap 4: Brand Raspbian op de SD-kaart?

Raspbian op de SD-kaart branden?
Raspbian op de SD-kaart branden?
Raspbian op de SD-kaart branden?
Raspbian op de SD-kaart branden?
Raspbian op de SD-kaart branden?
Raspbian op de SD-kaart branden?

Raspbian is de Linux-distributie naar keuze die draait op de Raspberry Pi. In deze handleiding gebruiken we de Lite-versie, maar de Desktop-versie (die wordt geleverd met een grafische omgeving) kan ook worden gebruikt.

  • Download Etcher en installeer het.
  • Sluit een SD-kaartlezer aan met de SD-kaart erin.
  • Open Etcher en selecteer op uw harde schijf het Raspberry Pi.img- of.zip-bestand dat u naar de SD-kaart wilt schrijven.
  • Selecteer de SD-kaart waarnaar u uw afbeelding wilt schrijven.
  • Controleer uw selecties en klik op 'Flash!' om te beginnen met het schrijven van gegevens naar de SD-kaart.

Verbind het apparaat met je netwerk

  • Schakel SSH-toegang in door lege bestands-ssh toe te voegen, opnieuw geplaatst in de root van het opstartvolume op uw SD-kaart.
  • Plaats de SD-kaart in de Raspberry Pi. Het zal in ongeveer 20 seconden opstarten. Je zou nu SSH-toegang moeten hebben tot je Raspberry Pi. Standaard is de hostnaam raspberrypi.local. Open op uw computer een terminalvenster en typ het volgende:

ssh [email protected]

Het standaardwachtwoord is framboos

Hier heb ik een aparte monitor gebruikt om te communiceren met de Raspberry Pi.

Stap 5: Verzamelen van de dataset ?️

De dataset verzamelen ?️
De dataset verzamelen ?️
De dataset verzamelen ?️
De dataset verzamelen ?️

De eerste stap in dit project is het verzamelen van gegevens. Het systeem moet het handgebaar identificeren en de actie herkennen en dienovereenkomstig laten bewegen.

We installeren verschillende bibliotheken op de Raspberry Pi met behulp van pip install

opdracht.

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 p 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-schatter 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 zes

Als u problemen ondervindt met het OpenCV-pakket, raad ik u ten zeerste aan deze pakketten te installeren.

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

We hebben alle vereiste afhankelijkheden voor dit project geïnstalleerd. De dataset wordt gemaakt door verzamelingen en rangschikkingen van de afbeeldingen onder het juiste label.

Hier maken we de datasetafbeeldingen voor het label steen, papier en schaar met behulp van het volgende fragment.

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

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

Het beeld wordt vastgelegd voor elk label (steen, papier, schaar en Geen).

Stap 6: Een NN ontwerpen & het model trainen ⚒️⚙️

Een NN ontwerpen & het model trainen ⚒️⚙️
Een NN ontwerpen & het model trainen ⚒️⚙️

De kern van dit project is een beeldclassificatie die een van de drie categorieën classificeert. Om deze classificatie te maken, gebruiken we het vooraf getrainde CNN (Convolutional Network) genaamd SqueezeNet.

Hier gebruiken we Keras en TensorFlow om het SqueezeNet-model te genereren dat het gebaar kan identificeren. De afbeeldingen die we in de vorige stap hebben gegenereerd, worden gebruikt om het model te trainen. Het model is getraind met behulp van de dataset die is gegenereerd voor geen van de genoemde tijdperken (cycli).

Het model is geconfigureerd met de hyperparameters zoals hieronder weergegeven.

model = sequentieel([SqueezeNet(input_shape=(227, 227, 3), include_top=False), Uitval (0,5), Convolution2D(NUM_CLASSES, (1, 1), padding='valid'), Activering('relu'), GlobalAveragePooling2D(), Activering('softmax')])

Terwijl het model aan het trainen is, kun je het verlies en de nauwkeurigheid van het model voor elk tijdperk vinden en de nauwkeurigheid neemt op een bepaald moment na een paar tijdperken toe.

Het duurde ongeveer 2 uur om het model met de hoogste nauwkeurigheid na 10 tijdperken te genereren. Als u geheugentoewijzingsfouten ondervindt, voert u de volgende stappen uit (met dank aan Adrian)

Om uw swap-ruimte te vergroten, opent u /etc/dphys-swapfile en bewerkt u vervolgens de variabele CONF_SWAPSIZE:

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

Merk op dat ik de swap verhoog van 100 MB naar 1024 MB. Start vanaf daar de swap-service opnieuw:

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

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

Opmerking:

Het vergroten van de swap-grootte is een geweldige manier om uw geheugenkaart te verbranden, dus zorg ervoor dat u deze wijziging ongedaan maakt en de swap-service opnieuw start als u klaar bent. U kunt hier meer lezen over het beschadigen van geheugenkaarten in grote formaten.

Stap 7: het model testen ✅

Het model testen
Het model testen
Het model testen
Het model testen
Het model testen
Het model testen

Zodra het model is gegenereerd, produceert het het uitvoerbestand "rock-paper-scissors-model.h5". Dit bestand wordt gebruikt als bron om te testen of het systeem verschillende handgebaren kan herkennen en de acties kan onderscheiden.

Het model wordt als volgt in het python-script geladen:

model = load_model("steen-papier-schaar-model.h5")

De camera leest de testafbeelding en transformeert het vereiste kleurmodel, en wijzigt vervolgens het formaat van de afbeelding naar 227 x 227 pixels (dezelfde grootte die wordt gebruikt voor het genereren van modellen). De afbeeldingen die zijn gebruikt voor het trainen van het model kunnen worden gebruikt om het gegenereerde model te testen.

img = cv2.imread(bestandspad)

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

Zodra het model is geladen en het beeld is verkregen door de camera, voorspelt het model het vastgelegde beeld met behulp van het geladen SqueezeNet-model en maakt het de voorspelling voor de bewegingen van de gebruiker.

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

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

Voer het test.py-script uit om het model te testen met verschillende testafbeeldingen.

python3 test.py

Nu is het model klaar om de handgebaren te detecteren en te begrijpen.

Stap 8: Steen-papier-schaar-spel

Steen-papier-schaar-spel
Steen-papier-schaar-spel

Het spel gebruikt een functie voor het genereren van willekeurige getallen om de zet van de computer te bepalen. Het volgt de bovengenoemde regels om de winnaar te bepalen. Het spel is ontworpen met twee modi: de normale modus en de intelligente modus, waarbij de intelligente modus de beweging van de gebruiker tegenwerkt, d.w.z. dat de computer alle zetten van de gebruiker wint.

cap = cv2. VideoCapture(0) # Om een afbeelding van de camera vast te leggen

Laten we het spel nu in de normale modus maken, waarbij het systeem/ Raspberry Pi de foto van de hand maakt en het handgebaar analyseert en identificeert. Vervolgens wordt met behulp van een generator voor willekeurige getallen de zet van de computer gespeeld. De winnaar wordt gekozen op basis van de regels en vervolgens weergegeven op het scherm. Start het spel met de volgende opdracht.

python3 play.py

Stap 9: Servomotorintegratie?

Voeg ten slotte de servomotor toe aan dit project. Servomotor is GPIO-pin 17 van de Raspberry Pi, die de PWM-functie heeft om de rotatiehoek te regelen.

De servomotor die in dit project wordt gebruikt, is de SG-90. Het kan met de klok mee en tegen de klok in draaien tot 180 °

De aansluitingen worden als volgt gegeven.

Servomotor - Raspberry Pi

Vcc - +5V

GND - GND

Signaal - GPIO17

De bibliotheken zoals RPi. GPIO en tijd worden in dit project gebruikt.

importeer RPi. GPIO als GPIO

import tijd

De GPIO-pin wordt vervolgens geconfigureerd voor PWM met behulp van de volgende regels:

servoPIN = 17

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

GPIO Pin 17 is geconfigureerd om te gebruiken als een PWM met een frequentie van 50 Hz. De hoek van de servomotor wordt bereikt door de duty cycle (Ton & Toff) van de PWM in te stellen

duty = hoek/18 + 2

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

Dit zal voor elke puls de gewenste staphoek produceren, wat de gewenste rotatiehoek zou geven.

Nu heb ik de kaart genomen en in drie delen gesneden, voor steen, papier en schaar. De servomotor is bevestigd aan het midden van de kaart. De wijzer/klep is verbonden met de as van de servomotor. Deze schacht wijst naar de zet van de computer volgens de logica die in het script is berekend.

Stap 10: Werking van het project ?

Image
Image

En nu is het speeltijd. Laten we eens kijken hoe het project werkt.

Als je problemen ondervindt bij het bouwen van dit project, vraag het me dan gerust. Stel alstublieft nieuwe projecten voor die u mij wilt laten doen.

Geef een duim omhoog als het je echt heeft geholpen en volg mijn kanaal voor interessante projecten.:)

Deel deze video als je wilt.

Leuk dat je geabonneerd bent:

Bedankt voor het lezen!

Stap 11: Code - Projectrepo

De code wordt toegevoegd aan de GitHub-repository die te vinden is in de codesectie.

Rahul24-06 / Steen-Paper-Scissors -

Aanbevolen: