Мазмұны:

Google Coral TPU үдеткішінің көмегімен есту құралы: 3 қадам
Google Coral TPU үдеткішінің көмегімен есту құралы: 3 қадам

Бейне: Google Coral TPU үдеткішінің көмегімен есту құралы: 3 қадам

Бейне: Google Coral TPU үдеткішінің көмегімен есту құралы: 3 қадам
Бейне: Google Coral TPU USB-Accelarator (Featuring QNAP): Unboxing & Testing 2024, Шілде
Anonim
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы
Google Coral TPU үдеткіші арқылы есту құралы

Төменде мен MeArm-дің дауысты басқарылатын нұсқасын, қысқышы бар xyz роботының кішкентай қолын сипаттағым келеді. Мен MeArm Pi-ді MIME өнеркәсібінен қолдандым, бірақ бұл жүйе MeArm-дің кез келген нұсқасына немесе соған ұқсас сервоприводты құрылғыларға қолданылуы керек.

Google Coral TPU үдеткішін пайдалану Raspberry Pi -де дауысты тану сценарийлерін дербес іске қосуға мүмкіндік береді, осылайша физикалық құрылғыларды бір секундтан төмен кідіріспен айтылатын тапсырыстар бойынша басқаруға болады.

Мұнда сипатталған құрылғы - алдыңғы екі нұсқаулықта сипатталған ұғымдардың жиынтығы мен кеңеюі. Бұл Google Coral дауысты басқарудың бұрын енгізілген қосымшасы, бұл жерде сипатталған секіру ұясы және Google AIY дауысты басқарылатын MeArm -дің айтарлықтай жақсаруы.

Google Voice AIY жүйесін қолданатын дауысты басқарылатын MeArm желіге кіруді қажет етті, іске асыру оңай болмады, дауыстық тапсырыстарды тыңдауды белсендіру үшін түймені басу қажет және ұзақ күту уақыты болды. Қазір қолданылатын Google Coral TPU Accelerator TensorFlowLite модельдерін Raspberry Pi немесе басқа Linux құрылғыларында жоғары жылдамдықпен офлайн режимде іске қосуға мүмкіндік береді. Google Coral Github бетіндегі мысалдардың ішінде дауысты тану жүйесі үшін «есту жыланы» деп аталатын мысал бар, ол 140 түйінді фразаны (2019 ж. Қыркүйек) түсіне алады, олар виртуалды пернелер тіркесімімен салыстырылады. Бұл «пернелер тіркесімдерін» Python -да бағдарламаланған кейбір функцияларды орындаумен байланыстыру дауыстық пәрменмен басқарылатын құрылғыны құруға мүмкіндік береді. Мен жақында бірінші енгізуді, дауыспен басқарылатын электромеханикалық секіруді сипаттадым. Бұл жерде іске асыру сәл күрделі және MeArm-дің барлық төрт сервосын басқаруға мүмкіндік береді, олар MeArm-ды үздіксіз жылжытады немесе оны алдын ала анықталған бірқатарға ауыстыруға мүмкіндік береді. позициялар немесе кейбір күрделі тапсырмаларды орындау.

Мысал ретінде берілген сценарийді қолдана отырып, дауысты басқаратын басқа құрылғыларды құру қарапайым болуы керек, мысалы: робот машиналары немесе көмекші технологиялық қондырғылар.

Жабдықтар

  • MeArm. Мұнда қолданылады: MIME Industries компаниясынан MeArm Pi
  • Таңқурай Pi 4
  • Google Coral TPU үдеткіші
  • Adafruit 16 арналы серво капот
  • кейбір секіргіш кабельдер
  • қосымша: серво капотына арналған конденсатор, шамамен 4 серво үшін 400 мкФ (Adafruit ұсынған)
  • Серво капотына арналған 5-6 В қуат көзі. Мен мұнда ескі 6В зарядтағышты қолдандым, 4х АА батареялар жинағы да жұмыс істейді
  • Микрофон. Мен ескі Microsoft HD3000 веб -камерасын микрофон ретінде қолдандым.

1 -қадам: жүйені орнату

Жүйені баптау
Жүйені баптау
Жүйені баптау
Жүйені баптау

Google Coral GITub бетінен Google Coral TPU Accelerator үшін алдын ала конфигурацияланған Raspian кескінін жүктеп алып, оны µSD картасына орнатыңыз. Суретте сонымен қатар бірнеше мысал сценарийлері бар. Пиді көрсетілгендей орнатыңыз.

Google Coral GitHub сайтынан кілт сөзді анықтаушы мысалын орнатыңыз, егер суретте жоқ болса және барлық қажетті бағдарламалар. Микрофонды Pi -ге қосыңыз. Мен бәрі жұмыс істейтініне көз жеткізу үшін «Естуші жылан» мысалында ойнауды ұсынар едім.

Мұнда сипатталғандай Adafruit 16 арналық капот бағдарламалық жасақтамасын жүктеп алыңыз және орнатыңыз. Барлығының дұрыс жұмыс істеуін қамтамасыз ету үшін капотты орнатыңыз және Adafruit мысалдарымен ойнаңыз.

Бұл нұсқаулыққа тіркелген файлдарды жүктеп алып, оларды «Project Keyword Spotter» қалтасына көшіріңіз. «Commands_v1_MeArm.txt» файлы «config» ішкі қалтасына көшірілуі керек.

MeArm сервоприводтарын servo капотына көрсетілгендей жалғаңыз. Мен жоғары/төмен 15 -портты, алға/артқа 11 -портты, бұрылу үшін 7 -портты және ұстағыш серво үшін 3 -портты қолдандым.

Сценарийде конфигурацияға әр серво үшін min/center/max мәндерін реттеу қажет болуы мүмкін, бұл параметрлер сервоприводтардың зақымдалуын болдыртпауға көмектеседі. Сондай -ақ, енгізілген «позициялар», «көлік1» және «көлік2» тізімдерін өзгерту қажет болуы мүмкін.

Сценарийді іске қосыңыз. Осы уақытқа дейін мен оны IDE -ден басқардым.

Белгілі бір функцияны тудыратын негізгі сөз тіркестерін сіздің қажеттіліктеріңізге сәйкес өзгерткіңіз келсе, қол жетімді KeyPhrases толық тізімі конфигурация ішкі қалтасындағы «labels_gc2 raw.txt» файлында орналасқан.

Жүйенің күту уақыты шамамен 1 секундты құрайды, бірақ көп жағдайда қандай әрекеттер орындалады. Кейбір жағдайларда негізгі кезеңді қайталауға тура келеді, тану дәлдігі әрқашан 100%бола бермейді.

2 -қадам: құрылғыны пайдалану

Егер бәрі реттеліп, тексерілсе, құрылғыны іске қосуға болады.

Ағымдағы шектеу - бұл берілген тапсырма ол тоқтатылмағанша («ойын тоқтату» арқылы) немесе басқа тапсырыс берілгенше қайталанып орындалады. Кешенді көп сатылы тапсырмалар, мысалы. «transport1» («іске қосу ойыны» тіркесімен туындаған) әрқашан соңғы сатыға дейін орындалады.

«Оңға бұрылу» арқылы құрылғы кішкене қадаммен оңға қарай жылжиды немесе тоқтағанша немесе алдын ала орнатылған максималды мәнге жетеді. «іске қосу ойыны», «келесі ойын» немесе «старт_видео» берілген қадамда әр сервоға арналған параметрлері бар тізімдермен анықталатын қозғалыстар сериясын бастайды. «кездейсоқ ойын» құрылғы параметрлер тізімінен кездейсоқ таңдалған бір сатыдан екінші қадамға өтеді.

Қосымша бейнеде көріп тұрғаныңыздай, менде LEGO -дан Diabolo пішінді нысан тұрғызылды, оны MeArm алып, бір жерден екінші жерге алдын ала белгіленген қозғалыстар жиынтығымен тасымалдауға болады. Сіз өзіңіздің функцияларыңызды 'transport1' немесе 'transport2' тізімдерін өзгерту арқылы анықтай аласыз.

3 -қадам: Сценарий

Мұнда тізімделген сценарий «Project Keyword Spotter» -тен «Есту жыланы» мысалының модификациясы. Мысал минимумға дейін қысқартылды, содан кейін бағдарламалық жасақтама мен Adafruit серво капотына арналған мысалдарға сүйене отырып, серво жүргізуге арналған бөлік қосылды.

Сценарий әзірге оңтайландырылмаған. Өз тәуекеліңізге жүгініңіз, өзгертіңіз және оңтайландырыңыз.

Python сценарийінен басқа командалар-файл және қолданылатын Labels-файл бар. Оны конфигурация ішкі қалтасына орналастырыңыз.

Жоғарыда айтылғандай, арнайы MeArm немесе басқа құрылғы үшін сценарийді бейімдеу үшін параметрлерді бірнеше рет реттеу қажет болуы мүмкін.

# Авторлық құқық 2019 Google LLC#

# Apache лицензиясы бойынша лицензияланған, 2.0 нұсқасы («Лицензия»); # сіз бұл файлды Лицензияға сәйкес келмейінше пайдалана алмайсыз. # Сіз Лицензияның көшірмесін # # 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 # # Егер қолданыстағы заңнама талап етпесе немесе жазбаша түрде келісілмесе, Лицензия бойынша таратылған бағдарламалық қамтамасыз ету «КЕПІЛДІКСІЗ» немесе # ШАРТТАРЫ ЖОҚ Қандай да бір мейірімді, ашық немесе жасырын. # Лицензия бойынша тілді реттейтін арнайы рұқсаттар мен # шектеулерді білу үшін Лицензияны қараңыз. # бастапқы «есту_жылы» коды MeArm -ді енгізу үшін доктор Х.мен өзгертілген. '' Нұсқаулар Менің іске асырылымымда Google Coral үдеткіші бар Raspbery Pi 4 және Adafruit 16 арналы серво капот бекітілген. MeArm (MIME өнеркәсібі) сервистері капоттың 3, 7, 11 және 15 порттарына бекітілген. Толық ақпарат алу үшін «Eearing MeArm» нұсқаулығын қараңыз. Командалар: «позиция x», x = 0 -ден 9 -ға дейін, құрылғыны берілген алдын ала анықталған орынға жылжытады. «жылжу/жоғары көтеру», «төмен қарай жүру/түсу», «алға/артқа бұрылу», «артқа/артқа бұру», «солға бұру/кету» және «оңға бұрылу/кету» баяу, қадамдық қозғалысты тудырады. бағыт, «ойынды тоқтат» қозғалыстарды тоқтатады. «ашық қойынды» және «қойынды жабу» ұстағышты ашады немесе жабады. «Бейнені бастау» құрылғыны «позициялар» тізімімен анықталған позициялардың алдын ала орнатылған тәртібін сақтауға шақырады. «кездейсоқ ойын» кездейсоқ қозғалыстар үлгісіне әкеледі, «тоқтату ойыны» оны аяқтайды. «іске қосу ойыны» «көлік1» тізімімен алдын ала анықталған басқа қозғалыстар сериясын бастайды, «келесі ойын» «тасымалдау2» алдын ала анықталған кері операцияны өз тәуекеліңізге қолданыңыз. '' '_future_ импорттау _future_ден _future_ импорттау абсолютті_импорт _future_ импорт print_function импорттау кездейсоқ импорт randint -дан argparse импорт os adafruit_servokit импорттауынан кездейсоқ импорттау ServoKit импорт тақтасы импорт busio импорт adafruit_pca9685 импорт уақыты i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 жиын = ServoKit (арналар = 16) # арналар саны орнатылды # kit.servo [0].actuation_range = 160 # kit.servo [0].set_pulse_width_range (1000, 2000) # min, center and max settings up_l = 145 # servo up/down: жоғары md_l = 95 dn_l = 45 жоғары_r = 135 # servo алға/артқа md_r = 90 dn_r = 50 ri_t = 30 # оңға немесе солға бұрылу: оң жақ позиция md_t = 90 # қолды оңға немесе солға: орталық позиция le_t = 150 op_g = 65 # ұстағыш ашық md_g = 90 # ұстаушы орталықтандырылған кл _g = 130 # ұстағыш жабық вертикаль = 15 # серво портының саны, серво жоғары/төмен forw = 11 # серво портының саны, алға/артқа сервоға айналу = 7 # серво тұтқасын бұруға арналған серво порты = 3 # серво порты servo #тоғыз позиция позициясына арналған қол параметрлерінің тізімі = [(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_d, dn_r,), (dn_l, dn_r, le_t, md_g)] # 0-9 бүтін сандармен көрсетілген 10 базалық позицияны анықтайды # тасымалдау процедуралары [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), #объектіні (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)]

көлік2 = [(140, 70, 65, оп_г), (140, 70, 135, оп_г), (95, 70, 135, оп_г), (95, 80, 135, оп_г), (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)]

би1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # «би»

