Cuprins:

Foarfecă de hârtie rock AI: 11 pași
Foarfecă de hârtie rock AI: 11 pași

Video: Foarfecă de hârtie rock AI: 11 pași

Video: Foarfecă de hârtie rock AI: 11 pași
Video: Piatră Foarfecă Hârtie pentru 100 de lei🤩 Turul Milionului❤️ Cluj📍 2024, Noiembrie
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

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?

Image
Image

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?

Noțiuni de bază ?
Noțiuni de bază ?
Noțiuni de bază ?
Noțiuni de bază ?

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?

Înregistrați Raspbian pe cardul SD?
Înregistrați Raspbian pe cardul SD?
Înregistrați Raspbian pe cardul SD?
Înregistrați Raspbian pe cardul SD?
Înregistrați Raspbian pe cardul SD?
Î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:

ssh [email protected]

Parola implicită este zmeură

Aici am folosit un monitor separat pentru a interfața cu Raspberry Pi.

Pasul 5: Colectarea setului de date? ️

Colectați setul de date? ️
Colectați setul de date? ️
Colectați setul de date? ️
Colectați setul 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 ⚒️⚙️

Proiectarea unui NN și instruirea modelului ⚒️⚙️
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 ✅

Testarea modelului ✅
Testarea modelului ✅
Testarea modelului ✅
Testarea modelului ✅
Testarea modelului ✅
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

Joc Rock-Paper-foarfece
Joc Rock-Paper-foarfece

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?

Image
Image

Ș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: