Përmbajtje:

Gërshërë letre shkëmbore AI: 11 hapa
Gërshërë letre shkëmbore AI: 11 hapa

Video: Gërshërë letre shkëmbore AI: 11 hapa

Video: Gërshërë letre shkëmbore AI: 11 hapa
Video: 102 Year Old Lady's Abandoned Home in the USA ~ Power Still ON! 2024, Nëntor
Anonim
Gërshërë letre shkëmbore AI
Gërshërë letre shkëmbore AI

Jeni ndjerë ndonjëherë i mërzitur vetëm? Le të luajmë gurë, letër dhe gërshërë kundër një sistemi ndërveprues të mundësuar me inteligjencë.

Hapi 1: Gjërat e përdorura në këtë projekt

Komponentët e harduerit

  • Raspberry Pi 3 Model B+ × 1
  • Raspberry Pi Kamera Moduli V2 × 1
  • SG90 Mikro-servo motor × 1

Aplikacione softuerike

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Hapi 2: Ide?

Image
Image

Pasi punova në projekte të ndryshme në fusha të ndryshme, kam planifikuar të bëj një projekt argëtues dhe vendosa të bëj një lojë gërshërë-letër-gurë:)

Në këtë projekt, ne do të bëjmë një lojë interaktive dhe do të luajmë kundër kompjuterit i cili mundësohet nga AI për të marrë vendime. AI përdor Kamerën e lidhur me Raspberry Pi për të njohur se çfarë lëviz përdoruesi me dorën, i klasifikon ata në kategorinë (etiketën) më të mirë shkëmb, letër ose gërshërë. Pasi kompjuteri bën lëvizjen e tij, motori stepper i lidhur me Raspberry Pi tregon drejt drejtimit bazuar në lëvizjen e tij.

Rregullat që duhet të merren parasysh për këtë lojë:

  • Shkëmbi blunt gërshërën
  • Letra mbulon shkëmbin
  • Gërshërë letër e prerë

Fituesi do të vendoset bazuar në tre kushtet e mësipërme. Le të shohim një demonstrim të shpejtë të projektit këtu.

Hapi 3: Fillimi?

Fillimi?
Fillimi?
Fillimi?
Fillimi?

Mjedër Pi

Unë kam përdorur një Raspberry Pi 3 Model B+ i cili ka përmirësime të mëdha dhe është më i fuqishëm se sa Raspberry Pi 3 Model B.

Raspberry Pi 3 B+ është i integruar me procesorin katër bërthamor 1.4GHz 64-bit, LAN pa tel me brez të dyfishtë, Bluetooth 4.2/BLE, Ethernet më të shpejtë dhe mbështetje Power-over-Ethernet (me PoE HAT të veçantë).

Specifikimet: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz dhe 5GHz IEEE 802.11.b/g/n/ac LAN pa tel, Bluetooth 4.2, BLE, Gigabit Ethernet mbi USB 2.0 (xhiroja maksimale prej 300 Mbps), header i zgjeruar 40-pin GPIO, porte HDMI4 USB 2.0 me madhësi të plotë, porta e kamerës CSI për lidhjen e kamerës Raspberry Pi, porta e ekranit DSI për lidhjen e ekranit me prekje Raspberry Pi me dalje stereo me 4 pole dhe të përbërë port video, port Micro SD për ngarkimin e sistemit tuaj operativ dhe ruajtjen e të dhënave5V/2.5A hyrje të energjisë DC, mbështetje Power-over-Ethernet (PoE) (kërkon PoE HAT të veçantë).

Servo Motor

Ne përdorim një servo motor SG-90, një motor me çift rrotullues të lartë që mund të përballojë ngarkesën deri në 2.5kg (1cm).

Kamera USB

Një aparat USB për ta bërë lojën ndërvepruese me përpunimin e imazhit

Disa kabllo Jumper përdoren për të lidhur motorin stepper dhe Raspberry Pi.

Hapi 4: Djeg Raspbian në kartën SD?

Të djeg Raspbian në kartën SD?
Të djeg Raspbian në kartën SD?
Djeg Raspbian në kartën SD?
Djeg Raspbian në kartën SD?
Djeg Raspbian në kartën SD?
Djeg Raspbian në kartën SD?

Raspbian është shpërndarja e zgjedhur e Linux që funksionon në Raspberry Pi. Në këtë udhëzues, ne do të përdorim versionin Lite, por edhe versioni Desktop (i cili vjen me një mjedis grafik) mund të përdoret gjithashtu.

  • Shkarkoni Etcher dhe instaloni atë.
  • Lidhni një lexues të kartave SD me kartën SD brenda.
  • Hapni Etcher dhe zgjidhni nga hard disku juaj skedarin Raspberry Pi.img ose.zip që dëshironi të shkruani në kartën SD.
  • Zgjidhni kartën SD ku dëshironi t'i shkruani imazhin tuaj.
  • Rishikoni zgjedhjet tuaja dhe klikoni 'Flash!' për të filluar shkrimin e të dhënave në kartën SD.

Lidheni pajisjen me rrjetin tuaj

  • Aktivizoni qasjen SSH duke shtuar skedarin bosh të skedarit, të vendosur përsëri në rrënjën e vëllimit të nisjes në kartën tuaj SD.
  • Futni kartën SD në Raspberry Pi. Do të fillojë në afërsisht 20 sekonda. Tani duhet të keni qasje SSH në Raspberry Pi tuaj. Si parazgjedhje, emri i hostit të tij do të jetë raspberrypi.local. Në kompjuterin tuaj, hapni një dritare terminale dhe shkruani sa vijon:

ssh [email protected]

Fjalëkalimi i paracaktuar është mjedër

Këtu kam përdorur një monitor të veçantë për t'u lidhur me Raspberry Pi.

Hapi 5: Mbledhja e grupit të të dhënave? ️

Mblidhni bazën e të dhënave? ️
Mblidhni bazën e të dhënave? ️
Mblidhni bazën e të dhënave? ️
Mblidhni bazën e të dhënave? ️

Hapi i parë në këtë projekt është mbledhja e të dhënave. Sistemi duhet të identifikojë gjestin e dorës dhe të njohë veprimin dhe ta bëjë atë të lëvizë në përputhje me rrethanat.

Ne instalojmë disa biblioteka në Raspberry Pi duke përdorur pip install

komanda.

sudo apt-merrni përditësim && sudo apt-merrni përmirësimeudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip instaloni opencv pip instaloni numpy pip instaloni scikit-learn pip instaloni scikit-image pip instaloni h5py pip instaloni Keras pip instaloni tensorflow pip instaloni Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estator pip install tallet pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown pip instaloni protobuf pip install pyYAML pip install six

Nëse përballeni me ndonjë problem me OpenCVpackage, unë rekomandoj fuqimisht instalimin e këtyre paketave.

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

Ne kemi instaluar të gjitha varësitë e kërkuara për këtë projekt. Grupi i të dhënave është bërë nga koleksionet dhe aranzhimet e imazheve nën etiketën përkatëse.

Këtu krijojmë imazhe të grupit të të dhënave për shkronjën, letrën dhe gërshërën duke përdorur fragmentin e mëposhtëm.

roi = kornizë [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (numëro + 1)) cv2.imwrite (save_path, roi)

Imazhi është kapur për secilën etiketë (shkëmb, letër, gërshërë dhe Asnjë).

Hapi 6: Hartimi i një NN dhe Trajnimi i Modelit ⚒️⚙️

Hartimi i një NN & Trajnimi i Modelit ⚒️⚙️
Hartimi i një NN & Trajnimi i Modelit ⚒️⚙️

Thelbi i këtij projekti është një klasifikues imazhi që klasifikon një nga tre kategoritë. Për ta bërë këtë Klasifikues, ne përdorim CNN (Rrjeti Konvolucionar) i stërvitur paraprakisht i quajtur SqueezeNet.

Këtu ne përdorim Keras dhe TensorFlow për të gjeneruar modelin SqueezeNet i cili mund të identifikojë gjestin. Imazhet që kemi krijuar në hapin e mëparshëm përdoren për të trajnuar modelin. Modeli është trajnuar duke përdorur bazën e të dhënave të krijuara për asnjë nga epokat (ciklet) e përmendura.

Modeli është i konfiguruar me hiperparametra siç tregohet më poshtë.

modeli = Sekuencial ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Braktisja (0.5), Convolution2D (NUM_CLASSES, (1, 1), mbushje = 'e vlefshme'), Aktivizimi ('relu'), GlobalAveragePooling2D (), Aktivizimi ('softmax')])

Ndërsa modeli po stërvitet, ju mund të gjeni humbjen dhe saktësinë e modelit për secilën Epokë dhe saktësia rritet në një moment në kohë pas disa Epokash.

U deshën afërsisht 2 orë për të gjeneruar modelin me saktësinë më të lartë pas 10 epokave. Nëse përballeni me ndonjë gabim të alokimit të kujtesës, bëni hapat e mëposhtëm (Falë Adrianit)

Për të rritur hapësirën tuaj të shkëmbimit, hapni /etc /dphys-swapfile dhe më pas redaktoni ndryshoren CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Vini re se unë jam duke rritur shkëmbimin nga 100MB në 1024MB. Nga atje, rinisni shërbimin e shkëmbimit:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile fillimi

Shënim:

Rritja e madhësisë së shkëmbimit është një mënyrë e shkëlqyeshme për të djegur kartën tuaj të kujtesës, prandaj sigurohuni që ta ktheni këtë ndryshim dhe të rinisni shërbimin e shkëmbimit kur të keni mbaruar. Ju mund të lexoni më shumë rreth madhësive të mëdha që dëmtojnë kartat e kujtesës këtu.

Hapi 7: Testimi i modelit

Testimi i modelit
Testimi i modelit
Testimi i modelit
Testimi i modelit
Testimi i modelit
Testimi i modelit

Pasi të krijohet modeli, Ai prodhon skedarin dalës "rock-paper-scissors-model.h5". Ky skedar përdoret si burim për të testuar nëse sistemi mund të identifikojë gjeste të ndryshme të dorës dhe të jetë në gjendje të dallojë veprimet.

Modeli është i ngarkuar në shkrimin python si më poshtë

model = load_model ("rock-paper-gërshërë-model.h5")

Kamera lexon imazhin e provës dhe transformon modelin e kërkuar të ngjyrave, dhe më pas ndryshoni madhësinë e figurës në 227 x 227 piksel (Madhësia e njëjtë përdoret për gjenerimin e modelit). Imazhet që janë përdorur për trajnimin e modelit mund të përdoren për të testuar modelin e krijuar.

img = cv2.imread (shtegu i skedarit)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Pasi të ngarkohet modeli dhe imazhi të fitohet nga kamera, modeli parashikon imazhin e kapur duke përdorur modelin SqueezeNet të ngarkuar, dhe bën parashikimin për lëvizjet e përdoruesit.

pred = model.parashikoj (np.array ())

move_code = np.argmax (para [0]) move_name = mapper (move_code) print ("Parashikuar: {}". format (move_name))

Drejtoni skriptin test.py për të testuar modelin me imazhe të ndryshme testimi.

testi python3.py

Tani modeli është gati për të zbuluar dhe kuptuar gjestet e dorës.

Hapi 8: Lojë Rock-Paper-Gërshërë

Lojë Rock-Letër-Gërshërë
Lojë Rock-Letër-Gërshërë

Loja përdor një funksion të gjenerimit të numrave të rastit për të vendosur lëvizjen e kompjuterit. Ai ndjek rregullat e mësipërme për të përcaktuar fituesin. Loja është krijuar me dy mënyra: Mënyra Normale dhe Mënyra Inteligjente, ku mënyra inteligjente kundërsulmon lëvizjen e përdoruesit, pra Kompjuteri fiton të gjitha lëvizjet kundër përdoruesit.

cap = cv2. VideoCapture (0) # Për të kapur imazh nga Kamera

Tani le ta bëjmë lojën në modalitetin Normal ku sistemi/ Raspberry Pi merr fotografinë e dorës dhe analizon dhe identifikon gjestin e dorës. Pastaj duke përdorur një gjenerator të numrave të rastit, lëvizja e kompjuterit luhet. Fituesi zgjidhet bazuar në rregullat dhe më pas shfaqet në ekran. Filloni lojën duke përdorur komandën e mëposhtme.

python3 play.py

Hapi 9: Integrimi Servo Motor?

Më në fund, shtoni servo motorin në këtë projekt. Servo motor është GPIO pin 17 i Raspberry Pi, i cili ka funksionin PWM për të kontrolluar këndin e rrotullimit.

Servo Motor i përdorur në këtë projekt është SG-90. Mund të bëjë rrotullime në drejtim të akrepave të orës dhe kundër akrepave të sahatit deri në 180 °

Lidhjet jepen si më poshtë.

Servo Motor - Raspberry Pi

Vcc - +5V

GND - GND

Sinjali - GPIO17

Bibliotekat si RPi. GPIO dhe koha përdoren në këtë projekt.

importoni RPi. GPIO si GPIO

koha e importit

Pina GPIO është konfiguruar më pas në PWM duke përdorur linjat e mëposhtme

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

GPIO Pin 17 është konfiguruar të përdoret si PWM në frekuencën 50Hz. Këndi i servo motorit arrihet duke vendosur ciklin e punës (Ton & Toff) të PWM

detyrë = kënd/18 + 2

GPIO.putput (servoPIN, True) f. ChangeDutyCycle (detyrë) kohë. Gjumë (1) GPIO.putput (servoPIN, False) f. ChangeDutyCycle (0)

Kjo do të prodhojë këndin e dëshiruar të hapit për çdo puls, i cili do të jepte këndin e dëshiruar të rrotullimit.

Tani e kam marrë tabelën dhe e kam ndarë në tre pjesë, për gurë, letër dhe gërshërë. Motori Servo është i fiksuar në qendër të tabelës. Treguesi/përplasja është e lidhur me boshtin e servo motorit. Ky bosht tregon lëvizjen e kompjuterit sipas logjikës së llogaritur në skenar.

Hapi 10: Puna e Projektit?

Image
Image

Dhe tani, është koha e lojës. Le të shohim funksionimin e projektit.

Nëse jeni përballur me ndonjë problem në ndërtimin e këtij projekti, mos ngurroni të më pyesni. Ju lutemi sugjeroni projekte të reja që dëshironi të bëj më tej.

Jepni një gisht, nëse ju ka ndihmuar vërtet dhe ndiqni kanalin tim për projekte interesante.:)

Shpërndajeni këtë video nëse ju pëlqen.

I lumtur që jeni pajtuar:

Faleminderit per leximin!

Hapi 11: Kodi - Projekti Repo

Kodi shtohet në Depon e GitHub i cili mund të gjendet në pjesën e kodit.

Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scitors

Recommended: