Cuprins:
- Pasul 1: Lucruri utilizate în acest proiect
- Pasul 2: Idee?
- Pasul 3: Noțiuni introductive?
- Pasul 4: Înregistrați Raspbian pe cardul SD?
- Pasul 5: Colectarea setului de date? ️
- Pasul 6: Proiectarea unui NN și instruirea modelului ⚒️⚙️
- Pasul 7: Testarea modelului ✅
- Pasul 8: Jocul Rock-Paper-Scissors
- Pasul 9: Integrarea servomotorului?
- Pasul 10: Lucrul proiectului?
- Pasul 11: Cod - Repoare proiect
Video: Foarfecă de hârtie rock AI: 11 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Te-ai simțit vreodată plictisit singur? Să jucăm rock, hârtie și foarfece împotriva unui sistem interactiv alimentat cu inteligență.
Pasul 1: Lucruri utilizate în acest proiect
Componente hardware
- Raspberry Pi 3 Model B + × 1
- Raspberry Pi Camera Module V2 × 1
- SG90 Micro-servo motor × 1
Aplicații software
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Pasul 2: Idee?
După ce am lucrat la diferite proiecte pe diferite domenii, am plănuit să fac un proiect distractiv și am decis să fac un joc rock-hârtie-foarfece:)
În acest proiect, vom face un joc interactiv și vom juca împotriva computerului care este alimentat de AI pentru a lua decizii. AI folosește camera conectată la Raspberry Pi pentru a recunoaște ce mișcare a făcut utilizatorul cu mâna, pentru a le clasifica în cea mai bună categorie (etichetă) de piatră, hârtie sau foarfece. Odată ce computerul își face mișcarea, motorul pas cu pas conectat la Raspberry Pi indică spre direcția bazată pe mișcare.
Reguli care trebuie luate în considerare pentru acest joc:
- Rock toceste foarfeca
- Hârtia acoperă stânca
- Foarfeca tăiată hârtie
Câștigătorul va fi decis pe baza celor trei condiții de mai sus. Să vedem aici o demonstrație rapidă a proiectului.
Pasul 3: Noțiuni introductive?
Raspberry Pi
Am folosit un Raspberry Pi 3 Model B + care are îmbunătățiri extraordinare și este mai puternic decât Raspberry Pi 3 Model B.
Raspberry Pi 3 B + este integrat cu procesorul quad-core de 1,4 GHz pe 64 de biți, LAN wireless cu bandă duală, Bluetooth 4.2 / BLE, Ethernet mai rapid și suport Power-over-Ethernet (cu PoE HAT separat).
Specificații: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz și 5GHz IEEE 802.11.b / g / n / ac LAN fără fir, Bluetooth 4.2, BLE, Gigabit Ethernet pe USB 2.0 (capacitate maximă de 300 Mbps), antetul GPIO extins cu 40 de pini, porturi HDMI4 USB 2.0 de dimensiuni complete, port pentru cameră CSI pentru conectarea unei camere Raspberry Pi, port pentru afișare DSI pentru conectarea unui ecran tactil Raspberry Pi ieșire stereo cu 4 poli și compozit port video, port Micro SD pentru încărcarea sistemului dvs. de operare și stocarea datelor Intrare de alimentare DC 5V / 2.5A, suport Power-over-Ethernet (PoE) (necesită PoE HAT separat).
Servo motor
Folosim un servomotor SG-90, un motor cu cuplu ridicat care poate suporta sarcina de până la 2,5 kg (1 cm).
Cameră USB
O cameră USB pentru a face jocul interactiv cu procesarea imaginii
Unele cabluri Jumper sunt utilizate pentru a conecta motorul pas cu pas și Raspberry Pi.
Pasul 4: Înregistrați Raspbian pe cardul SD?
Raspbian este distribuția Linux la alegere care rulează pe Raspberry Pi. În acest ghid, vom folosi versiunea Lite, dar poate fi utilizată și versiunea desktop (care vine cu un mediu grafic).
- Descărcați Etcher și instalați-l.
- Conectați un cititor de card SD cu cardul SD din interior.
- Deschideți Etcher și selectați din hard disk fișierul.img sau.zip Raspberry Pi pe care doriți să îl scrieți pe cardul SD.
- Selectați cardul SD în care doriți să scrieți imaginea.
- Examinați selecțiile și dați clic pe „Flash!” pentru a începe să scrieți date pe cardul SD.
Conectați dispozitivul la rețeaua dvs
- Activați accesul SSH adăugând fișier gol ssh, plasat din nou la rădăcina volumului de încărcare de pe cardul SD.
- Introduceți cardul SD în Raspberry Pi. Va porni în aproximativ 20 de secunde. Acum ar trebui să aveți acces SSH la Raspberry Pi. În mod implicit, numele său de gazdă va fi raspberrypi.local. Pe computer, deschideți o fereastră terminal și tastați următoarele:
Parola implicită este zmeură
Aici am folosit un monitor separat pentru a interfața cu Raspberry Pi.
Pasul 5: Colectarea setului de date? ️
Primul pas în acest proiect este colectarea datelor. Sistemul trebuie să identifice gestul mâinii și să recunoască acțiunea și să o facă să se miște în consecință.
Instalăm mai multe biblioteci pe Raspberry Pi folosind instalarea pip
comanda.
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 instalează tensorflow pip instalează Werkzeug pip instalează Keras-Aplicații pip instalează Keras-Preprocesare pip instalează keras-squeezenet pip instalează astor pip instalează tensorboard pip instalează tensorflow-estimator pip instalează mock pip instalează grpcio pip instalează absl-pypip instalează gast pip instalează joblib pip instalează Markdown pip install protobuf pip install PyYAML pip install six
Dacă aveți probleme cu OpenCVpackage, vă recomand cu tărie să instalați aceste pachete.
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
Am instalat toate dependențele necesare pentru acest proiect. Setul de date este realizat prin colecții și aranjamente ale imaginilor sub eticheta corespunzătoare.
Aici creăm imaginile setului de date pentru eticheta rock, hârtie și foarfecă folosind următorul fragment.
roi = cadru [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Imaginea este capturată pentru fiecare etichetă (piatră, hârtie, foarfecă și Niciuna).
Pasul 6: Proiectarea unui NN și instruirea modelului ⚒️⚙️
Nucleul acestui proiect este un clasificator de imagine care clasifică una din cele trei categorii. Pentru a face acest clasificator, folosim CNN (rețea convoluțională) pre-instruită numită SqueezeNet.
Aici folosim Keras și TensorFlow pentru a genera modelul SqueezeNet care poate identifica gestul. Imaginile pe care le-am generat în pasul anterior sunt folosite pentru a antrena modelul. Modelul este instruit folosind setul de date generat pentru nici o epocă (cicluri) menționată.
Modelul este configurat cu hiperparametrele așa cum se arată mai jos.
model = Secvențial ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Abandon (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Activare („relu”), GlobalAveragePooling2D (), Activare („softmax”)])
În timp ce modelul se antrenează, puteți găsi pierderea și precizia modelului pentru fiecare epocă, iar precizia crește la un moment dat după câteva epoci.
A durat aproximativ 2 ore pentru a genera modelul cu cea mai mare precizie după 10 epoci. Dacă vă confruntați cu erori de alocare a memoriei, urmați pașii următori (Mulțumesc lui Adrian)
Pentru a vă mări spațiul de swap, deschideți / etc / dphys-swapfile și apoi editați variabila CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Observați că măresc swap-ul de la 100 MB la 1024 MB. De acolo, reporniți serviciul de swap:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Notă:
Creșterea dimensiunii swapului este o modalitate excelentă de a vă arde cardul de memorie, așa că asigurați-vă că reveniți la această modificare și reporniți serviciul swap când ați terminat. Aici puteți citi mai multe despre dimensiunile mari care deteriorează cardurile de memorie.
Pasul 7: Testarea modelului ✅
Odată generat modelul, acesta produce fișierul de ieșire „rock-paper-foarfece-model.h5”. Acest fișier este utilizat ca sursă pentru a testa dacă sistemul poate identifica diferite gesturi ale mâinilor și poate diferenția acțiunile.
Modelul este încărcat în scriptul python după cum urmează
model = load_model ("model de foarfece-hârtie-rock.h5")
Camera citește imaginea de testare și transformă modelul de culoare dorit, apoi redimensionează imaginea la 227 x 227 pixeli (aceeași dimensiune utilizată pentru generarea modelului). Imaginile care au fost folosite pentru instruirea modelului pot fi folosite pentru a testa modelul generat.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Odată ce modelul este încărcat și imaginea este dobândită de cameră, modelul prezice imaginea capturată folosind modelul SqueezeNet încărcat și face predicția pentru mișcările utilizatorului.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Predict: {}". format (move_name))
Rulați scriptul test.py pentru a testa modelul cu diferite imagini de testare.
python3 test.py
Acum modelul este gata să detecteze și să înțeleagă gesturile mâinilor.
Pasul 8: Jocul Rock-Paper-Scissors
Jocul folosește o funcție de generare aleatorie a numerelor pentru a decide mutarea computerului. Urmează regulile menționate mai sus pentru a determina câștigătorul. Jocul este conceput cu două moduri: modul normal și modul inteligent, unde modul inteligent contraatacă mișcarea utilizatorului, adică computerul câștigă toate mișcările împotriva utilizatorului.
cap = cv2. VideoCapture (0) # Pentru a captura imagini de pe cameră
Acum, să facem jocul în modul Normal, unde sistemul / Raspberry Pi face poza mâinii și analizează și identifică gestul mâinii. Apoi, folosind un generator de numere aleatorii, se joacă mutarea computerului. Câștigătorul este ales pe baza regulilor și apoi afișat pe ecran. Porniți jocul folosind următoarea comandă.
python3 play.py
Pasul 9: Integrarea servomotorului?
În cele din urmă, adăugați servomotorul la acest proiect. Servomotorul este pinul GPIO 17 al Raspberry Pi, care are funcția PWM pentru a controla unghiul de rotație.
Servomotorul utilizat în acest proiect este SG-90. Poate face rotații în sensul acelor de ceasornic și în sens invers acelor de ceasornic până la 180 °
Conexiunile sunt date după cum urmează.
Servomotor - Raspberry Pi
Vcc - + 5V
GND - GND
Semnal - GPIO17
Bibliotecile precum RPi. GPIO și time sunt utilizate în acest proiect.
importați RPi. GPIO ca GPIO
timpul de import
Pinul GPIO este apoi configurat la PWM folosind următoarele linii
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
Pinul GPIO 17 este configurat pentru a fi utilizat ca PWM la frecvența de 50Hz. Unghiul servomotorului este realizat prin setarea ciclului de funcționare (Ton & Toff) al PWM
datorie = unghi / 18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Acest lucru va produce unghiul de pas dorit pentru fiecare impuls, care ar da unghiul de rotație dorit.
Acum am luat graficul și l-am împărțit în trei secțiuni, pentru piatră, hârtie și foarfecă. Servomotorul este fixat în centrul diagramei. Indicatorul / clapeta este conectat la arborele servomotorului. Acest arbore indică deplasarea computerului în conformitate cu logica calculată în script.
Pasul 10: Lucrul proiectului?
Și acum, este timpul de joacă. Să vedem funcționarea proiectului.
Dacă v-ați confruntat cu probleme în construirea acestui proiect, nu ezitați să mă întrebați. Vă rugăm să sugerați noi proiecte pe care doriți să le fac în continuare.
Dă un deget mare dacă te-a ajutat cu adevărat și urmărește canalul meu pentru proiecte interesante.:)
Distribuiți acest videoclip dacă doriți.
Mă bucur că v-ați abonat:
Mulțumesc pentru lectură!
Pasul 11: Cod - Repoare proiect
Codul este adăugat în depozitul GitHub care poate fi găsit în secțiunea cod.
Rahul24-06 / Rock-Paper-Scissors -
Recomandat:
Suport pentru baterii de hârtie ușor: 5 pași
Suport pentru baterii de hârtie ușor: dacă vă este dificil să găsiți un suport pentru bateria cu celule de monedă în timp ce faceți proiecte mici cu copiii sau studenții la fel ca mine, atunci acest manual de instruire este doar pentru dvs. Acest suport pentru baterie are, de asemenea, o poziție ON sau OFF în funcție de modul în care închideți
Conservatorul de hârtie: economisiți hârtia igienică cu terapie de șoc: 4 pași
Conservatorul de hârtie: economisiți hârtia igienică cu terapie de șoc: Am văzut cu toții rafturile goale la magazin alimentar și se pare că va exista o lipsă de hârtie igienică pentru o vreme. Dacă nu v-ați aprovizionat devreme, probabil că vă aflați în situația în care am. Am o casă de 6 și doar câteva role pentru a dura
Servo Hat cu foarfecă: 4 pași (cu imagini)
Scissor Drive Servo Hat: Acest proiect simplu de imprimare 3D și servomotor este un sentiment de înțelegere pentru Simone Giertz, un producător minunat care tocmai a suferit o intervenție chirurgicală de îndepărtare a tumorii cerebrale. Dispozitivul foarfecă este acționat de un micro servomotor și un microcontroler Trinket care rulează puțin Ard
Foarfece de hârtie rock: 10 pași
Foarfece de hârtie Rock: Scop: După finalizarea acestui lucru, veți învăța cum să creați un joc simplu de Rock, foarfece de hârtie de la zero folosind Code.org. Materiale / Cerințe necesare: Înțelegerea de bază a sintaxei Javascript, a unui computer, a unui cont Code.org
Programare orientată pe obiecte: crearea de obiecte Metoda de învățare / predare / tehnică folosind foarfeca: 5 pași
Programare orientată pe obiecte: crearea de obiecte Metodă / tehnică de învățare / predare Utilizarea foarfecelor: Metodă de învățare / predare pentru studenții noi în programarea orientată pe obiecte. Aceasta este o modalitate de a le permite să vizualizeze și să vadă procesul de creare a obiectelor din clase. Părți: 1. foarfece (orice fel va face). 2. Bucată de hârtie sau carton. 3. Marker