#maving MeArm to Zero position status = [md_l, md_r, md_t, md_g] kit.servo [vert].angle = status [0] kit.servo [forw].angle = status [1] kit.servo [turn]. бұрыш = күй [2] kit.servo [grip].angle = күй [3] басып шығару (күй) класы Controler (object): #Callback функциясы def _init _ (self, q): self._q = q def callback (өзін, command): self._q.put (command) class App: def _init _ (self): self._running = True def on_init (self): pygame.init () self.game_started = True self._running = True return on_event (өзін -өзі, оқиға): егер event.type == pygame. QUIT: self._running = False def MeArmPos (өздігінен, пернелер): # MeArm -ды алдын ала орнатылған позицияға, кілт сөздерге апарады: «позиция x» key = int (пернелер) p = позиция [кілт] a = p [0] b = p [1] c = p [2] d = p [3] басып шығару («Орындар:», перне, «vert/forw/turn/grip:», a, «/», b, «/», c, «/», d, «градус») күйі = [a, b, c, d] # құжаттың ағымдағы күйін басып шығару (күй) # sys.stdout.write («Орын: «, перне,» солға/оңға: «, а,»/«, б,» дәреже «) жиынтық.серво [төбе].ұңғыл = жинақ = b kit.servo [turn].angle = c kit.servo [grip].angle = d time.sleep (0.5) def DancingMeArm (self): # басқару MeArm биі, кілт сөз: «start_video» dnce = dance1 sp = (len (dnce)) r үшін диапазонда (sp): #позицияның би тәртібі, sp қадамдары dc = dnce [r] p = позиция [dc] a = p [0] b = p [1] c = p [2] d = p [3] kit.servo [vert].angle = a kit.servo [forw].angle = b kit.servo [turn].angle = c kit.servo [grip].angle = d time.sleep (1) # қозғалыстардың жылдамдығын уақытты белгілейді.ұйықтау (0.5) # процедураның соңында үзіліс def TransMeArm1 (өзін): # MeArm тасымалдауды басқарады 1, кілт сөз: «іске қосу ойыны» tr1 = transport1 sp = (len (tr1)) (sp) ауқымындағы r үшін қадамдар санын есептеңіз: #кез келген қадамға өтіңіз p = tr1 [r] a = p [0] b = p [1] c = p [2] d = p [3] жиынтығы. servo [vert].angle = a kit.servo [forw].angle = b kit.servo [turn] қозғалыстардың жылдамдығы time.sleep (0.5) def TransMeArm2 (өзін -өзі): # MeArm биін басқарады, кілт сөз: «келесі ойын» tr2 = transport2 sp = (len (tr2)) r ауқымында (sp)): позициялардың #би тәртібі, sp қадамдары p = tr2 [r] a = p [0] b = p [1] c = p [2] d = p [3] kit.servo [vert].angle = a kit.servo [forw].angle = b kit.servo [turn].angle = c kit.servo [grip].angle = d print (p) time.sleep (1) # қозғалыстардың жылдамдығын уақыт.ұйқы (0,5)) def RandomMoves (өзін): # алдын ала анықталған позициялар арасында кездейсоқ секіреді, кілт сөз: «кездейсоқ ойын» dr = randrange (9) # кездейсоқ позицияны таңдайды p = позиция [dr] # позиция параметрлерін оқиды a = p [0] b = p [1] c = p [2] d = p [3] kit.servo [vert].angle = a kit.servo [forw].angle = b kit.servo [turn].angle = c kit.servo [grip].angle = d time.sleep (1) # қозғалыстардың жылдамдығын орнатады def MoveUp (өздігінен): # ұстағышты кіші қадамдармен көтеру u0 = күй [0] # ағымдағы күйді оқу u1 = u0 + 5 # plus x градус болса, егер (u1 > up_l): # мин/максималды параметрлерден аспаса, # сынақ u1 = up_l # әйтпесе min/max мәніне орнатылады.servo [vert].angle = u1 # серво күйін жылжыту [0] = u1 # күйдің мәнін реттеуді басып шығару (« up «, status) time.sleep (1) # MoveDown (self) жылдамдығын орнатады: d 0 = күй [0] d1 = d0 - 5 # минус x градус, егер (d1 жоғары_r): f1 = жоғары_r kit.servo [forw].angle = f1 # серво күйін жылжыту [1] = f1 басып шығару («алға», күй) time.sleep (1) def MoveBack (self): b0 = status [1] b1 = b0 - 5 # minus x градус, егер (b1 le_t): l1 = le_t kit.servo [turn].angle = l1 # servo жылжыту күй [2] = l1 басып шығару («солға», күй) уақыты.ұйқы (0,2) def MoveRight (өздігінен): r0 = күй [2] r1 = r0 - 2 #минус x градус болса (r1 <ri_t): r1 = ri_t kit.servo [turn].angle = r1 # servo status жылжыту [2] = r1 басып шығару («оңға», күй) time.sleep (0.2) def OpenGrip (self): kit.servo [grip].angle = op_g ұстауды «ашық» күйіне орнатыңыз: «open_tab» time.sleep (0.5) күйі [3] = op_g def CloseGrip (өзін): kit.servo [grip].angle = cl_g # тұтқаны «жабық» күйге орнатыңыз: « close_tab «time.sleep (0.5) күйі [3] = cl_g def StopMove (өзін -өзі): # ештеңе жасамайды, бірақ қозғалыстарды басып шығаруды тоқтатады (» тоқтату «, күй) time.sleep (0.25) def spotter (self, args): қозғалтқыш = BasicEngine (args.model_file) микрофон = args.mic, егер args.mic None else int (args.mic)) model.classify_audio (микрофон, қозғалтқыш, labels_file = «config/labels_gc2.raw.txt», commands_file = «config/commands_v1_MeArm.txt», dectection_callback = self._controler.callback, sample_rate_hzz = num (args_sram_) int (args.num_frames_hop)) def on_execute (өзінше, аргументтер): егер self.on_init () болмаса: self._running = False q = model.get_queue () self._controler = Бақылаушы (q) болмаса args.debug_keyboard: t = Thread (target = self.spotter, args = (args,)) t.daemon = True t.start () item = -1 self._running: pygame.event.pump () if args.debug_keyboard: keys = pygame.key.get_pressed () else: try: new_item = q.get (True, 0.1) from queue. Empty: new_item = new_item None болмаса, жоқ: item = new_item if (args.debug_keyboard және пернелер [pygame. K_ESCAPE]) немесе item == «stop»: self._running = False # if (args.debug_keyboard and key [pygame. K_SPACE]) немесе item == «go»: # self. MeArmPos (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) немесе элемент == «оңға»: # оңға бұрылу. MoveRight () if (args.debug_ke yboard мен пернелер [pygame. K_LEFT]) немесе элемент == «солға»: # солға бұрылу self. MoveLeft () if (args.debug_keyboard және пернелер [pygame. K_UP]) немесе элемент == «жоғары»: self. MoveUp () егер (args.debug_keyboard және пернелер [pygame. K_DOWN]) немесе элемент == «төмен»: self. MoveDown () if (args.debug_keyboard және пернелер [pygame. K_B]) немесе элемент == «b»: # артқа self. MoveBack () if (args.debug_keyboard және пернелер [pygame. K_F]) немесе item == «f»: # forwards self. MoveForw () if (args.debug_keyboard and keys [pygame. K_O]) немесе 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]) немесе item == «s»: # stop motion: «start_game» self. StopMove () if (args.debug_keyboard and key [pygame. K_0]) немесе item == «0»: self. MeArmPos 0: self. MeArmPos (2) if (args.debug_keyboard және пернелер [pygame. K_3]) немесе em == «3»: self. MeArmPos (3) if (args.debug_keyboard and keys [pygame. K_4]) немесе item == «4»: self. MeArmPos (4) if (args.debug_keyboard and keys [pygame. K_5]) немесе элемент == «5»: self. MeArmPos (5) if (args.debug_keyboard and key [pygame. K_6]) немесе item == «6»: self. MeArmPos (6) if (args.debug_keyboard and пернелер [pygame. K_7]) немесе item == «7»: self. MeArmPos (7) if (args.debug_keyboard and keys [pygame. K_8]) немесе item == «8»: self. MeArmPos (8) if (args.debug_keyboard және пернелер [pygame. K_9]) немесе элемент == «9»: self. MeArmPos (9) if (args.debug_keyboard and key [pygame. K_a]) немесе item == «d»: self. DancingMeArm () #Dansing MeArm, «next_game» -де if (args.debug_keyboard and keys [pygame. K_r]) or item == «r»: self. RandomMoves () #кездейсоқ би «кездейсоқ ойын» егер (args.debug_keyboard мен пернелер [pygame. K_j]) немесе item == «j»: self. TransMeArm1 () # көлік нысаны: «түскі ойын» егер (args.debug_keyboard және пернелер [pygame. K_k]) немесе элемент == «k»: self. TransMeArm2 () # көлік объектісінің кері бағыты: «next_game» '' 'if (args.debug_keyboard және пернелер [pygame. K_l]) немесе элемент == «l»: self. JumpingJack2 (1) #LED жыпылықтайды «мақсат» '' 'уақыт.ұйқы (0.05) self.on_cleanup () егер _name_ ==' _main_ ': талдағышы = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'MeArm басқару үшін пернетақтаны пайдаланыңыз.', action = 'store_true', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)

Ұсынылған: