Satura rādītājs:

Ar dzirdes aparātu, Google Coral TPU paātrinātājs: 3 soļi
Ar dzirdes aparātu, Google Coral TPU paātrinātājs: 3 soļi

Video: Ar dzirdes aparātu, Google Coral TPU paātrinātājs: 3 soļi

Video: Ar dzirdes aparātu, Google Coral TPU paātrinātājs: 3 soļi
Video: Pixel 7/7PRO official case by Google! Worth it! 2024, Jūlijs
Anonim
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs
Ar dzirdes aparātu, Google koraļļu TPU paātrinātājs

Turpmāk es gribētu aprakstīt balss vadītu MeArm versiju-mazu xyz robota roku ar satvērēju. Es izmantoju MIME nozaru MeArm Pi, bet sistēmai jābūt piemērojamai jebkurai MeArm versijai vai līdzīgām servopiedziņas ierīcēm.

Izmantojot Google Coral TPU paātrinātāju, Raspberry Pi var palaist ātrus bezsaistes TensorFlow balss atpazīšanas skriptus un tādējādi kontrolēt fiziskās ierīces ar balss pasūtījumiem, ar latentumu zem vienas sekundes.

Šeit aprakstītā ierīce ir divos iepriekšējos norādījumos aprakstīto jēdzienu kombinācija un paplašinājums. Tas ir iepriekš aprakstītās Google Coral balss vadības, Jumping Jack, paplašinājums, kas aprakstīts šeit, un šeit aprakstīts milzīgs Google AIY balss kontrolēta MeArm uzlabojums.

Balss vadītajam MeArm, izmantojot Google Voice AIY sistēmu, bija nepieciešama tiešsaistes piekļuve, to nebija viegli ieviest, bija jānospiež poga, lai aktivizētu balss pasūtījumu klausīšanos, un tam bija ilgs latentuma laiks. Tagad izmantotais Google Coral TPU paātrinātājs ļauj palaist TensorFlowLite modeļus bezsaistē ar lielu ātrumu Raspberry Pi vai citās Linux ierīcēs. Starp Google Coral Github lapas piemēriem ir piemērs ar nosaukumu “dzirdīga čūska” balss atpazīšanas sistēmai, kas spēj saprast 140 galvenās frāzes (2019. gada septembris), kuras pēc tam tiek kartētas līdz virtuāliem taustiņsitieniem. Šo "taustiņsitienu" savienošana ar dažu Python programmētu funkciju izpildi ļauj izveidot balss komandu vadītu ierīci. Nesen es aprakstīju pirmo ieviešanu, ar balsi vadāmu elektromehānisku lēcienu ligzdu. Šeit sniegtā ieviešana ir nedaudz sarežģītāka un ļauj kontrolēt visus četrus MeArm servos, lai nepārtraukti pārvietotu MeArm vai ļautu tai pāriet uz vairākiem iepriekš definētiem amatos vai veikt dažus sarežģītākus uzdevumus.

Izmantojot šeit sniegto skriptu kā piemēru, vajadzētu būt samērā vienkāršai, lai izveidotu citas ar balsi vadāmas ierīces, piem. robotu automašīnas vai palīgtehniskās vienības.

Piegādes

  • MeArm. Šeit izmantots: MeArm Pi no MIME Industries
  • Raspberry Pi 4
  • Google Coral TPU paātrinātājs
  • Adafruit 16 kanālu servomotors
  • daži pārejas kabeļi
  • pēc izvēles: kondensators servo pārsegam, aptuveni 400 µF 4 servos (iesaka Adafruit)
  • 5-6 V barošanas avots servo pārsegam. Es šeit izmantoju veco 6V lādētāju, darbojas arī 4x AA akumulators
  • Mikrofons. Kā mikrofonu es izmantoju vecu Microsoft HD3000 tīmekļa kameru.

1. darbība: sistēmas iestatīšana

Sistēmas iestatīšana
Sistēmas iestatīšana
Sistēmas iestatīšana
Sistēmas iestatīšana

Lejupielādējiet iepriekš konfigurēto Raspian attēlu Google Coral TPU Accelerator no Google Coral Github lapas un instalējiet to µSD kartē. Attēlā ir arī vairāki skriptu paraugi. Iestatiet Pi, kā norādīts.

Instalējiet atslēgvārdu meklētāja piemēru no Google Coral GitHub vietnes, ja tas nav iekļauts attēlā, un visas nepieciešamās programmas. Pievienojiet mikrofonu Pi. Es ieteiktu spēlēt ar “Dzirdošās čūskas” piemēru, lai pārliecinātos, ka viss darbojas.

Lejupielādējiet un instalējiet Adafruit 16 kanālu pārsega programmatūru, kā aprakstīts šeit. Uzstādiet pārsegu un spēlējiet ar Adafruit piemēriem, lai pārliecinātos, ka viss darbojas pareizi.

Lejupielādējiet šim pamācībai pievienotos failus un nokopējiet tos mapē "Projekta atslēgvārdu meklētājs". Fails "commands_v1_MeArm.txt" ir jākopē apakšmapē "config".

Pievienojiet MeArm servoservoratoru pie motora pārsega, kā norādīts. Es izmantoju 15. portu augšup/lejup, 11. portu uz priekšu/atpakaļ, 7. portu pagriezienam un 3. portu satvērēja servos.

Skripta ietvaros, iespējams, būs jāpielāgo katra servo min/center/max vērtības atbilstoši jūsu konfigurācijai. Šie iestatījumi palīdz izvairīties no servo bojājumiem. Iespējams, būs jāmaina arī iekļautie "pozīciju", "transporta1" un "transporta2" saraksti.

Palaidiet skriptu. Līdz šim es to vadīju no IDE.

Ja vēlaties mainīt galvenās frāzes, kas izraisa noteiktu funkciju, atbilstoši jūsu vajadzībām. Pilns pieejamo atslēgas frāžu saraksts ir atrodams konfigurācijas apakšmapes failā "labels_gc2 raw.txt".

Sistēmas latentuma laiks ir aptuveni 1 sekunde, bet daudz kas ir atkarīgs no tā, kuras darbības tiek veiktas. Dažos gadījumos galvenais posms ir jāatkārto, atpazīšanas precizitāte ne vienmēr ir 100%.

2. darbība: ierīces lietošana

Ja viss ir iestatīts un pārbaudīts, varat palaist ierīci.

Pašreizējais ierobežojums ir tāds, ka dotais rīkojums tiek izpildīts atkārtoti, kamēr tas netiek apturēts (izmantojot “apturēt spēli”) vai tiek dots cits rīkojums. Sarežģīti daudzpakāpju uzdevumi, piem. "transport1" (ko izraisa frāze "palaišanas spēle") vienmēr tiek izpildīti pēdējā posmā.

Tātad, pagriežot pa labi, ierīce ar nelieliem soļiem virzīsies pa labi, līdz tā apstāsies vai tiks sasniegta iepriekš iestatītā maksimālā vērtība. “palaišanas spēle”, “nākamā spēle” vai “start_video” sāks virkni kustību, kuras nosaka saraksti, kuros ir norādīti katra servo iestatījumi noteiktā solī. "izlases spēle" būs ierīce, lai pārietu no viena uz otru soli, kas nejauši izvēlēts no iestatījumu saraksta.

Kā redzat pievienotajā videoklipā, es no LEGO uzbūvēju diabolo formas priekšmetu, ko var uzņemt MeArm un pārvietot no vienas vietas uz otru ar iepriekš noteiktu kustību kopumu. Jūs varat definēt savas funkcijas, modificējot sarakstus “transport1” vai “transport2”.

3. darbība: skripts

Šeit uzskaitītais skripts ir modifikācija "Dzirdes čūskas" piemērā no "Projekta atslēgvārdu novērotāja". Piemērs ir samazināts līdz minimumam, pēc tam tika pievienota daļa, kas paredzēta servo vadīšanai, pamatojoties uz programmatūru un piemēriem, kas sniegti Adafruit servodzinējam.

Skripts līdz šim nav optimizēts. Izmantojiet uz savu risku, jūtieties brīvi modificēt un optimizēt.

Papildus python skriptam ir komandas-fails un izmantotais uzlīmes-fails. Ievietojiet to konfigurācijas apakšmapē.

Kā minēts iepriekš, lai pielāgotu skriptu jūsu īpašajai MeArm vai kādai citai ierīcei, var būt nepieciešami vairāki parametru pielāgojumi.

# Autortiesības 2019 Google LLC#

# Licencēts saskaņā ar Apache licenci, versija 2.0 ("licence"); # Jūs nedrīkstat izmantot šo failu, izņemot saskaņā ar licenci. # Jūs varat iegūt licences kopiju vietnē # # href = "https://www.apache.org/licenses/LICENSE-2.0" href = "https://www.apache.org/licenses/LICENSE-2.0" https://www.apache.org/licenses/LICENSE-2.0 # # Ja vien piemērojamie tiesību akti nepieprasa vai rakstiski nav piekrituši, programmatūra #, kas tiek izplatīta saskaņā ar licenci, tiek izplatīta, pamatojoties uz "KĀDA", # BEZ GARANTIJĀM VAI NOSACĪJUMIEM JEBKURA, tieša vai netieša. # Skatiet licenci, lai uzzinātu konkrētās valodas, kas reglamentē atļaujas un # ierobežojumus saskaņā ar licenci. # sākotnējais kods “dzirdes_ čūska” tika mainīts, lai ieviestu MeArm, ko veica Dr H. '' 'Instrukcijas Manā ieviešanā tiek izmantots Raspbery Pi 4 ar Google Coral paātrinātāju un pievienots Adafruit 16 kanālu servodzinējs. MeArm (MIME nozares) servos bija piestiprināti pie pārsega 3., 7., 11. un 15. porta. Lai iegūtu sīkāku informāciju, lūdzu, skatiet pamācību "Dzirdes meistars". Komandas: "pozīcija x", x = no 0 līdz 9, pārvieto ierīci uz noteiktu iepriekš noteiktu pozīciju. "pāriet/iet uz augšu", "pārvietoties/iet uz leju", "iet/pagriezties uz priekšu", "iet/pagriezties atpakaļ", "pagriezties/iet pa kreisi" un "pagriezties/iet pa labi" izraisa lēnu, pakāpenisku kustību dotajā virzienā, "apturēt spēli" pārtrauc kustības. "atvērtā cilne" un "aizvērt cilni" atver vai aizver satvērēju. “Sākt video” liek ierīcei sekot iepriekš noteiktai pozīciju secībai, ko nosaka saraksta pozīcijas. "izlases spēle" rada nejaušu kustību modeli, "pārtraukt spēli" to beidz. "palaišanas spēle" sāk citu kustību sēriju, kas iepriekš definēta sarakstā "transport1", "nākamā spēle" apgrieztā darbība, kuru iepriekš definē "transport2". Izmantojiet uz savu risku. '' 'no _future_ importēt absolūtu_importu no _future_ importa nodaļas no _future_ importēt print_funkciju importēt argparse importēt os no izlases importēšanas randint no pavedienu importēšanas Vītnes importēšanas laiks no edgetpu.basic.basic_engine importēšana BasicEngine importēšanas modeļa importēšanas pygame no pygame.locals importa * importēšanas rindas no izlases importēšana randrange no adafruit_servokit importēšana ServoKit importēšanas dēlis importēšana busio imports adafruit_pca9685 importa laiks i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (kanāli = 16) # iestatīt kanālu skaitu # komplek.servo [0].actuation_range = 160 # kit.servo [0].set_pulse_width_range (1000, 2000) # min, centrs un max iestatījumi up_l = 145 # servo up/down: up md_l = 95 dn_l = 45 augšup_r = 135 # servo uz priekšu/atpakaļ md_r = 90 dn_r = 50 ri_t = 30 # pagrieziena roka pa labi vai pa kreisi: labais stāvoklis md_t = 90 # pagrieziena roka pa labi vai pa kreisi: centra stāvoklis le_t = 150 op_g = 65 # satvērējs atvērts md_g = 90 # satvērējs centrēts cl _g = 130 # satvērējs aizvērts vert = 15 # servo porta numurs, servo uz augšu/uz leju forw = 11 # servo porta numurs, uz priekšu/atpakaļ virzošais servo pagrieziens = 7 # servo ports servo satvēriena pagriešanai = 3 # servo ports satvērienam servo #roku iestatījumu saraksts deviņām pozīcijām pozīcija = [(md_l, md_r, md_t, op_g), (up_l, md_r, ri_t, op_g), (up_l, md_r, md_t, cl_g), (up_l, md_r, le_t, cl_g)), (md_l, md_r, md_t, op_g), (md_l, md_r, md_t, md_g), (md_l, md_r, md_t, cl_g), (dn_l, dn_r, ri_t, op_g), (dn_l, dn, mn), (dn_l, dn_r, le_t, md_g)] # definē 10 bāzes pozīcijas, ko norāda veseli skaitļi 0-9 # transporta procedūras [vert/forward/turn/grip] transport1 = [(140, 70, 65, op_g), (110, 50, 65, op_g), (65, 50, 65, op_g), (65, 70, 65, cl_g), (120, 70, 65, cl_g), #get objekts (100, 70, 135, cl_g), (100, 80, 135, cl_g), (100, 80, 135, md_g), (100, 80, 135, op_g), (140, 70, 135, op_g), (140, 70, 90, op_g)), (140, 70, 65, op_g)]

transport2 = [(140, 70, 65, op_g), (140, 70, 135, op_g), (95, 70, 135, op_g), (95, 80, 135, op_g), (95, 80, 135, cl_g), (110, 70, 135, cl_g), (110, 70, 65, cl_g), (70, 70, 65, cl_g), (70, 70, 65, op_g), (80, 50, 65, op_g)]

deja1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # a "deja"

#pārvietojot MeArm uz nulles pozīciju statuss = [md_l, md_r, md_t, md_g] kit.servo [vert].angle = status [0] kit.servo [forw].angle = status [1] kit.servo [pagrieziens]. leņķis = statuss [2] komplekts.servo [satvēriens].stūris = statuss [3] drukāt (statuss) klase Kontrole (objekts): #Atsaukšanas funkcija def _init _ (sevis, q): pašsajūta._q = q def atzvanīšana (self, komanda): self._q.put (komanda) klases lietotne: def _init _ (self): self._running = True def on_init (self): pygame.init () self.game_started = True self._running = Patiesa atgriešanās True def on_event (self, event): if event.type == pygame. QUIT: self._running = False def MeArmPos (self, atslēgas): # vada MeArm uz iepriekš iestatītām pozīcijām, atslēgvārdi: "position x" key = int (atslēgas) p = position [key] a = p [0] b = p [1] c = p [2] d = p [3] print ("Positions:", key, "vert/forw/turn/grip:", a, "/", b, "/", c, "/", d, "grādi") statuss = [a, b, c, d] # dokumentu pašreizējais statuss drukāt (statuss) # sys.stdout.write ("Position: ", atslēga," pa kreisi/pa labi: ", a,"/", b," grāds ") komplekts.servo [vert].stūris = komplekts.servo [forw].stūris = b komplekts.servo [pagrieziens].stūris = c komplekts.servo [satvēriens].stūris = d laiks.miega (0,5) def DancingMeArm (self): # kontrolē MeArm deju, atslēgvārds: "start_video" dnce = dance1 sp = (len (dnce)) r diapazonā (sp): #pozīciju dejošanas secība, sp soļi dc = dnce [r] p = pozīcija [dc] a = p [0] b = p [1] c = p [2] d = p [3] komplekts.servo [vert].angle = a kit.servo [forw].angle = b kit.servo [pagrieziens].angle = c komplekts.servo [grip].angle = d time.sleep (1) # nosaka kustības ātrumu time.sleep (0.5) # pārtraukums procedūras beigās def TransMeArm1 (self): # kontrolē MeArm transport 1, atslēgvārds: "palaišanas spēle" tr1 = transport1 sp = (len (tr1)) #aprēķiniet soļu skaitu r diapazonā (sp): #pārejiet uz jebkuru soli p = tr1 [r] a = p [0] b = p [1] c = p [2] d = p [3] komplekts. servo [vert].angle = komplekts.servo [forw].angle = b kit.servo [pagrieziens].angle = c komplekts.servo [grip].angle = d print (p) time.sleep (1) # sets kustību ātrums laiks.miegs (0,5) def TransMeArm2 (self): # kontrolē MeArm deju, atslēgvārds: "nākamā spēle" tr2 = transport2 sp = (len (tr2)) r diapazonā (sp): #pozīciju deju secība, sp soļi p = tr2 [r] a = p [0] b = p [1] c = p [2] d = p [3] komplek.servo [vert].angle = a kit.servo [forw].angle = b kit.servo [pagrieziens].angle = c kit.servo [grip].angle = d print (p) time.sleep (1) # nosaka kustību ātrumu time.sleep (0,5)) def RandomMoves (self): # nejauši lec starp iepriekš noteiktām pozīcijām, atslēgvārds: "izlases spēle" dr = randrange (9) # nejauši izvēlas pozīciju p = pozīcija [dr] # nolasa pozīcijas parametrus a = p [0] b = p [1] c = p [2] d = p [3] komplekts.servo [vert].stūris = komplekts.servo [forw].stūris = b komplekts.servo [pagrieziens].stūris = c komplekts.servo [satvēriens].stūris = d laiks.miega (1) # nosaka kustību ātrumu def MoveUp (self): # pacelšanas satvērējs ar maziem soļiem u0 = statuss [0] # lasīt pašreizējo statusu u1 = u0 + 5 # plus x grādi, ja (u1 > up_l): # testi, ja nepārsniedz min/max parametrus uz augšu ", statuss) time.sleep (1) # nosaka ātrumu def MoveDown (self): d 0 = statuss [0] d1 = d0 - 5 # mīnus x grādi, ja (d1 augšup_r): f1 = augšup_r komplekts.servo [forw].stūris = f1 # pārvietot servo statusu [1] = f1 drukāt ("uz priekšu", statuss) time.sleep (1) def MoveBack (self): b0 = statuss [1] b1 = b0 - 5 # mīnus x grādi, ja (b1 le_t): l1 = le_t kit.servo [savukārt].stūris = l1 # pārvietot servo statuss [2] = l1 drukāšana ("pa kreisi", statuss) time.sleep (0.2) def MoveRight (self): r0 = status [2] r1 = r0 - 2 #mīnus x grādi, ja (r1 <ri_t): r1 = ri_t kit.servo [pagrieziens].stūris = r1 # pārvietot servo statusu [2] = r1 drukāt ("pa labi", statuss) time.sleep (0.2) def OpenGrip (self): kit.servo [grip].angle = op_g # iestatiet satvērienu "atvērtā" pozīcijā: "open_tab" time.sleep (0.5) statuss [3] = op_g def CloseGrip (self): kit.servo [grip].angle = cl_g # iestatiet satvērienu "aizvērtā" stāvoklī: " close_tab "time.sleep (0.5) statuss [3] = cl_g def StopMove (self): # neko nedara, bet aptur kustības drukāt (" stop ", status) time.sleep (0.25) def spotter (self, args): engine = BasicEngine (args.model_file) mic = args.mic ja args.mic ir Nav cita int (args.mic) model.classify_audio (mikrofons, dzinējs, labels_file = "config/labels_gc2.raw.txt", commands_file = "config/commands_v1_MeArm.txt", dectection_callback = self._controler.callback, sample_rate_hz = int (args.sample_) int (args.num_frames_hop)) def on_execute (self, args): ja ne self.on_init (): self._running = False q = model.get_queue () self._controler = Kontrole (q) ja nav args.debug_keyboard: t = Pavediens (mērķis = self.spotter, args = (args,)) t.daemon = True t.start () item = -1, kamēr self._running: pygame.event.pump () if args.debug_keyboard: keys = pygame.key.get_pressed () else: try: new_item = q.get (True, 0,1), izņemot rindu. Empty: new_item = Nav, ja new_item nav Nav: item = new_item if (args.debug_keyboard and keys [pygame. K_ESCAPE]) vai vienums == "stop": self._running = False # if (args.debug_keyboard and keys [pygame. K_SPACE]) or item == "go": # self. MeArmPos (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) vai vienums == "labi": # pagriezieties pa labi. MoveRight () if (args.debug_ke yboard un taustiņi [pygame. K_LEFT]) vai vienums == "left": # pagriezieties pa kreisi self. MoveLeft () if (args.debug_keyboard and keys [pygame. K_UP]) or item == "up": self. MoveUp () if (args.debug_keyboard and keys [pygame. K_DOWN]) or item == "down": self. MoveDown () if (args.debug_keyboard and keys [pygame. K_B]) or item == "b": # backwards self. MoveBack () if (args.debug_keyboard and keys [pygame. K_F]) or item == "f": # uz priekšu self. MoveForw () if (args.debug_keyboard and keys [pygame. K_O]) vai item == "o": # open grip: self. OpenGrip () if (args.debug_keyboard and keys [pygame. K_C]) or item == "c": # close grip: self. CloseGrip () if (args.debug_keyboard and keys [pygame. K_S]) vai item == "s": # stop motion: "start_game" self. StopMove () if (args.debug_keyboard and keys [pygame. K_0]) or item == "0": self. MeArmPos (0) ja (args.debug_keyboard and keys [pygame. K_1]) or item == "1": self. MeArmPos (1) if (args.debug_keyboard and keys [pygame. K_2]) vai item == "2": self. MeArmPos (2), ja (args.debug_keyboard and keys [pygame. K_3]) or it em == "3": self. MeArmPos (3) if (args.debug_keyboard and keys [pygame. K_4]) or item == "4": self. MeArmPos (4) if (args.debug_keyboard and keys [pygame. K_5]) vai vienums == "5": self. MeArmPos (5), ja (args.debug_keyboard and keys [pygame. K_6]) or item == "6": self. MeArmPos (6) if (args.debug_keyboard and taustiņi [pygame. K_7]) vai vienums == "7": self. MeArmPos (7) if (args.debug_keyboard and keys [pygame. K_8]) or item == "8": self. MeArmPos (8) if (args.debug_keyboard and keys [pygame. K_9]) or item == "9": self. MeArmPos (9) if (args.debug_keyboard and keys [pygame. K_a]) or item == "d": self. DancingMeArm () #dancing MeArm, uz "next_game", ja (args.debug_keyboard and keys [pygame. K_r]) or item == "r": self. RandomMoves () #random dance "random game" if (args.debug_keyboard and keys [pygame.) # transporta objekta apgrieztā virziens: "next_game" '' 'if (args.debug_keyboard and taustiņi [pygame. K_l]) vai vienums == "l": self. JumpingJack2 (1) #LED mirgo "target" '' 'time.sleep (0.05) self.on_cleanup () if _name_ ==' _main_ ': parser = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'Izmantojiet tastatūru, lai kontrolētu MeArm.', action = 'store_true', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = Lietotne () the_app.on_execute (args)

Ieteicams: