Satura rādītājs:
- 1. darbība. Šajā projektā izmantotās lietas
- 2. solis: ideja?
- 3. darbība. Darba sākšana?
- 4. solis: ierakstīt Raspbian SD kartē?
- 5. darbība: datu kopas apkopošana? ️
- 6. solis: NN izstrāde un modeļa apmācība ⚒️⚙️
- 7. darbība: modeļa pārbaude ✅
- 8. solis: akmens-papīra-šķēru spēle
- 9. solis: Servo motora integrācija?
- 10. solis: projekta darbs?
- 11. darbība. Kods - projekta repo
Video: Akmens papīra šķēres AI: 11 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:53
Vai esat kādreiz juties garlaicīgi viens? Spēlēsim akmeni, papīru un šķēres pret interaktīvu sistēmu, kas darbosies ar inteliģenci.
1. darbība. Šajā projektā izmantotās lietas
Aparatūras komponenti
- Aveņu Pi 3 modelis B+ × 1
- Raspberry Pi kameras modulis V2 × 1
- SG90 Mikroservo motors × 1
Programmatūras lietotnes
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
2. solis: ideja?
Pēc tam, kad esmu strādājis pie dažādiem projektiem dažādās jomās, es plānoju izveidot jautru projektu, un es nolēmu izveidot akmens-papīra-šķēru spēli:)
Šajā projektā mēs veidosim interaktīvu spēli un spēlēsim pret datoru, kuru darbina AI, lai pieņemtu lēmumus. AI izmanto kameru, kas savienota ar Raspberry Pi, lai atpazītu lietotāja kustību ar roku, klasificētu tos labākajā kategorijā (etiķetes) iezis, papīrs vai šķēres. Kad dators ir pārvietojies, pakāpju motors, kas savienots ar Raspberry Pi, norāda virzienu, pamatojoties uz tā kustību.
Noteikumi, kas jāņem vērā šajā spēlē:
- Roks trulina šķēres
- Papīrs pārklāj klinti
- Šķēres sagriež papīru
Uzvarētājs tiks noteikts, pamatojoties uz iepriekš minētajiem trim nosacījumiem. Apskatīsim ātru projekta demonstrāciju šeit.
3. darbība. Darba sākšana?
Raspberry Pi
Esmu izmantojis Raspberry Pi 3 B+ modeli, kuram ir lieliski uzlabojumi un kas ir jaudīgāks nekā iepriekšējais Raspberry Pi 3 modelis B.
Raspberry Pi 3 B+ ir integrēts ar 1,4 GHz 64 bitu četrkodolu procesoru, divu joslu bezvadu LAN, Bluetooth 4.2/BLE, ātrāku Ethernet un Power-over-Ethernet atbalstu (ar atsevišķu PoE HAT).
Specifikācijas: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bitu SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz un 5 GHz IEEE 802.11.b/g/n/ac bezvadu LAN, Bluetooth 4.2, BLE, Gigabit Ethernet, izmantojot USB 2.0 (maksimālā caurlaidspēja 300 Mbps), paplašināta 40 kontaktu GPIO galvene, pilna izmēra HDMI4 USB 2.0 porti, CSI kameras ports Raspberry Pi kameras pievienošanai, DSI displeja ports Raspberry Pi skārienekrāna displeja pievienošanai 4 polu stereo izeja un kompozītmateriāls video ports, Micro SD ports operētājsistēmas ielādēšanai un datu glabāšanai 5V/2,5A līdzstrāvas ieeja, Power-over-Ethernet (PoE) atbalsts (nepieciešams atsevišķs PoE HAT).
Servo motors
Mēs izmantojam servomotoru SG-90, motoru ar lielu griezes momentu, kas spēj izturēt slodzi līdz 2,5 kg (1 cm).
USB kamera
USB kamera, kas padara spēli interaktīvu ar attēlu apstrādi
Pakāpju motora un Raspberry Pi vadiem tiek izmantoti daži Jumper kabeļi.
4. solis: ierakstīt Raspbian SD kartē?
Raspbian ir izvēles Linux izplatīšana, kas darbojas Raspberry Pi. Šajā rokasgrāmatā mēs izmantosim vienkāršoto versiju, taču var izmantot arī darbvirsmas versiju (ar grafisko vidi).
- Lejupielādējiet Etcher un instalējiet to.
- Pievienojiet SD karšu lasītāju ar iekšpusē esošo SD karti.
- Atveriet Etcher un no cietā diska atlasiet Raspberry Pi.img vai.zip failu, kuru vēlaties ierakstīt SD kartē.
- Atlasiet SD karti, kurā vēlaties ierakstīt attēlu.
- Pārskatiet savas izvēles un noklikšķiniet uz "Flash!" lai sāktu ierakstīt datus SD kartē.
Pievienojiet ierīci tīklam
- Iespējojiet SSH piekļuvi, pievienojot tukšu failu ssh, kas atkal atrodas SD kartes sāknēšanas apjoma saknē.
- Ievietojiet SD karti Raspberry Pi. Tas tiks palaists aptuveni 20 sekundēs. Tagad jums vajadzētu būt SSH piekļuvei jūsu Raspberry Pi. Pēc noklusējuma tā saimniekdatora nosaukums būs raspberrypi.local. Datorā atveriet termināļa logu un ierakstiet šo:
Noklusējuma parole ir aveņu
Šeit es esmu izmantojis atsevišķu monitoru, lai izveidotu savienojumu ar Raspberry Pi.
5. darbība: datu kopas apkopošana? ️
Pirmais solis šajā projektā ir datu vākšana. Sistēmai ir jāidentificē rokas žests un jāatpazīst darbība, un tā attiecīgi jāpārvieto.
Mēs instalējam vairākas bibliotēkas Raspberry Pi, izmantojot pip install
komandu.
sudo apt-get update && sudo apt-get upgrades sud apt instalēt tensorflow pip instalēt Werkzeug pip instalēt Keras-Applications pip instalēt Keras-Preprocessing pip instalēt keras-squeezen pip instalēt astor pip instalēt tensorboard pip instalēt tensorflow-aprēķinātāju pip instalēt izspēles pip instalāciju grpcio pip instalēt absl-pypip instalēt gast pip instalēt joblib pip instalēt Markdown pip instalēt protobuf pip instalēt PyYAML pip instalēt sešus
Ja jums rodas kādas problēmas ar OpenCVpackage, es ļoti iesaku instalēt šīs paketes.
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
Mēs esam instalējuši visas šim projektam nepieciešamās atkarības. Datu kopu veido attēlu kolekcijas un izkārtojumi zem atbilstošās etiķetes.
Šeit mēs izveidojam datu kopas attēlus etiķetei, papīram un šķērēm, izmantojot šādu fragmentu.
roi = rāmis [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (skaits + 1)) cv2.imwrite (save_path, roi)
Attēls tiek uzņemts katrai etiķetei (akmens, papīrs, šķēres un nav).
6. solis: NN izstrāde un modeļa apmācība ⚒️⚙️
Šī projekta pamatā ir attēlu klasifikators, kas klasificē vienu no trim kategorijām. Lai izveidotu šo klasifikatoru, mēs izmantojam iepriekš apmācītu CNN (Convolutional Network), ko sauc par SqueezeNet.
Šeit mēs izmantojam Keras un TensorFlow, lai ģenerētu SqueezeNet modeli, kas var identificēt žestu. Attēli, kurus izveidojām iepriekšējā solī, tiek izmantoti modeļa apmācībai. Modelis tiek apmācīts, izmantojot datu kopu, kas ģenerēta nevienam no minētajiem laikmetiem (cikliem).
Modelis ir konfigurēts ar hiperparametriem, kā parādīts zemāk.
modelis = secīga ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Izkrišana (0,5), Convolution2D (NUM_CLASSES, (1, 1), polsterējums = 'derīgs'), Aktivizēšana (“relu”), GlobalAveragePooling2D (), Aktivizēšana (softmax)])
Kamēr modelis tiek apmācīts, jūs varat atrast modeļa zudumu un precizitāti katram laikmetam, un precizitāte palielinās pēc dažiem laikmetiem.
Lai izveidotu modeli ar visaugstāko precizitāti pēc 10 laikmetiem, bija nepieciešamas aptuveni 2 stundas. Ja rodas kādas atmiņas piešķiršanas kļūdas, rīkojieties šādi (pateicoties Adrianam)
Lai palielinātu mijmaiņas vietu, atveriet /etc /dphys-swapfile un pēc tam rediģējiet mainīgo CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Ievērojiet, ka es palielinu mijmaiņas darījumu no 100 MB uz 1024 MB. No turienes restartējiet mijmaiņas pakalpojumu:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Piezīme:
Apmaiņas apjoma palielināšana ir lielisks veids, kā izdegt atmiņas karti, tāpēc noteikti atgrieziet šīs izmaiņas un restartējiet mijmaiņas pakalpojumu, kad esat pabeidzis. Šeit varat lasīt vairāk par lielu izmēru atmiņas karšu sabojāšanu.
7. darbība: modeļa pārbaude ✅
Kad modelis ir ģenerēts, tas ražo izvades failu "rock-paper-scissors-model.h5". Šis fails tiek izmantots kā avots, lai pārbaudītu, vai sistēma spēj identificēt dažādus roku žestus un spēj diferencēt darbības.
Modelis tiek ielādēts python skriptā šādi
modelis = ielādes_modelis ("rock-paper-scissors-model.h5")
Kamera nolasa testa attēlu un pārveido vajadzīgo krāsu modeli, un pēc tam mainiet attēla izmēru līdz 227 x 227 pikseļiem (tāds pats izmērs, kāds izmantots modeļu ģenerēšanai). Attēlus, kas tika izmantoti modeļa apmācībai, var izmantot, lai pārbaudītu ģenerēto modeli.
img = cv2.imread (failu ceļš)
img = cv2.cvtKrāsa (img, cv2. COLOR_BGR2RGB) img = cv2.izmērs (img, (227, 227))
Kad modelis ir ielādēts un kamera ir ieguvusi attēlu, modelis paredz uzņemto attēlu, izmantojot ielādēto SqueezeNet modeli, un paredz lietotāja kustības.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = kartētājs (move_code) print ("Paredzētais: {}". formāts (pārvietot_nosaukums))
Palaidiet skriptu test.py, lai pārbaudītu modeli ar dažādiem testa attēliem.
python3 test.py
Tagad modelis ir gatavs atklāt un saprast roku žestus.
8. solis: akmens-papīra-šķēru spēle
Spēle izmanto nejaušu skaitļu ģenerēšanas funkciju, lai izlemtu datora kustību. Lai noteiktu uzvarētāju, tiek ievēroti iepriekš minētie noteikumi. Spēle ir veidota ar diviem režīmiem: parasto režīmu un inteliģento režīmu, kur viedais režīms pretuzbrukums lietotāja kustībai, ti, dators uzvar visas kustības pret lietotāju.
cap = cv2. VideoCapture (0) # Lai uzņemtu attēlu no kameras
Tagad padarīsim spēli normālā režīmā, kur sistēma/ Raspberry Pi uzņem rokas attēlu un analizē un identificē rokas žestu. Pēc tam, izmantojot nejaušu skaitļu ģeneratoru, tiek atskaņots datora gājiens. Uzvarētājs tiek izvēlēts, pamatojoties uz noteikumiem, un pēc tam tiek parādīts ekrānā. Sāciet spēli, izmantojot šādu komandu.
python3 play.py
9. solis: Servo motora integrācija?
Beidzot pievienojiet šim projektam servomotoru. Servomotors ir Raspberry Pi GPIO pin 17, kuram ir PWM funkcija, lai kontrolētu rotācijas leņķi.
Šajā projektā izmantotais servomotors ir SG-90. Tas var griezties pulksteņrādītāja virzienā un pretēji pulksteņrādītāja virzienam līdz 180 °
Savienojumi ir norādīti šādi.
Servomotors - Raspberry Pi
Vcc - +5V
GND - GND
Signāls - GPIO17
Šajā projektā tiek izmantotas tādas bibliotēkas kā RPi. GPIO un laiks.
importēt RPi. GPIO kā GPIO
importa laiks
Pēc tam GPIO tapa tiek konfigurēta kā PWM, izmantojot šādas rindas
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 ir konfigurēts lietošanai kā PWM 50 Hz frekvencē. Servomotora leņķis tiek sasniegts, iestatot PWM darba ciklu (Ton & Toff)
pienākums = leņķis/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Tas radīs vēlamo soļa leņķi katram impulsam, kas dotu vēlamo rotācijas leņķi.
Tagad es paņēmu diagrammu un sagriezu to trīs daļās - akmenim, papīram un šķērēm. Servomotors ir fiksēts diagrammas centrā. Rādītājs/atloks ir savienots ar servomotora vārpstu. Šī vārpsta norāda uz datora kustību saskaņā ar skriptā aprēķināto loģiku.
10. solis: projekta darbs?
Un tagad ir spēles laiks. Apskatīsim projekta darbību.
Ja, veidojot šo projektu, jums radās kādas problēmas, jautājiet man. Lūdzu, iesakiet jaunus projektus, kurus vēlaties, lai es daru tālāk.
Palieciet īkšķi, ja tas jums patiešām palīdzēja, un sekojiet manam kanālam interesantiem projektiem.:)
Ja vēlaties, kopīgojiet šo videoklipu.
Prieks, ka abonējāt:
Paldies, ka izlasījāt!
11. darbība. Kods - projekta repo
Kods tiek pievienots GitHub repozitorijam, kas atrodams koda sadaļā.
Rahul24-06/Akmens šķēres-https://github.com/Rahul24-06/Rock-Paper-Scissors
Ieteicams:
Stikla akmens LED caurule (WiFi kontrolēta, izmantojot viedtālruņa lietotni): 6 soļi (ar attēliem)
Stikla akmens LED caurule (WiFi kontrolēta, izmantojot viedtālruņa lietotni): Sveiki kolēģi veidotāji! Šajā pamācībā es parādīšu, kā izveidot WiFi vadāmu LED cauruli, kas ir piepildīta ar stikla akmeņiem, lai iegūtu jauku izkliedes efektu. Gaismas diodes ir individuāli adresējamas, un tāpēc ir iespējami daži jauki efekti
Akmens papīra šķērveida spēle: 6 soļi
Akmens papīra šķērveida spēle: šī ir mana pirmā pamācība. Es jau sen gribēju to uzrakstīt, bet man nebija pie rokas neviens projekts, ko es varētu publicēt šeit. Tātad, kad man radās ideja par šo projektu, es nolēmu, ka šis ir tas. Tāpēc es pārlūkoju tensorflow.js vietni, es
Akmens LCD + paātrinājuma žiroskopa sensors: 5 soļi
Akmens LCD +paātrinājuma žiroskopa sensors: Šis dokuments iemācīs jums izmantot STM32 MCU +MPU6050 akselerometra žiroskopa sensoru +STONE STVC070WT sērijas porta displeju DEMO. STVC070WT ir mūsu uzņēmuma sērijas displejs, tā izstrāde ir vienkārša, viegli lietojama , jūs varat doties uz mums
Akmens papīra šķēres: 10 soļi
Akmens papīra šķēres: Mērķis: Pabeidzot šo darbību, jūs uzzināsit, kā izveidot vienkāršu spēli Rock, Paper Scissors no nulles, izmantojot Code.org. Nepieciešamie materiāli / prasības: Pamatzināšanas par Javascript sintaksi, dators, Code.org konts
Objektorientēta programmēšana: objektu radīšana Mācīšanās/mācīšanas metode/tehnika, izmantojot šķēres: 5 soļi
Objektorientēta programmēšana: objektu radīšana Mācīšanās/mācīšanas metode/tehnika, izmantojot šķēres: Mācīšanās/mācīšanas metode studentiem, kas ir jauni uz objektorientētu programmēšanu. Tas ir veids, kā ļaut viņiem vizualizēt un redzēt objektu veidošanas procesu no klasēm.Daļas: 1. Šķēres (derēs jebkāda veida). 2. Papīra gabals vai kartons. 3. Marķieris