Satura rādītājs:

Akmens papīra šķēres AI: 11 soļi
Akmens papīra šķēres AI: 11 soļi

Video: Akmens papīra šķēres AI: 11 soļi

Video: Akmens papīra šķēres AI: 11 soļi
Video: Красивая история о настоящей любви! Мелодрама НЕЛЮБОВЬ (Домашний). 2024, Novembris
Anonim
Akmens papīra šķēres AI
Akmens papīra šķēres AI

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?

Image
Image

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?

Darba sākšana?
Darba sākšana?
Darba sākšana?
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ē?

Vai ierakstīt Raspbian SD kartē?
Vai ierakstīt Raspbian SD kartē?
Vai ierakstīt Raspbian SD kartē?
Vai ierakstīt Raspbian SD kartē?
Vai ierakstīt Raspbian SD kartē?
Vai 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:

ssh [email protected]

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? ️

Vai vācat datu kopu? ️
Vai vācat datu kopu? ️
Vai vācat datu kopu? ️
Vai vācat datu kopu? ️

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 ⚒️⚙️

NN izstrāde un modeļa apmācība ⚒️⚙️
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 ✅

Modeļa pārbaude ✅
Modeļa pārbaude ✅
Modeļa pārbaude ✅
Modeļa pārbaude ✅
Modeļa pārbaude ✅
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

Akmens-papīra-šķēru spēle
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?

Image
Image

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: