Բովանդակություն:

A Hearing Jumping Jack, Google Coral TPU արագացուցիչ տարբերակ `4 քայլ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչ տարբերակ `4 քայլ

Video: A Hearing Jumping Jack, Google Coral TPU արագացուցիչ տարբերակ `4 քայլ

Video: A Hearing Jumping Jack, Google Coral TPU արագացուցիչ տարբերակ `4 քայլ
Video: Voice Control with Coral Dev Board Mini 2024, Հուլիսի
Anonim
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ
A Hearing Jumping Jack, Google Coral TPU արագացուցիչի տարբերակ

Այն շարժում է վերջույթները, լսում ձեր պատվերները, այն առաջնորդվում է մեքենայական ուսուցման նորագույն տեխնոլոգիայով:

«Լսելու համար ցատկող բաճկոնը» պարզ էլեկտրամեխանիկական ցատկող ժակ է, որը վարում են երկու միկրո սերվերով և շատ պարզ հանդերձանքով ՝ ունենալով LED- ներ ՝ որպես «աչքեր»: Այն կառավարվում է պարզ ձայնային հրամանների միջոցով, որոնք ցույց են տալիս, թե ինը կանխորոշված դիրքերից որն է այն զբաղեցնելու, կամ LED- ը պետք է միացնել կամ անջատել, կամ եթե այն պետք է կատարի կանխորոշված «պար» կամ պատահական շարժումներ:

Համակարգի հիմնական տարրը Google Coral TPU արագացուցիչն է, որը թույլ է տալիս Tensorflow Lite մոդելներն անցանց ռեժիմում գործարկել շատ մեծ արագությամբ, նույնիսկ Raspberry Pi- ի նման «թույլ» համակարգչի վրա: Սա թույլ է տալիս, օրինակ, օբյեկտների արագ նույնականացում և դասակարգում ՝ օգտագործելով RPi տեսախցիկը, ինչպես նաև մեքենայական ուսուցման վրա հիմնված ձայնի ճանաչման գործառույթների տեղական աշխատանքը:

Իմ տեղեկություններով, սա Coral Accelerator- ի ձայնի հայտնաբերման վրա հիմնված ֆիզիկական DIY սարքի առաջին հրապարակված օրինակն է, և կցված կոդի օրինակը կարող է օգտագործվել նաև այլ, ավելի բարդ նախագծերի համար:

Ձայնային հսկողությունը հիմնված է «լսող օձի» օրինակին ՝ «նախագծի հիմնաբառերի նշիչ» (https://github.com/google-coral/project-keyword-spotter), որը վերջերս (2019 թ. Սեպտեմբեր) տեղադրվեց GitHub- ում: Իմ կոնֆիգուրացիայով համակարգը բաղկացած է Raspberry Pi 4 -ից, որը հագեցած է Adafruit 16 ալիքով սերվո գլխարկով, Google Coral TPU արագացուցիչով և վեբ -տեսախցիկով, որն այստեղ օգտագործվում է որպես խոսափող: Jumping Jack- ը նախկինում նկարագրված էր նախորդ հրահանգում, որտեղ այն Google Voice հավաքածուի միջոցով ուղղորդվում էր ձայնային հրամաններ կարդալու համար, կցված է Servo Bonnet- ին ՝ ստորև նկարագրված 2.0 տարբերակում:

Google Voice Kit- ի նախորդ տարբերակը երեք հիմնական սահմանափակում ուներ. Դա կախված էր Google- ի վեբ վրա հիմնված ձայնային ճանաչման ծառայություններից և կարգավորումը համեմատաբար բարդ էր, այն պահանջում էր ինչ-որ կոճակ սեղմել նախքան հրաման տալը, և լուրջ ուշացում եղավ: հրամանը ասելու և համակարգի պատասխանի միջև: Google Coral արագացուցիչի օգտագործումը նվազեցնում է արձագանքման ժամանակը վայրկյանների, անկախ է ինտերնետ կապից և անընդհատ լսում է: Որոշ փոփոխություններով դուք կարող եք օգտագործել այն շատ ավելի բարդ սարքեր կառավարելու համար, ինչպիսին է Jumping Jack- ը, որպես ռոբոտներ կամ մեքենաներ, կամ այն, ինչ կարող եք կառուցել և վերահսկել Raspberry Pi- ով:

Իր ներկայիս տարբերակում Keyword Spotter- ը հասկանում է մոտ 140 կարճ հիմնաբառերի/բառակապակցությունների շարք, որոնք սահմանված են ուղեկցող մոդելային ֆայլում («voice_commands_v0.7_egetpu.tflite») և նկարագրված են առանձին պիտակի ֆայլում («labels_gc2.raw.txt»). Սահմանված ազատ փոփոխվող ֆայլով («commands_v2_hampelmann.txt»), մեր սցենարի կողմից հատուկ օգտագործվող հիմնաբառերը այնուհետև քարտեզագրվում են վիրտուալ ստեղնաշարի վրա ստեղնաշարի վրա, օրինակ. տառերի, թվերի, վեր/վար/ձախ/աջ, crtl+c և այլն:

Այնուհետեւ, օրինակ. pygame.key- ի միջոցով այս «ստեղնաշարի» ընթերցումները կարդացվում և օգտագործվում են `վերահսկելու համար, թե որ գործողությունները պետք է կատարի սարքը, այստեղ` ցատկող բաճկոնը: Մեր դեպքում սա նշանակում է երկու սերվոներին քշել կանխորոշված դիրքեր, կամ LED- ները միացնել կամ անջատել: Քանի որ հիմնաբառերի նշիչն աշխատում է առանձին քայլքով, այն կարող է մշտապես լսել ձեր պատվերները:

Տարբերակ, 21 սեպտեմբերի, 2019 թ

Պարագաներ

Ազնվամորի Պի 4, Պիմորոնիի միջոցով

Google Coral TPU արագացուցիչ, Mouser Germany- ի միջոցով, 72 €

Adafruit 16 Servo Bonnet, Pimoroni- ի միջոցով, մոտ 10 €

www.adafruit.com/product/3416

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

Պիտակների վերնագիր (անհրաժեշտության դեպքում)

www.adafruit.com/product/2223

4x AA մարտկոցի փաթեթ (կամ այլ 5-6 Վ էներգիայի աղբյուր) Servo Bonnet- ի համար

Հին վեբ -տեսախցիկ, որպես խոսափող

Servo- ն վարեց Jumping Jack- ը, ինչպես նկարագրված էր նախորդ հրահանգում: Դիզայնի գծագրերը կցված են հաջորդ քայլին, բայց կարող են ճշգրտումներ պահանջել:

Jumping Jack- ի համար անհրաժեշտ մասեր.

- 3 մմ Forex ափսե

- 2 միկրո սպասարկում

- 2 և 3 մմ պտուտակներ և ընկույզներ

- 2 սպիտակ LED և ռեզիստոր

- մի փոքր մալուխ

Քայլ 1: Սարքի կարգավորում

Սարքի կարգավորում
Սարքի կարգավորում
Սարքի կարգավորում
Սարքի կարգավորում
Սարքի կարգավորում
Սարքի կարգավորում

Jumping Jack- ը կառուցելու համար հետևեք նախորդ հրահանգում տրված ցուցումներին: Ես օգտագործել եմ Forex- ը իմ նախատիպի համար, բայց դուք կարող եք օգտագործել լազերային կտրված ակրիլային կամ նրբատախտակի ափսեներ: Հնարավոր է ՝ ստիպված լինեք կարգավորել դասավորությունը ՝ ըստ ձեր սերվերի չափի և այլն: Փորձեք, արդյոք վերջույթներն ու հանդերձանքը կարող են շարժվել առանց շփման:

Կարգավորեք ձեր Raspberry Pi- ն: Coral Github կայքում կա Raspian պատկեր, որը պարունակում է այն ամենը, ինչ անհրաժեշտ է Coral արագացուցիչը Pi- ով գործարկելու համար և պարունակում է բազմաթիվ նախագծեր ՝ բոլոր պարամետրերն արդեն տեղադրված:

Ստացեք նախագծի հիմնաբառերի նշիչ Google Coral GitHub էջից: Տեղադրեք բոլոր անհրաժեշտ ծրագրակազմը, ինչպես նշված է:

Տեղադրեք տրամադրված ֆայլերը: Տեղադրեք jumping jack python սցենարը նախագծի հիմնաբառերի spotter թղթապանակում և համապատասխան հրամանների ֆայլը config ենթապանակում:

Կցեք Adafruit Servo Bonnet- ը Pi- ին: Քանի որ ես օգտագործում եմ RPI պատյան օդափոխիչի հետ, ես պետք է օգտագործեի GPIO- ի պիտակներ (օրինակ ՝ հասանելի է Pimoroni- ից) `միացումը միացնելու համար: Տեղադրեք բոլոր անհրաժեշտ գրադարանները, ինչպես նշված է Adafruit- ի հրահանգում servo գլխարկի համար:

Կցեք 5-6 վ հոսանքի աղբյուր սերվո գլխարկին: Կցեք սերվերներ և լուսադիոդներ: Ես իմ դեպքում, ես օգտագործել եմ 0 պորտը LED- ների համար և 11 և 15 նավահանգիստները `սերվերի համար:

Ամեն ինչ ստուգելու համար ես խորհուրդ կտայի նախ փորձել նախագծի հիմնաբառերի նշիչ «լսող օձ» և Adafruit servo bonnet օրինակները:

Քայլ 2: Վազում է Jumping Jack- ը

Եթե բոլոր մասերը տեղադրված են և աշխատում են, փորձեք օգտագործել այն: Դուք կարող եք գործարկել սցենարը IDE- ում կամ հրամանի տողում:

«Պաշտոն 0» -ից «դիրք 9» բացականչելը կհանգեցնի umpատկող Jackեքին գրավել կանխորոշված դիրքերից մեկը: Ես սահմանեցի «1» -ը ՝ երկու ձեռքերը վեր (uu), «3» -ը ՝ ձախ վեր, աջ ներքև (ud), «9» ՝ երկու ձեռքերը ներքև (dd) և «5» ՝ երկու ձեռքերը կենտրոնացված (cc):

uu uc ud = 1 2 3

cu cc cd = 4 5 6

du dc dd = 7 8 9

«0» -ը նույնական է «5» -ին: «3» և «8» բառերը շատ լավ չեն ճանաչվում հիմնաբառերի նշագծողի կողմից և կարող են կրկնվել:

Հնարավոր է, որ դուք ստիպված լինեք հարմարեցնել նվազագույն և առավելագույն արժեքները յուրաքանչյուր սերվոյի/կողմի համար, որպեսզի սպասարկողները չարգելափակվեն, այնուհետև չափազանց մեծ էներգիա խլեն:

«հաջորդ խաղը» կսկսի «պարը», այսինքն ՝ դիրքերի սահմանված հաջորդականությունը, մինչդեռ «պատահական խաղը» կսկսի ցատկող Jack- ը ՝ քայլերի պատահական հաջորդականություն կատարելու համար: Երկու դեպքում էլ դրանք հավերժ կգործեն, այնպես որ գուցե ստիպված լինեք դադարեցնել շարժումները, օրինակ. «դիրքի զրո» հրամանով:

«դադարեցնել խաղը» կհանգեցնի «ctrl + c» - ի և կդադարեցնի գործընթացը:

«միացնել» և «անջատել» կարող են օգտագործվել LED- ները միացնելու և անջատելու համար:

Time.sleep- ի արժեքների փոփոխմամբ կարող եք հարմարեցնել շարժումների արագությունը:

Քայլ 3: Կոդը և հրամանների ֆայլը

Այստեղ ներկայացված կոդը «լսող օձ» ծածկագրի փոփոխություն է, որը մաս է կազմում նախագծի հիմնաբառերի նշագծման փաթեթի: Ես պարզապես հանեցի այն ամենը, ինչ անհրաժեշտ չէր իմ դիմումի համար, առանց մանրամասների իրական ընկալման: Improveանկացած բարելավում ողջունելի է:

Այնուհետև ես ավելացրեցի Adafruit Servo Bonnet- ի համար անհրաժեշտ մասերը ՝ հիմնվելով դրանց օրինակելի ֆայլերի վրա:

Thankանկանում եմ շնորհակալություն հայտնել երկու մասի ծրագրավորողներին:

Կոդը կարող է կցվել որպես ֆայլ: Օգտագործեք այն ձեր ռիսկերի վրա, փոփոխեք այն, բարելավեք այն, խաղացեք դրա հետ:

# Հեղինակային իրավունք 2019 Google ՍՊԸ

# # Արտոնագրված է Apache լիցենզիայի ներքո, տարբերակ 2.0 («Լիցենզիա»); # Դուք չեք կարող օգտագործել այս ֆայլը, բացառությամբ Լիցենզիայի պահանջների: # Դուք կարող եք լիցենզիայի պատճենը ձեռք բերել # # https://www.apache.org/licenses/LICENSE-2.0 # # Եթե կիրառելի օրենքով դա չի պահանջվում կամ գրավոր համաձայնություն չկա, լիցենզիայի ներքո տարածված ծրագրակազմը բաշխվում է «ԻՆՉՊԵՍ» ՀԻՄՆԱԴՐԱՄ, # ԱՌԱՆ ԵՐԱՇԽԻՔՆԵՐ ԵՎ ՊԱՅՄԱՆՆԵՐ OFԱՆԿԱԱ ԱՆԿԱԱ express, հստակ կամ ենթադրյալ: # Տեսեք Լիցենզիան Լիցենզիայի ներքո գործող թույլտվությունների և # սահմանափակումների համար: _future_ ներմուծման բացարձակ_ ներմուծում _future_ ներմուծման բաժնից _future_ ներմուծում print_function ներմուծում argparse ներմուծում պատահական ներմուծումից adafruit_servokit ներմուծումից ServoKit ներմուծման տախտակ ներմուծում busio ներմուծում adafruit_pca9685 ներմուծման ժամանակը i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (channel = 16) # set number ալիքների #kit.servo [0].actuation_range = 160 #kit.servo [0].set_pulse_width_range (1000, 2000) #վեր, միջին և ներքևի պարամետրեր ձախ և աջ ձեռքերի համար up_l = 35 md_l = 90 dn_l = 160 up_r = 160 md_r = 90 dn_r = 35

lft = 15 # սերվո պորտի համար, ձախ սերվո (0-8)

rgt = 11 # servo պորտ, աջ servo (0-8) led_channel_0 = hat.channels [0] # LED միացված է նավահանգստում 0 led_channel_0.duty_cycle = 0 # միացնել LED 100% # թևի կարգավորումների ցուցակ ինը դիրքի դիրքի համար = [(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)] # սահմանում է JumpingJack- ի 9 դիրքը ՝ նշված 0-9 պարերով ամբողջ թվերով 1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2, 0) # «պար» դասի վերահսկիչ (օբյեկտ). # Հետադարձ գործառույթ def _init _ (self, q): self._q = q def callback (self հրաման on_event (ինքնուրույն, իրադարձություն). [key] a = p [0] b = p [1] print («Պաշտոնը ՝», բանալին, «ձախ /աջ ՝ ", ա,"/", բ," աստիճան ") # sys.stdout.write (" Պաշտոնը `", բանալին, "ձախ/աջ ՝", ա, "/", բ, "աստիճան") kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.1) def JumpingJack1 (self): # վերահսկում Jumping Jack պարել, հիմնաբառ ՝ «հաջորդ խաղ» dnce = dance1 sp = (լեն (դն) dc = 4 p = դիրք [dc] a = p [0] b = p [1] kit.servo [lft].angle = a kit.servo [rgt]. անկյուն = b time.sleep (0.25) # արագություն է սահմանում շարժումների def JumpingJack2 (ինքնուրույն, ստեղներ). # հսկիչ Jumping Jack LED- եր, հիմնաբառեր. «անջատել/անջատել» led = int (ստեղներ), եթե առաջնորդել է == 1: led_channel_0.duty_cycle = 0xffff # միացնել LED 100% ժամանակը: քուն (0.1) եթե led == 0: led_channel_0.duty_cycle = 0 # անջատեք LED ժամանակը. Քնել (0.1) եթե առաջնորդվի == 2: # թարթել led_channel_0.duty_cycle = 0xffff # միացնել LED 100% ժամանակ: քուն (0.5) led_channel_0: #միացրեք LED 100% ժամանակը: քուն (0.5) led_channel_0.duty_cycle = 0 #միացրեք LED 100% ժամանակը: քուն (0.5) led_channel_0.duty_cycle = 0xffff #միացրեք LED 100% ժամանակը: քուն (0.1) def JumpingJack3 (ինքն.): # վերահսկում Jumping Jack պար, հիմնաբառ ՝ «պատահական խաղ» # համար h միջակայքում (10). dr = randrange (9) p = դիրքը [dr] a = p [0] b = p [1] kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.25) # սահմանում է def spotter (self, args) շարժումների արագությունը. args.mic is not other int (args.mic) model.classify_audio (խոսափող, շարժիչ, labels_file = "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 (self, args):

եթե ոչ self.on_init (): self._running = False q = model.get_queue () self._controler = Controller (q) եթե ոչ 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 (Trueիշտ է, 0.1) բացի հերթից: Դատարկ. New_item = Ոչ մեկը, եթե new_item- ը չկա Ոչ մեկը: item = new_item if (args.debug_keyboard և բանալիներ [pygame. K_ESCAPE]) կամ տարր == "stop": self._running = False # if (args.debug_keyboard և ստեղներ [pygame. K_SPACE]) կամ տարր == "գնալ". # self. JumpingJack0 (7) # if (args.debug_keyboard և բանալիներ [pygame. K_RIGHT]) կամ տարր == "աջ". ինք. JumpingJack0 (6) if (args.debug_keyboard and keys [pygame. K_LEFT]) or item == "left": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_UP]) or item == " վեր ": self. JumpingJack0 (1) եթե (args.debug_keyboard և ստեղներ [pygame. K_DOWN]) կամ տարր ==" ներքև ". self. JumpingJack0 (9) եթե (args.debug_keyboard և բանալիներ [pygam e. K_0]) կամ տարր == "0". self. JumpingJack0 (0) եթե (args.debug_keyboard և բանալիներ [pygame. K_1]) կամ տարր == "1". self. JumpingJack0 (1) if (args) debug_keyboard և բանալիներ [pygame. K_2]) կամ տարր == "2". self. JumpingJack0 (2) եթե (args.debug_keyboard և բանալիներ [pygame. K_3]) կամ տարր == "3" ՝ ինքնակառավարվող: JumpingJack0 (3) եթե (args.debug_keyboard և ստեղներ [pygame. K_4]) կամ տարր == "4": self. JumpingJack0 (4) եթե (args.debug_keyboard և բանալիներ [pygame. K_5]) կամ տարր == "5": ինքն. JumpingJack0 (5) if (args.debug_keyboard and keys [pygame. K_6]) or item == "6": self. JumpingJack0 (6) if (args.debug_keyboard and keys [pygame. K_7]) or item == "7 ": self. JumpingJack0 (7) եթե (args.debug_keyboard և ստեղներ [pygame. K_8]) կամ տարր ==" 8 ": self. JumpingJack0 (8) եթե (args.debug_keyboard և բանալիներ [pygame. K_9]) կամ տարր == "9". Self. JumpingJack0 (9) եթե (args.debug_keyboard և ստեղներ [pygame. K_a]) կամ տարր == "d": self. JumpingJack1 () #պարում Jack, «հաջորդ_խաղի» վրա, եթե (args. debug_keyboard և բանալիներ [pygame. K_j]) կամ տարր == "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 and keys [pygame. K_l]) կամ տարր == "լ". «պատահական խաղ» time.sleep (0.05) self.on_cleanup () if _name_ == '_main_': parser = argparse. ArgumentParser () parser.add_argument ('-debug_keyboard', help = 'Օգտագործել ստեղնաշարը `JumpingJack- ը վերահսկելու համար. ', action =' store_true ', default = False) model.add_model_flags (parser) args = parser.parse_args () the_app = App () the_app.on_execute (args)

Կա նաև «commands_v2_hampelmann.txt» հրամանի կազմաձևման ֆայլ: Փոփոխեք, ինչպես ցանկանում եք: Դա պարզապես «հրաման, բանալին, (ուժ,)» համակցությունների ցուցակ է ՝ հիմնված պիտակի ֆայլի վրա:

դիրք_զրո, 0, դիրք_մեկ, 1, դիրք_երկու, 2, դիրքի_երեք, 3, դիրք_չորս, 4, դիրք_հինգ, 5, դիրքի_ վեց, 6, դիրք_յոթ, 7, դիրքի_յոթ, 8, դիրք_ իններորդ, 9, շարժում_բարձր, վեր, վերևներ, վերևներ, շարժումներ_ջերումներ, վարներ, վարներ, վարներ ներքև, շարժվել_հետև, ձախ, շարժվել_առաջ, աջ, գնալ_հետև, ձախ, գնալ_առաջ, աջ, 0.8 թիրախ, l, համր, z, այո, y, ոչ, n, switch_on, j, switch_off, k, volume_up, վեր, volume_down, down, next_game, d, random_game, r, start_game, s, stop_game, ctrl+c,

Քայլ 4. Լրացուցիչ գաղափարներ և այլ օրինակներ

Ակնհայտ է, որ այս կարգավորումը կարող է օգտագործվել նաև ռոբոտներին կամ այլ սարքերին վերահսկելու համար: Հիմնականում այն ամենը, ինչ կարող է վերահսկվել Raspberry Pi- ի կողմից:

Ես աշխատում եմ MeArm վարելու սցենարի երկարացման վրա և հույս ունեմ, որ կկարողանամ դա ներկայացնել 2019 -ի հոկտեմբերին:

Ես նաև դիտարկում եմ Jumping Jack- ը որպես սեմալիստ օգտագործելը և վերջույթների դիրքի ճանաչման «project posenet» ծրագիրը որպես գործիք ՝ Jumping Jack- ի դիրքերը կարդալու և այն մի շարք թարգմանելու համար: Այս կերպ այն կարող է նույնիսկ հաղորդել տեքստ, քանի որ 2x 8 դիրքերը կարող են ցույց տալ 64 տարբեր թվեր, որոնք ավելի քան բավարար են այբուբենի, թվերի և նշանների համար: Սա, մի փոքր փոփոխված լինելով, կարող է թույլ տալ ֆիզիկական իրագործում առաջարկվող IETF- ի համար «IP- ի տվյալների փոխանցումը սեմալիստական դրոշի ազդանշանային համակարգով (SFSS)» (https://tools.ietf.org/html/rfc4824):

Բայց սա ևս մեկ ուսանելի կլինի: Եվ, քանի որ առաջին փորձերը ցույց տվեցին, որ ցատկող բաճկոնը զգալի փոփոխությունների կարիք կունենա, նախքան արհեստական ինտելեկտի համակարգի կողմից որպես մարդ ճանաչվելը կարող է որոշ ժամանակ պահանջել:

Attentionանկանում եմ ձեր ուշադրությունը հրավիրել հետևյալ ուսանելիի վրա. Object-Finding-Personal-Assistant-Robot-Ft-Raspberry, որտեղ նկարագրված է Raspberry Pi- ի և Google Coral TPU- ի համադրությամբ ռոբոտ գտած օբյեկտ:

Խորհուրդ ենք տալիս: