Inhoudsopgave:
- Stap 1: Dingen die in dit project worden gebruikt
- Stap 2: Idee?
- Stap 3: Aan de slag?
- Stap 4: Brand Raspbian op de SD-kaart?
- Stap 5: Verzamelen van de dataset ?️
- Stap 6: Een NN ontwerpen & het model trainen ⚒️⚙️
- Stap 7: het model testen ✅
- Stap 8: Steen-papier-schaar-spel
- Stap 9: Servomotorintegratie?
- Stap 10: Werking van het project ?
- Stap 11: Code - Projectrepo
Video: Steen Papier Scissor AI - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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?
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?
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 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:
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 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 ⚒️⚙️
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 ✅
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
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 ?
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:
Interactief papier met Makey Makey: 13 stappen
Interactief papier met Makey Makey: dit concept is verrassend eenvoudig te bouwen en kan worden gebruikt voor praktische en amusementsdoeleinden. Het kost bijna niets, afgezien van de Makey Makey en de meeste benodigdheden zijn al op de meeste plaatsen te vinden. Ook vergen deze projecten niet veel prec
Hoe - E-INK E-PAPIER DISPLAYMODULE – Deel 3 - WiFi: 7 stappen (met afbeeldingen)
Hoe - E-INK E-PAPIER DISPLAYMODULE – Deel 3 | WiFi: in deze tutorial voor deel 3 van How to - E-INK E-PAPER DISPLAY MODULE, ga ik met u delen hoe u uw E-Ink Display Module verbindt met een WiFi-module waarmee u de teksten via WiFi kunt bijwerken. Don Heb je geen E-Ink Display Module? Je kunt een h
USB-aangedreven brander! Dit project kan door plastic / hout / papier branden (leuk project moet ook heel fijn hout zijn): 3 stappen
USB-aangedreven brander! Dit project kan door plastic / hout / papier branden (leuk project moet ook heel fijn hout zijn): MAAK DIT NIET MET USB!!!! ik kwam erachter dat het je computer kan beschadigen door alle opmerkingen. mijn computer is in orde. Gebruik een 600mA 5v telefoonoplader. ik heb dit gebruikt en het werkt prima en niets kan worden beschadigd als je een veiligheidsstekker gebruikt om de stroom te stoppen
Papier-maché: 7 stappen
Papier-maché: Papier-maché! Of je nu een Halloween-masker of een Instructables-robot maakt, papier-maché is de juiste keuze. De mogelijkheden zijn eindeloos en je wordt alleen beperkt door je fantasie. Papier-maché is een eenvoudig proces dat geen goede of verkeerde manier heeft
Computer + Papier = Magie: 8 Stappen
Computer + Papier = Magie: Waarom zou het oude vergeten worden als het nieuwe arriveert? Waarom konden we ze niet op de een of andere manier samenvoegen om een nieuw soort objecten te creëren die aan één behoefte voldoen: de behoefte aan magie. Met deze instructable maak je een papieren computer + toetsenbord. Drie van