Orodha ya maudhui:

Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral: Hatua 4
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral: Hatua 4

Video: Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral: Hatua 4

Video: Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral: Hatua 4
Video: Чуи, мы дома! ► 2 Прохождение Star Wars Jedi: Fallen Order 2024, Novemba
Anonim
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU
Jack ya Kuruka ya Kusikia, Toleo la Accelerator ya Google Coral TPU

Inasonga viungo vyake, inasikiliza maagizo yako, inaongozwa na teknolojia ya kisasa zaidi ya kujifunza mashine

"Kusikia Kuruka Jack" ni rahisi kuruka Jack ya kuruka kwa elektroniki, inayoendeshwa na servos mbili ndogo na gia rahisi sana, ikiwa na LED kama "macho". Inadhibitiwa na amri rahisi za sauti zinazoonyesha ni yapi kati ya nafasi tisa zilizofafanuliwa itachukua, au ikiwa LED inapaswa kuwashwa au kuzimwa, au ikiwa itafanya "densi" iliyofafanuliwa au seti ya mpangilio.

Kipengele cha msingi cha mfumo ni kichocheo cha Google Coral TPU, ambayo inaruhusu kuendesha modeli za Tensorflow Lite nje ya mtandao na kasi kubwa sana, hata kwenye kompyuta "dhaifu" kama Raspberry Pi. Hii inaruhusu k.m. kitambulisho cha haraka cha uainishaji na uainishaji kwa kutumia kamera ya RPi, lakini pia kuendesha kazi za utambuzi wa sauti zinazotegemea mashine.

Kwa ufahamu wangu huu ni mfano wa kwanza kuchapishwa kwa kifaa cha DIY cha kugundua sauti ya Coral Accelerator, na mfano wa nambari iliyoambatanishwa pia inaweza kutumika kwa miradi mingine ngumu zaidi.

