Sisukord:

Kuulmishüppepistik, Google Coral TPU kiirendi versioon: 4 sammu
Kuulmishüppepistik, Google Coral TPU kiirendi versioon: 4 sammu

Video: Kuulmishüppepistik, Google Coral TPU kiirendi versioon: 4 sammu

Video: Kuulmishüppepistik, Google Coral TPU kiirendi versioon: 4 sammu
Video: НАША ЖИЗНЬ ИЗМЕНИЛАСЬ ПОСЛЕ ПОЯВЛЕНИЯ ............ 2024, Juuli
Anonim
Kuulmishüppepistik, Google Coral TPU kiirendi versioon
Kuulmishüppepistik, Google Coral TPU kiirendi versioon
Kuulmishüppepistik, Google Coral TPU kiirendi versioon
Kuulmishüppepistik, Google Coral TPU kiirendi versioon
Kuulmishüppepistik, Google Coral TPU kiirendi versioon
Kuulmishüppepistik, Google Coral TPU kiirendi versioon

See liigutab oma jäsemeid, kuulab teie käske, seda juhib uusim masinõppetehnoloogia

„Kuulmishüppetakk” on lihtne elektromehaaniline hüppetõstuk, mida juhivad kaks mikroservot ja väga lihtne käik, mille LED -id on „silmad”. Seda juhitakse lihtsate häälkäsklustega, mis näitavad, millise üheksast eelmääratletud asendist see võtab, või kas LED peaks sisse või välja lülitama või kas see sooritab etteantud "tantsu" või juhuslikke liigutusi.

Süsteemi põhielemendiks on Google Coral TPU kiirendi, mis võimaldab Tensorflow Lite mudeleid väga suure kiirusega võrguühenduseta käitada isegi "nõrgal" arvutis nagu Raspberry Pi. See võimaldab nt. kiire objekti tuvastamine ja klassifitseerimine RPi kaamera abil, aga ka masinõppepõhiste häältuvastusfunktsioonide kohalik käivitamine.

Minu teada on see esimene avaldatud näide Coral Accelerator häältuvastusega juhitava füüsilise isetegemisseadme kohta ja lisatud koodinäidet võib kasutada ka muude keerukamate projektide jaoks.

Hääljuhtimine põhineb näitel „kuulev madu” „projekti märksõnade märkajas” (https://github.com/google-coral/project-keyword-spotter), mis hiljuti (septembris 2019) GitHubi saidile paigutati. Minu konfiguratsioonis koosneb süsteem Raspberry Pi 4 -st, mis on varustatud Adafruit 16 -kanalilise servokangaga, Google Coral TPU kiirendi ja veebikaameraga, mida kasutatakse siin mikrofonina. Jumping Jacki oli varem kirjeldatud ühes eelmises juhendis, kus seda häälkäskluste lugemiseks kasutas Google Voice'i komplekt, mis on kinnitatud servokapoti külge järgmises versioonis 2.0.

Eelmisel Google Voice Kiti versioonil oli kolm keskset piirangut: see sõltus Google'i veebipõhistest kõnetuvastusteenustest ja seadistamine oli suhteliselt keeruline, enne käsu andmist oli vaja vajutada mingit nuppu ja tekkis tõsine viivitus käsu ütlemise ja süsteemi vastuse vahel. Google Coral kiirendi kasutamine vähendab reageerimisaega sekunditeni, ei sõltu Interneti -ühendusest ja kuulab kogu aeg. Mõningate muudatustega saate seda kasutada palju keerukamate seadmete juhtimiseks, näiteks hüppepistik, robotid või autod või kõik, mida saate Raspberry Pi abil ehitada ja juhtida.

Praeguses versioonis mõistab märksõnade otsija umbes 140 lühimärksõnast/võtmefraasist koosnevat komplekti, mis on määratletud kaasasolevas mudelfailis („voice_commands_v0.7_egetpu.tflite”) ja kirjeldatud eraldi sildifailis („labels_gc2.raw.txt”). Määratletud vabalt muudetava failiga (“commands_v2_hampelmann.txt”), kaardistatakse spetsiaalselt meie skripti poolt kasutatavad märksõnad virtuaalse klaviatuuri klahvivajutustele, nt. tähtede, numbrite puhul üles/alla/vasakule/paremale, crtl+c jne.

Siis nt. klahvi pygame.key abil loetakse neid klahvivajutusi ja neid kasutatakse selleks, et kontrollida, milliseid toiminguid seade, siin hüpikpistik, sooritab. Meie puhul tähendab see kahe servo juhtimist etteantud asendisse või LED -ide sisse- või väljalülitamist. Kuna märksõnade jälgija töötab eraldi turvis, saab see teie tellimusi pidevalt kuulata.

Versioon 21. september 2019

Tarvikud

Vaarika Pi 4, Pimoroni kaudu

Google Coral TPU kiirendi, Mouseri Saksamaa kaudu, 72 €

Adafruit 16 Servo Bonnet, Pimoroni kaudu, umbes 10 €

www.adafruit.com/product/3416

learn.adafruit.com/adafruit-16-channel-pwm…

Virnastaja päis (vajadusel)

www.adafruit.com/product/2223

4x AA patareipakk (või muu 5-6V toiteallikas) Servo Kapoti jaoks

Vana veebikaamera, mikrofon

Servomootoriga hüppetõstuk, nagu on kirjeldatud eelmises juhendis. Paigutusjoonised on lisatud järgmisele sammule, kuid võivad vajada kohandamist.

Hüppetõstuki jaoks vajalikud osad:

- 3 mm Forexi plaat

- 2 mikro servot

- 2 ja 3 mm kruvid ja mutrid

- 2 valget LED -i ja takisti

- natuke kaablit

Samm: seadme seadistamine

Seadme seadistamine
Seadme seadistamine
Seadme seadistamine
Seadme seadistamine
Seadme seadistamine
Seadme seadistamine

Hüppetõstuki ehitamiseks järgige eelmises juhendis toodud juhiseid. Ma kasutasin oma prototüübi jaoks Forexi, kuid võite kasutada laserlõigatud akrüül- või vineerplaate. Võimalik, et peate kohandama paigutust vastavalt oma servode suurusele jne. Kontrollige, kas jäsemed ja käik saavad hõõrdumata liikuda.

Seadistage oma Raspberry Pi. Coral Githubi saidil on saadaval Raspiani pilt, mis sisaldab kõike, mis on vajalik Corali kiirendi käivitamiseks Pi -l, ja sisaldab palju projekte, kusjuures kõik seaded on juba paigas.

Hankige projekti märksõnade otsija lehelt Google Coral GitHub. Installige kogu vajalik tarkvara, nagu näidatud.

Installige kaasasolevad failid. Asetage hüpikpistoni skript projekti märksõna märkaja kausta ja vastavad käskude fail konfiguratsiooni alamkausta.

Kinnitage Adafruit Servo Kapott Pi külge. Kuna kasutan ventilaatoriga RPI -korpust, pidin ühenduse võimaldamiseks kasutama GPIO virnastajaid (nt saadaval Pimoronilt). Installige kõik nõutavad teegid, nagu on märgitud Adafruit'i juhikomplekti juhistes.

Kinnitage servovõllile 5-6V toiteallikas. Kinnitage servod ja LED -id. Minu puhul kasutasin LED -de jaoks porti 0 ja servode jaoks porte 11 ja 15.

Kõigi kontrollimiseks soovitaksin kõigepealt proovida projekti märksõna märkaja "kuulmis madu" näidet ja Adafruit servo kapoti näiteid.

2. samm: hüppepistiku käivitamine

Kui kõik osad on seadistatud ja töötavad, proovige seda kasutada. Skripti saate käivitada IDE -s või käsurealt.

"Asendi 0" hüüdmine "positsioonile 9" kutsub hüppava Jacki võtma ühe eelmääratud positsiooni. Ma määratlesin "1" mõlema käena üles (uu), "3" vasakuna üles, paremale alla (ud), "9" kui mõlemad käed alla (dd) ja "5" mõlema käe keskele (cc).

uu uc ud = 1 2 3

cu cc cd = 4 5 6

du dc dd = 7 8 9

"0" on identne "5" -ga. Märksõna märgaja ei tunne "3" ja "8" väga hästi ära ja võib -olla tuleb neid korrata.

Võimalik, et peate iga servo/külje minimaalseid ja maksimaalseid väärtusi reguleerima, et servod ei blokeeruks ja võtaksid siis liiga palju energiat.

"Järgmine mäng" alustab "tantsu", st teatud positsioonide jada, "juhuslik mäng" aga alustab hüppavat Jacki juhusliku liigutuste jada tegemiseks. Mõlemal juhul töötavad need igavesti, seega peate võib -olla liikumised peatama, nt. käsuga "positsioon null".

"stop game" kutsub esile "ctrl + c" ja peatab protsessi.

"sisselülitamist" ja "väljalülitamist" saab kasutada LED -ide sisse- ja väljalülitamiseks.

Time.sleep väärtusi muutes saate reguleerida liikumiskiirust.

Samm: kood ja käskude fail

Siin esitatud kood on modifikatsioon "kuulmismadu" koodist, mis on osa projekti märksõnade jälgija paketist. Eemaldasin lihtsalt kõik, mis polnud minu rakenduse jaoks vajalik, ilma üksikasjadest reaalselt aru saamata. Igasugused parandused on teretulnud.

Seejärel lisasin nende näidisfailide põhjal Adafruit Servo Kapoti jaoks vajalikud osad.

Tahaksin tänada mõlema osa programmeerijaid.

Koodi leiate failina manusena. Kasutage seda omal vastutusel, muutke, täiustage, mängige sellega.

# Autoriõigus 2019 Google LLC

# # Litsentsitud Apache litsentsi versiooni 2.0 ("litsents") alusel; # te ei tohi seda faili kasutada, välja arvatud vastavalt litsentsile. # Litsentsi koopia saate hankida aadressilt # # https://www.apache.org/licenses/LICENSE-2.0 # # Kui kohaldatav seadus seda ei nõua või pole kirjalikult kokku lepitud, levitatakse litsentsi alusel levitatud tarkvara # "NAGU ON" PÕHJUS, # ILMA GARANTIIDE VÕI TINGIMUSTEGA, nii otsesed kui ka kaudsed. # Vaadake litsentsist litsentsist tulenevaid õigusi ja # piiranguid reguleerivat konkreetset keelt. from _future_ import absoluutne_import _future_ impordi osakonnast _future_ impordi print_funktsioon import argparse import os juhuslikust importimisest randint alates keermestamise importimine Lõim impordi aeg edgetpu.basic.basic_engine import BasicEngine impordimudeli importimise pygame saidilt pygame.locals import * impordijärjekord juhuslikust impordist randrange alates adafruit_servokit import ServoKiti imporditahvli import busio importimine adafruit_pca9685 impordi aeg i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (channels = 16) # set number kanalitest #komplekt.servo [0].actuation_range = 160 #kit.servo [0].set_pulse_width_range (1000, 2000) #üles-, kesk- ja allapoole seaded vasakule ja paremale käele üles_l = 35 md_l = 90 dn_l = 160 üles_r = 160 md_r = 90 dn_r = 35

lft = 15 # servopordi arv, vasak servo (0-8)

rgt = 11 # servopordi arv, parem servo (0-8) led_channel_0 = hat.channels [0] # LED on seadistatud pordile 0 led_channel_0.duty_cycle = 0 # sisselülitamine LED 100% # käe seadete loend üheksa positsiooni jaoks = [(md_l, md_r), (up_l, up_r), (up_l, md_r), (up_l, dn_r), (md_l, up_r), (md_l, md_r), (md_l, dn_r), (dn_l, up_r), (dn_l, md_r), (dn_l, dn_r)] # määratleb 9 JumpingJack positsiooni, mis on tähistatud täisarvudega 0-9 dance1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # a "tantsuklass" Kontrollija (objekt): #Callback function def _init _ (self, q): self._q = q def callback (self, käsk): ise. on_event (ise, sündmus): if event.type == pygame. QUIT: self._running = False def JumpingJack0 (ise, võtmed): # juhib Jumping Jacki, märksõnad: "position x" võti = int (võtmed) p = positsioon [võti] a = p [0] b = p [1] print ("Positsioon:", võti, vasakul) /parem: ", a,"/", b," kraad ") # sys.stdout.write (" Positsioon: ", võti," vasak/parem: ", a,"/", b," kraad ") kit.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.1) def JumpingJack1 (ise): # juhib Jumping Jack dance, märksõna: "järgmine mäng" dnce = dance1 sp = (len (dnce)) r jaoks vahemikus (sp): # positsioonide tantsimise järjekord, sp sammud dc = dnce [r] kui (dc ei ole vahemikus (10)): # print ("sisestusviga asendis", sp) dc = 4 p = asukoht [dc] a = p [0] b = p [1] komplekt.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.25) # määrab kiiruse of liigutused def JumpingJack2 (ise, klahvid): # juhib Jumping Jacki LEDid, märksõnad: "lülita sisse/välja" led = int (võtmed) kui led = = 1: led_channel_0.duty_cycle = 0xffff #lülita LED 100% time.sleep (0.1) kui led == 0: led_channel_0.duty_cycle = 0 # lülitage LED time.sleep välja (0,1), kui led == 2: # vilgub led_channel_0.duty_cycle = 0xffff #lülitage LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0 #lülitage LED sisse 100% time.sleep (0.5) led_channel_0.duty_cycle = 0xffff #LED -i sisselülitamine 100% time.sleep (0,5) led_channel_0.duty_cycle = 0 #sisselülitamine LED 100% time.sleep (0,5) led_channel_0.duty_cycle = 0xffff #lülita LED 100% time.sleep (0,1) def JumpingJack3 (ise): # juhib Jumping Jack tantsu, märksõna: "juhuslik mäng" # h vahemikus (10): dr = randrange (9) p = positsioon [dr] a = p [0] b = p [1] kit.servo [lft].nurk = komplekt.servo [rgt].nurk = b time.sleep (0.25) # määrab liikumiskiiruse def spotter (ise, args): engine = BasicEngine (args.model_file) mic = args.mic if args.mic pole ükski teine int (args.mic) model.classify_audio (mikrofon, mootor, sildid_fail = "config/labels_gc2.raw.txt", commands_file = "config/commands_v2_hampelmann.txt", dectection_callback = self._controler.callback, sample_rate_hz = int (args.sample_rate_hz), num_frames_hop = int (args.num_frames_hop))

def on_execute (ise, args):

kui mitte self.on_init (): self._running = False q = model.get_queue () self._controler = Kontrollija (q) kui mitte args.debug_keyboard: t = Thread (target = self.spotter, args = (args,)) t.daemon = True t.start () item = -1 while self._running: pygame.event.pump () if args.debug_keyboard: keys = pygame.key.get_pressed () else: try: new_item = q.get (Tõsi, 0,1), välja arvatud järjekord. Empty: new_item = Puudub, kui new_item ei ole Puudub: item = new_item if (args.debug_keyboard ja võtmed [pygame. K_ESCAPE]) või item == "stop": self._running = False # if (args.debug_keyboard ja võtmed [pygame. K_SPACE]) või item == "go": # self. JumpingJack0 (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) või item == "right": ise. JumpingJack0 (6) kui (args.debug_keyboard ja klahvid [pygame. K_LEFT]) või item == "left": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_UP]) or item == " up ": self. JumpingJack0 (1) if (args.debug_keyboard and keys [pygame. K_DOWN]) or item ==" down ": self. JumpingJack0 (9) if (args.debug_keyboard ja klahvid [pygam e. K_0]) või üksus == "0": self. JumpingJack0 (0) if (args.debug_keyboard and keys [pygame. K_1]) või item == "1": self. JumpingJack0 (1) if (args. silumise_klaviatuur ja klahvid [pygame. K_2]) või üksus == "2": self. JumpingJack0 (2) if (args.debug_keyboard and keys [pygame. K_3]) or item == "3": self. JumpingJack0 (3) if (args.debug_keyboard ja võtmed [pygame. K_4]) või item == "4": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_5]) või item == "5": self. JumpingJack0 (5) kui (args.debug_keyboard ja klahvid [pygame. K_6]) või üksus == "6": self. JumpingJack0 (6) if (args.debug_keyboard ja klahvid [pygame. K_7]) või item == "7 ": self. JumpingJack0 (7) if (args.debug_keyboard and keys [pygame. K_8]) or item ==" 8 ": self. JumpingJack0 (8) if (args.debug_keyboard and keys [pygame. K_9]) or item == "9": self. JumpingJack0 (9) kui (args.debug_keyboard ja klahvid [pygame. K_a]) või item == "d": self. JumpingJack1 () #dancing Jack, "next_game" if (args. silumisklaviatuur ja klahvid [pygame. K_j]) või üksus == "j": self. JumpingJack2 (0) #LED on, ON " switch_on "if (args.debug_keyboard and keys [pygame. K_k]) or item ==" k ": self. JumpingJack2 (1) #LED off, on" swithch off "if (args.debug_keyboard ja klahvid [pygame. K_l]) või item == "l": self. JumpingJack2 (1) #LED vilgub "target" if (args.debug_keyboard and keys [pygame. K_r]) or item == "r": self. JumpingJack3 () #random dance "juhuslik mäng" time.sleep (0.05) self.on_cleanup () if _name_ == '_main_': parser = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'JumpingJacki juhtimiseks kasutage klaviatuuri. ', action =' store_true ', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)

Samuti on käsu konfiguratsioonifail "commands_v2_hampelmann.txt". Muutke oma äranägemise järgi. See on lihtsalt siltide failil põhinev "käskude, võtmete, (tugevus,)" kombinatsioonide loend.

position_zero, 0, position_one, 1, position_two, 2, position_three, 3, position_four, 4, position_five, 5, position_six, 6, position_seven, 7, position_eight, 8, position_nine, 9, move_up, up, go_up, up, move_down, down, go_down, alla, liiguta_tagasi, vasakule, liiguta edasi, paremale, mine tagasi, vasakule, mine edasi, paremale, 0,8 sihtmärk, l, vaigista, z, jah, y, ei, n, lülita sisse, j, lülita välja, k, helitugevus üles, üles, helitugevus alla, alla, järgmine_mäng, d, juhuslik mäng, r, algusmäng, s, stoppmäng, ctrl+c,

Samm: täiendavad ideed ja muud näited

On üsna ilmne, et seda seadet võib kasutada ka robotite või muude seadmete juhtimiseks. Põhimõtteliselt kõike, mida võib juhtida Raspberry Pi.

Töötan MeArmi juhtimiseks skripti laienduse kallal ja loodan, et saan selle esitada oktoobris 2019.

Samuti kaalun Jumping Jacki kasutamist semaforina ja jäsemete positsiooni tuvastamise programmi "projekt posenet" kui tööriista Jumping Jacki positsioonide lugemiseks ja selle arvu muutmiseks. Sel viisil võib see isegi teksti edastada, kuna 2x 8 positsiooni võib näidata 64 erinevat numbrit, mis on tähestiku, numbrite ja märkide jaoks enam kui piisav. See võib võimaldada, kuigi veidi muudetud, kavandatava IETF -i "IP -datagrammide edastamine üle semaforilipu signaalisüsteemi (SFSS)" füüsilise teostuse (https://tools.ietf.org/html/rfc4824).

Kuid see on veel üks õpetlik. Ja nagu esimesed katsed näitasid, et hüppepistik vajab olulisi muudatusi, enne kui tehisintellekti süsteem selle inimeseks tunnistab, võib kuluda veidi aega.

Juhin teie tähelepanu järgmisele juhendatavale: Objektiotsingu-isiklik-assistent-robot-Ft-Vaarikas, kus kirjeldatakse objektiotsimisrobotit, mis kasutab Raspberry Pi ja Google Coral TPU kombinatsiooni.

Soovitan: