Innehållsförteckning:
- Steg 1: Saker som används i detta projekt
- Steg 2: Idé?
- Steg 3: Komma igång?
- Steg 4: Bränna Raspbian till SD -kortet?
- Steg 5: Samla in datauppsättningen? ️
- Steg 6: Designa ett NN och utbilda modellen ⚒️⚙️
- Steg 7: Testa modellen ✅
- Steg 8: Rock-Paper-Scissors Game
- Steg 9: Integrering av servomotorer?
- Steg 10: Arbetet med projektet?
- Steg 11: Kod - Project Repo
Video: Rock Paper Scissor AI: 11 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
Har du någonsin känt dig uttråkad ensam? Låt oss spela rock, papper och sax mot ett interaktivt system med intelligens.
Steg 1: Saker som används i detta projekt
Hårdvarukomponenter
- Raspberry Pi 3 Modell B+ × 1
- Raspberry Pi -kameramodul V2 × 1
- SG90 Micro-servomotor × 1
Programvaruappar
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Steg 2: Idé?
Efter att ha arbetat med olika projekt på olika domäner planerade jag att göra ett roligt projekt, och jag bestämde mig för att göra ett papper-saxspel:)
I detta projekt kommer vi att göra ett interaktivt spel och spela mot datorn som drivs av AI för att fatta beslut. AI använder kameran som är ansluten till Raspberry Pi för att känna igen vad rörelser användaren gjort med handen, klassificera dem i den bästa kategorin (etikett) sten, papper eller sax. När datorn väl har rört sig pekar stegmotorn som är ansluten till Raspberry Pi mot riktningen baserat på dess rörelse.
Regler som måste beaktas för detta spel:
- Rock trubbar saxen
- Papper täcker berget
- Sax klippte papper
Vinnaren avgörs utifrån ovanstående tre villkor. Låt oss se en snabb demo av projektet här.
Steg 3: Komma igång?
Raspberry Pi
Jag har använt en Raspberry Pi 3 Model B+ som har stora förbättringar och är mer kraftfull än den tidigare Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ är integrerad med 1,4 GHz 64-bitars fyrkärnig processor, dual-band trådlöst LAN, Bluetooth 4.2/BLE, snabbare Ethernet och Power-over-Ethernet-stöd (med separat PoE HAT).
Specifikationer: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitars SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz och 5 GHz IEEE 802.11.b/g/n/ac trådlöst LAN, Bluetooth 4.2, BLE, Gigabit Ethernet över USB 2.0 (maximal genomströmning på 300 Mbps), Den utökade 40-stifts GPIO-rubriken, HDMI4 USB 2.0-portar i full storlek, CSI-kameraport för anslutning av en Raspberry Pi-kamera, DSI-displayport för anslutning av en Raspberry Pi-pekskärmsdisplay 4-polig stereoutgång och komposit videoport, Micro SD-port för att ladda ditt operativsystem och lagra data 5V/2,5A DC-ingång, Power-over-Ethernet (PoE) stöd (kräver separat PoE HAT).
Servomotor
Vi använder en SG-90 servomotor, en motor med högt vridmoment som klarar belastningen upp till 2,5 kg (1 cm).
USB -kamera
En USB -kamera för att göra spelet interaktivt med bildbehandlingen
Vissa bygelkablar används för att koppla in stegmotorn och Raspberry Pi.
Steg 4: Bränna Raspbian till SD -kortet?
Raspbian är den valda Linux -distributionen som körs på Raspberry Pi. I den här guiden kommer vi att använda Lite -versionen, men skrivbordsversionen (som levereras med en grafisk miljö) kan också användas.
- Ladda ner Etcher och installera det.
- Anslut en SD -kortläsare med SD -kortet inuti.
- Öppna Etcher och välj från din hårddisk den Raspberry Pi.img- eller.zip -fil du vill skriva till SD -kortet.
- Välj det SD -kort du vill skriva din bild till.
- Granska dina val och klicka på "Flash!" för att börja skriva data till SD -kortet.
Anslut enheten till ditt nätverk
- Aktivera SSH -åtkomst genom att lägga till tom fil ssh, igen placerad vid roten av startvolymen på ditt SD -kort.
- Sätt in SD -kortet i Raspberry Pi. Den startar om ungefär 20 sekunder. Du bör nu ha SSH -åtkomst till din Raspberry Pi. Som standard är dess värdnamn raspberrypi.local. Öppna ett terminalfönster på din dator och skriv följande:
Standardlösenordet är hallon
Här har jag använt en separat bildskärm för att ansluta till Raspberry Pi.
Steg 5: Samla in datauppsättningen? ️
Det första steget i detta projekt är datainsamling. Systemet måste identifiera handgesten och känna igen handlingen och få den att röra sig i enlighet därmed.
Vi installerar flera bibliotek till Raspberry Pi med pipinstallation
kommando.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip installera opencv pip installera numpy pip installera scikit-lära pip installera scikit-image pip installera h5py pip installera Keras pip installera tensorflow pip installera Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estimator 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 sex
Om du stöter på några problem med OpenCVpackage rekommenderar jag starkt att du installerar dessa paket.
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
Vi har installerat alla nödvändiga beroenden för detta projekt. Datauppsättningen görs genom samlingar och arrangemang av bilderna under lämplig etikett.
Här skapar vi datauppsättningsbilderna för etiketten sten, papper och sax med hjälp av följande utdrag.
roi = ram [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Bilden tas för varje etikett (sten, papper, sax och ingen).
Steg 6: Designa ett NN och utbilda modellen ⚒️⚙️
Kärnan i detta projekt är en bildklassificerare som klassificerar en av tre kategorier. För att göra denna klassificerare använder vi det förutbildade CNN (Convolutional Network) som heter SqueezeNet.
Här använder vi Keras och TensorFlow för att generera SqueezeNet -modellen som kan identifiera gesten. Bilderna som vi genererade i föregående steg används för att träna modellen. Modellen tränas med hjälp av datauppsättningen som genererats för inga nämnda epoker (cykler).
Modellen är konfigurerad med hyperparametrarna enligt nedan.
modell = Sekventiell ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Avhopp (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivering ('relu'), GlobalAveragePooling2D (), Aktivering ('softmax')])
Medan modellen tränar kan du hitta modellens förlust och noggrannhet för varje epok och noggrannheten ökar vid någon tidpunkt efter några epoker.
Det tog ungefär 2 timmar att generera modellen med högsta noggrannhet efter 10 epok. Om du möter minnesallokeringsfel gör du följande steg (tack till Adrian)
För att öka ditt bytesutrymme, öppna /etc /dphys-swapfile och redigera sedan variabeln CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Lägg märke till att jag ökar bytet från 100MB till 1024MB. Därifrån startar du om swaptjänsten:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Notera:
Att öka bytesstorleken är ett bra sätt att bränna ut ditt minneskort, så var noga med att återställa den här ändringen och starta om växlingstjänsten när du är klar. Du kan läsa mer om stora storlekar som skadar minneskort här.
Steg 7: Testa modellen ✅
När modellen väl genereras producerar den utdatafilen "rock-paper-scissors-model.h5". Den här filen används som källa för att testa om systemet kan identifiera olika handgester och kunna differentiera åtgärderna.
Modellen laddas i python -skriptet enligt följande
model = load_model ("rock-paper-sax-model.h5")
Kameran läser testbilden och omvandlar den önskade färgmodellen och ändrar sedan storleken på bilden till 227 x 227 pixlar (samma storlek som används för modellgenerering). Bilderna som användes för att träna modellen kan användas för att testa den genererade modellen.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
När modellen har laddats och bilden förvärvats av kameran, förutsäger modellen den tagna bilden med SqueezeNet -modellen laddad och gör förutsägelser för användarens rörelser.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predicted: {}". format (move_name))
Kör test.py -skriptet för att testa modellen med olika testbilder.
python3 test.py
Nu är modellen redo att upptäcka och förstå handgesterna.
Steg 8: Rock-Paper-Scissors Game
Spelet använder en slumpmässig talgenereringsfunktion för att bestämma datorns förflyttning. Den följer ovanstående regler för att avgöra vinnaren. Spelet är utformat med två lägen: Normalt läge och Intelligent läge, där intelligent läge motangriper användarens rörelse, dvs datorn vinner alla drag mot användaren.
cap = cv2. VideoCapture (0) # För att ta bild från kameran
Låt oss nu göra spelet i normalt läge där systemet/ Raspberry Pi tar bilden av handen och analyserar och identifierar handgesten. Med hjälp av en slumptalsgenerator spelas datorrörelsen. Vinnaren väljs utifrån reglerna och visas sedan på skärmen. Starta spelet med följande kommando.
python3 play.py
Steg 9: Integrering av servomotorer?
Till sist, lägg till servomotorn i detta projekt. Servomotorn är GPIO -stift 17 på Raspberry Pi, som har PWM -funktionen för att styra rotationsvinkeln.
Servomotorn som används i detta projekt är SG-90. Den kan rotera medurs och moturs upp till 180 °
Anslutningarna ges enligt följande.
Servomotor - Raspberry Pi
Vcc - +5V
GND - GND
Signal - GPIO17
Biblioteken som RPi. GPIO och tid används i detta projekt.
importera RPi. GPIO som GPIO
importtid
GPIO -stiftet konfigureras sedan till PWM med hjälp av följande rader
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 är konfigurerad att användas som PWM vid frekvensen 50Hz. Servomotorns vinkel uppnås genom att ställa in arbetscykeln (Ton & Toff) för PWM
plikt = vinkel/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Detta ger den önskade stegvinkeln för varje puls, vilket ger den önskade rotationsvinkeln.
Nu har jag tagit diagrammet och skurit det i tre sektioner, för sten, papper och sax. Servomotorn är fixerad i mitten av diagrammet. Pekaren/klaffen är ansluten till servomotorns axel. Denna axel pekar på datorns rörelse enligt logiken som beräknas i skriptet.
Steg 10: Arbetet med projektet?
Och nu är det speltid. Låt oss se hur projektet fungerar.
Om du stöter på några problem när du bygger detta projekt, fråga mig gärna. Föreslå gärna nya projekt som du vill att jag ska göra härnäst.
Ge tummen upp om det verkligen hjälpte dig och följ min kanal för intressanta projekt.:)
Dela den här videon om du vill.
Glad att du prenumererar:
Tack för att du läser!
Steg 11: Kod - Project Repo
Koden läggs till i GitHub -förvaret som finns i kodsektionen.
Rahul24-06/Rock-Paper-Sax-https://github.com/Rahul24-06/Rock-Paper-Scissors
Rekommenderad:
Gör ditt eget Rock Band Ekit Adapter (utan Legacy Adapter), icke -destruktivt !: 10 steg
Gör din egen Rock Band Ekit -adapter (utan äldre adapter), icke -destruktivt !: Efter att ha hört en populär podcastvärd nämna sin oro över att hans trådbundna USB -adapter dör, letade jag efter en DIY -lösning för att ansluta en bättre/anpassad eKit till RB . Tack till Mr DONINATOR på Youtube som gjorde en video med detaljer om hans liknande sida
Stone Paper Scissor Game: 6 steg
Stone Paper Scissor Game: Detta är min första instruerbara. Jag ville skriva ett länge men jag hade inget projekt till hands som jag kunde publicera här. Så när jag kom på idén om det här projektet bestämde jag mig för att det här var det. Så jag tittade på tensorflow.js webbplats, det jag
Handhållet Arduino Paper Rock saxspel med 20x4 LCD -skärm med I2C: 7 steg
Handhållet Arduino Paper Rock saxspel med 20x4 LCD -skärm med I2C: Hej alla eller kanske jag borde säga "Hello World!" Detta är ett handhållet Arduino Paper Rock saxspel med en I2C 20x4 LCD -skärm. Jag
Scissor Drive Servo Hat: 4 Steg (med bilder)
Scissor Drive Servo Hat: Detta enkla 3D-tryck och servomotorprojekt är ett välbefinnande för Simone Giertz, en fantastisk tillverkare som just hade tagit bort hjärntumörborttagning. Saxenheten drivs av en mikroservomotor och Trinket mikrokontroller som kör lite Ard
Rock Paper Sax: 10 steg
Rock Paper Sax: Syfte: Efter att ha slutfört detta lär du dig att göra ett enkelt spel Rock, Paper Sax från grunden med Code.org. Material / krav som krävs: Grundläggande förståelse för Javascript -syntax, en dator, ett Code.org -konto