Udhibiti wa sauti unategemea mfano "nyoka anayesikia" katika "kipengee cha neno muhimu la mradi" (https://github.com/google-coral/project-keyword-spotter) ambayo hivi karibuni (Septemba 2019) iliwekwa kwenye GitHub. Katika usanidi wangu, mfumo huo unajumuisha Raspberry Pi 4 iliyo na Adafruit 16 ya servo bonnet, Google Coral TPU Accelerator na kamera ya wavuti, hapa inayotumika kama kipaza sauti. Kuruka Jack ilikuwa imeelezewa hapo awali katika maandishi ya awali, ambapo iliendeshwa na kitanda cha Google Voice kusoma amri za sauti, imeambatanishwa na Servo Bonnet katika toleo la 2.0 lililoelezewa katika yafuatayo.

Toleo la awali la Google Voice Kit lilikuwa na mapungufu matatu: ilikuwa kulingana na huduma za utambuzi wa sauti za Google wavuti na usanidi ulikuwa ngumu sana, ilihitaji kubonyeza kitufe cha aina fulani kabla ya kutoa amri, na kulikuwa na ucheleweshaji mkubwa kati ya kusema amri na majibu ya mfumo. Kutumia kichocheo cha Google Coral hupunguza muda wa kujibu hadi sekunde, inajitegemea unganisho la mtandao na inasikiliza kila wakati. Kwa marekebisho kadhaa unaweza kuitumia kudhibiti vifaa ngumu zaidi kama Kuruka Jack, kama roboti au magari, au chochote unachoweza kujenga na kudhibiti na Raspberry Pi.

Katika toleo lake la sasa Keyword Spotter inaelewa seti ya takriban maneno fupi 140 / misemo muhimu, iliyoelezewa katika faili ya mfano inayoambatana ("voice_commands_v0.7_egetpu.tflite") na kuelezewa katika faili tofauti ya lebo ("labels_gc2.raw.txt"). Imefafanuliwa na faili inayoweza kubadilika kwa uhuru ("Command_v2_hampelmann.txt"), maneno muhimu yanayotumiwa haswa na hati yetu kisha yamepangwa kwa viwambo vya kibodi kwenye kibodi, n.k. kwa herufi, nambari, juu / chini / kushoto / kulia, crtl + c, et cetera.

Kisha, k.m. kutumia pygame.key, "vitufe" hivi vinasomwa na hutumiwa kudhibiti ni vitendo vipi vya kifaa, hapa jack ya kuruka, itafanya. Kwa upande wetu hii inamaanisha kuendesha servos mbili kwenye nafasi zilizotanguliwa, au kuwasha au kuzima taa za taa. Wakati neno kuu linaloendesha kwa kukanyaga tofauti, linaweza kusikiliza maagizo yako kabisa.

Toleo la Septemba 21, 2019

Vifaa

Raspberry Pi 4, kupitia Pimoroni

Accelerator ya Coral TPU, kupitia Mouser Ujerumani, 72 €

Adafruit 16 Servo Bonnet, kupitia Pimoroni, karibu 10 €

www.adafruit.com/product/3416

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

Kichwa cha Stacker (ikiwa inahitajika)

www.adafruit.com/product/2223

Pakiti ya betri ya 4x AA (au chanzo kingine cha nguvu cha 5-6V) kwa Servo Bonnet

Kamera ya wavuti ya zamani, kama kipaza sauti

Servo inaendeshwa na Kuruka Jack, kama ilivyoelezewa hapo awali. Michoro ya mpangilio imeambatanishwa na hatua inayofuata, lakini inaweza kuhitaji marekebisho.

Sehemu zinazohitajika za Kuruka Jack:

- 3 mm Sahani ya Forex

- 2 servos ndogo

- 2 na 3 mm screws na karanga

- 2 LED nyeupe na kontena

- kebo kidogo

Hatua ya 1: Kuweka Kifaa

Kuweka Kifaa
Kuweka Kifaa
Kuweka Kifaa
Kuweka Kifaa
Kuweka Kifaa
Kuweka Kifaa

Ili kujenga Kuruka Jack, tafadhali fuata viashiria vilivyopewa katika maelezo ya awali. Nilitumia Forex kwa mfano wangu, lakini unaweza kutumia laser kukata akriliki au sahani za plywood. Unaweza kulazimika kurekebisha mpangilio kulingana na saizi ya servos yako nk Jaribu ikiwa viungo na gia zinaweza kusonga bila msuguano.

Sanidi Raspberry yako Pi. Kwenye wavuti ya Coral Github, kuna picha ya Raspian inayopatikana ambayo ina kila kitu kinachohitajika kuendesha kiboreshaji cha Coral kwenye Pi na ina miradi mingi, na mipangilio yote tayari iko.

Pata mtangazaji wa neno kuu kutoka kwa Google Coral GitHub ukurasa. Sakinisha programu zote zinazohitajika kama ilivyoonyeshwa.

Sakinisha faili zilizotolewa. Weka hati ya kuruka ya jack python kwenye folda ya neno kuu la mradi na faili ya amri zinazofanana kwenye folda ndogo ya usanidi.

Ambatisha Adafruit Servo Bonnet kwa Pi. Kama ninatumia nyumba ya RPI na shabiki, nilihitaji kutumia vibandiko vya GPIO (k.m. inapatikana kutoka Pimoroni) kuwezesha unganisho. Sakinisha maktaba zote zinazohitajika, kama ilivyoonyeshwa kwenye maagizo ya Adafruit ya bonnet ya servo.

Ambatisha chanzo cha nguvu cha 5-6V kwenye bonnet ya servo. Ambatisha servos na LEDs. Mimi kesi yangu, nilitumia bandari 0 kwa LED na bandari 11 na 15 kwa servos.

Kuangalia kila kitu, ningependekeza kujaribu kujaribu neno kuu la mradi "mfano wa kusikia nyoka" na mifano ya Adafruit servo bonnet kwanza.

Hatua ya 2: Kuendesha Jack ya Kuruka

Ikiwa sehemu zote zimewekwa na zinaendesha, jaribu kuitumia. Unaweza kuendesha hati kwenye IDE au kutoka kwa laini ya amri.

Kupiga kelele "nafasi 0" hadi "nafasi ya 9" kutamsha Kuruka Jack kuchukua moja ya nafasi zilizotanguliwa. Nilifafanua "1" kama mikono yote miwili juu (uu), "3" kama kushoto juu, kulia chini (ud), "9" kama mikono yote chini (dd) na "5" kama mikono yote miwili iko katikati (cc).

uu uc ud = 1 2 3

cu cc cd = 4 5 6

du dc dd = 7 8 9

"0" inafanana na "5". "3" na "8" hazijatambuliwa vizuri na mtangazaji wa neno kuu na huenda ikalazimika kurudiwa.

Inabidi ubadilishe viwango vya chini na vya juu kwa kila servo / upande ili servos zisizuiliwe na kisha kuchora nguvu nyingi.

"mchezo ujao" utaanza "densi", i.e.mfuatano uliowekwa wa nafasi, wakati "mchezo wa nasibu" utaanza Kuruka Jack kufanya mlolongo wa harakati. Katika visa vyote viwili vitaendesha milele, kwa hivyo italazimika kuacha harakati, n.k. na amri ya "nafasi sifuri".

"acha mchezo" itaibua "ctrl + c" na kusimamisha mchakato.

"washa" na "zima" inaweza kutumika kuwasha na kuzima taa za taa.

Kwa mabadiliko ya maadili ya saa. Unaweza kulala kasi ya harakati.

Hatua ya 3: Kanuni na Faili ya Amri

Nambari iliyowasilishwa hapa ni mabadiliko ya nambari ya "nyoka inayosikia" ambayo ni sehemu ya kifurushi cha neno kuu la mradi. Niliondoa tu chochote ambacho hakikuwa cha lazima kwa ombi langu, bila uelewa wowote wa kweli. Maboresho yoyote yanakaribishwa.

Kisha nikaongeza sehemu zinazohitajika kwa Adafruit Servo Bonnet, kulingana na faili zao za mfano.

Ningependa kuwashukuru waandaaji wa sehemu zote mbili.

Nambari inaweza kupatikana ikiwa imeambatishwa kama faili. Tumia kwa hatari zako mwenyewe, urekebishe, uiboresha, ucheze nayo.

# Hakimiliki 2019 Google LLC

# # Leseni chini ya Leseni ya Apache, Toleo la 2.0 ("Leseni"); # huwezi kutumia faili hii isipokuwa kwa kufuata Leseni. # Unaweza kupata nakala ya Leseni kwa # # https://www.apache.org/licenses/LICENSE-2.0 # # Isipokuwa inavyotakiwa na sheria inayotumika au kukubaliwa kwa maandishi, programu # iliyosambazwa chini ya Leseni inasambazwa kwenye MAMBO "YA KILA" # Angalia Leseni ya lugha maalum inayosimamia ruhusa na mapungufu # chini ya Leseni. kutoka _future_ import absolute_import from _future_ import division from _future_ import print_function import argparse import os from random random randint from threading import Thread import time from edgetpu.basic.basic_engine kuagiza BasicEngine kuagiza mtindo wa kuagiza pygame kutoka kwa pygame. kutoka kwa adafruit_servokit kuagiza bodi ya kuagiza ServoKit kuagiza busio kuagiza adafruit_pca9685 wakati wa kuagiza i2c = busio. I2C (bodi. SCL, bodi. SDA) kofia = adafruit_pca9685. ya vituo # kit.servo [0].actuation_range = 160 # kit.servo [0].set_pulse_width_range (1000, 2000) # juu, katikati na chini mipangilio ya mikono ya kushoto na kulia up_l = 35 md_l = 90 dn_l = 160 up_r = 160 md_r = 90 dn_r = 35

lft = 15 # idadi ya bandari ya servo, servo ya kushoto (0-8)

rgt = 11 # idadi ya bandari ya servo, servo ya kulia (0-8) led_channel_0 = kofia. njia [0] # LED imewekwa kwenye bandari 0 led_channel_0.duty_cycle = 0 #washa LED 100% # orodha ya mipangilio ya mikono kwa nafasi tisa za nafasi = [(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, juu_r), (dn_l, md_r), (dn_l, dn_r)] # inafafanua nafasi 9 za KurukaJack, iliyoonyeshwa na nambari 0-9 densi1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # Mdhibiti wa darasa la "densi" (kitu): #Callback function def _init _ (self, q): self._q = q def callback (self, amri): self._q.put (amri) Programu ya darasa: def _init _ (self): self._running = True def on_init (self): pygame.init () self.game_started = True self._running = True Return True def on_event (self, event): if event.type == pygame. QUIT: self._running = Fal def def JumpingJack0 (self, keys): # vidhibiti Kuruka Jack, maneno: "position x" key = int (funguo) p = msimamo [ufunguo] a = p [0] b = p [1] chapisha ("Nafasi:", ufunguo, "kushoto / kulia: ", a," / ", b," degree ") # sys.stdout.write (" Nafasi: ", ufunguo," kushoto / kulia: ", a," / ", b," degree ") kit.servo [lft].angle = kit.servo [rgt].angle = b time. kulala (0.1) def JumpingJack1 (self): # vidhibiti Kuruka Jack ngoma, neno kuu: "mchezo ujao" dnce = dance1 sp = (len (dnce)) kwa r katika masafa (sp): # mpangilio wa kucheza wa nafasi, sp hatua dc = dnce [r] ikiwa (dc haiko katika masafa (10)): # chapa ("kosa la kuingiza katika nafasi", sp) dc = 4 p = msimamo [dc] a = p [0] b = p [1] kit.servo [lft].angle = kit.servo [rgt].angle = b time. kulala (0.25) # huweka kasi ya harakati def JumpingJack2 (ubinafsi, funguo): # vidhibiti Kuruka Jack LEDs, maneno: "washa / zima" led = int (funguo) ikiwa imeongozwa == 1: led_channel_0.duty_cycle = 0xffff # washa mwangaza saa 100%. (0.1) ikiwa inaongozwa =.duty_cycle = 0 #washa LED saa 100%. lala (0.5) led_channel_0.duty_cycle = 0xffff #washa saa 100% za LED. lala (0.5) led_channel_0.duty_cycle = 0 #washa saa 100% ya saa. lala (0.5) led_channel_0.duty_cycle = 0xffff #washa saa 100% za LED. lala (0.1) def JumpingJack3 (binafsi Udhibiti # Densi ya kuruka ya Jack, neno kuu: "mchezo wa nasibu" # kwa h katika masafa (10): dr = randrange (9) p = msimamo [dr] a = p [0] b = p [1] kit.servo [lft]. mstatili = kit.servo [rgt]. pembe = b wakati. kulala (0.25) # huweka kasi ya harakati def spotter (self, args): engine = BasicEngine (args.model_file) mic = args.mic if args.mic ni Hakuna mwingine int (args.mic) model.classify_audio (mic, engine, labels_file = "config / labels_gc2.raw.txt", Command_file = "config / Command_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 (binafsi, args):

ikiwa sio ubinafsi. t. daemon = Kweli t.start () item = -1 wakati ubinafsi._kimbia: pygame.event.pump () ikiwa args.debug_keyboard: keys = pygame.key.get_pressed () mwingine: jaribu: new_item = q.get (Kweli, 0.1) isipokuwa foleni. Dalili: new_item = Hakuna ikiwa new_item sio Hakuna: item = new_item ikiwa (args.debug_keyboard na funguo [pygame. K_ESCAPE]) au item == "stop": self._running = False # if (args.debug_keyboard na funguo [pygame. K_SPACE]) au kitu == "go": # self. JumpingJack0 (7) # ikiwa (args.debug_keyboard na funguo [pygame. K_RIGHT]) au kipengee == "kulia": ubinafsi. JumpingJack0 (6) ikiwa (args.debug_keyboard na funguo [pygame. K_LEFT]) au kitu == "kushoto": self. JumpingJack0 (4) ikiwa (args.debug_keyboard na funguo [pygame. K_UP]) au kipengee == " juu ": self. JumpingJack0 (1) ikiwa (args.debug_keyboard na funguo [pygame. K_DOWN]) au kitu ==" chini ": self. JumpingJack0 (9) ikiwa (args.debug_keyboard na funguo [pygam e. debug_keyboard na funguo [pygame. K_2]) au kitu == "2": self. JumpingJack0 (2) ikiwa (args.debug_keyboard na funguo [pygame. K_3]) au kipengee == "3": self. JumpingJack0 (3) ikiwa (args.debug_keyboard na funguo [pygame. K_4]) au kitu == "4": self. JumpingJack0 (4) ikiwa (args.debug_keyboard na funguo [pygame. K_5]) au bidhaa == "5": self. JumpingJack0 (5) ikiwa (args.debug_keyboard na funguo [pygame. K_6]) au kitu == "6": self. JumpingJack0 (6) ikiwa (args.debug_keyboard na funguo [pygame. K_7]) au kitu == "7. == "9". debug_keyboard na funguo [pygame. K_j]) au kitu == "j": self. JumpingJack2 (0) #LED on, ON " switch_on "ikiwa (args.debug_keyboard na funguo [pygame. K_k]) au kipengee ==" k ": self. JumpingJack2 (1) #LED imezimwa, kwenye" swithch off "ikiwa (args.debug_keyboard na vitufe [pygame. K_l] au kitu == "l": self. JumpingJack2 (1) #LED blink "lengo" ikiwa (args.debug_keyboard na funguo [pygame. K_r]) au bidhaa == "r": self. JumpingJack3 () # ngoma ya nasibu "mchezo wa kubahatisha" wakati. kulala (0.05) self.on_cleanup () ikiwa _name_ == '_main_': parser = argparse. ArgumentParser () parser.add_argument ('- debug_keyboard', help = 'Tumia kibodi kudhibiti JumpingJack. ', action =' store_true ', default = False model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)

Kuna pia faili ya usanidi wa amri "Command_v2_hampelmann.txt". Rekebisha jinsi unavyopenda. Ni orodha tu ya mchanganyiko wa "amri, ufunguo, (nguvu,)", kulingana na lebo ya faili.

nafasi_zero, 0, msimamo_moja, 1, nafasi_ mbili, 2, nafasi_ tatu, tatu, nafasi_nne, 4, nafasi_ tano, 5, nafasi_si sita, 6, nafasi_sa saba, 7, nafasi_ nane, 8, nafasi_nane, 9, songa_ juu, juu, kwenda_up, juu, songa_ chini, chini, kwenda chini, chini, songa_ nyuma, kushoto, songa mbele, kulia, kwenda_ nyuma, kushoto, kwenda_ mbele, kulia, lengo la 0.8, l, bubu, z, ndio, y, hapana, n, switch_on, j, switch_off, k, volume_up, juu, volume_down, chini, mchezo ujao, d, mchezo_wa bahati nasibu, r, mchezo wa kuanza, s, mchezo wa kusimamisha, ctrl + c,

Hatua ya 4: Mawazo zaidi na Mifano mingine

Ni dhahiri kabisa kuwa mpangilio huu unaweza pia kutumiwa kudhibiti roboti au vifaa vingine. Kimsingi kila kitu kinachoweza kudhibitiwa na Raspberry Pi.

Ninafanya kazi kwenye ugani wa hati ya kuendesha MeArm, na natumai kuweza kuwasilisha hii mnamo Oktoba 2019.

Ninafikiria pia kutumia Jumping Jack kama semaphore, na kutumia mpango wa "mradi posenet" mpango wa utambuzi wa nafasi kama chombo cha kusoma nafasi za Jumping Jack na kuitafsiri iwe nambari. Kwa njia hii inaweza hata kuwasiliana na maandishi, ikipewa nafasi 2x 8 inaweza kuonyesha nambari 64 tofauti, zaidi ya kutosha kwa alfabeti, nambari na ishara. Hii inaweza kuwezesha, wakati ikibadilishwa kidogo, utambuzi wa mwili wa IETF iliyopendekezwa "Uhamisho wa Takwimu za IP juu ya Mfumo wa Kuashiria Bendera ya Semaphore (SFSS)" (https://tools.ietf.org/html/rfc4824).

Lakini hii itakuwa nyingine inayoweza kufundishwa. Na, kama majaribio ya kwanza yalionyesha kwamba jack ya kuruka itahitaji marekebisho muhimu kabla ya kutambuliwa kama ya kibinadamu na mfumo wa AI inaweza kuhitaji muda.

Ningependa kuteka mawazo yako kwa yafuatayo yafundishwayo: Kutafuta-Kutafuta-Msaidizi-wa-Robot-Ft-Raspberry, ambapo kitu kinachopata roboti inayotumia mchanganyiko wa Raspberry Pi na Google Coral TPU imeelezewa.

Ilipendekeza: