Мазмұны:

Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы: 4 қадам
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы: 4 қадам

Бейне: Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы: 4 қадам

Бейне: Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы: 4 қадам
Бейне: ҚАҒАЗДАН ЖАРҚАНАТ ЖАСАУ | ORIGAMI BAT | ОРИГАМИ ЛЕТУЧИЙ МЫШЬ 2024, Шілде
Anonim
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы
Есту секіретін ұя, Google Coral TPU үдеткішінің нұсқасы

Ол аяқ -қолын қозғалтады, сіздің тапсырыстарыңызды тыңдайды, ол машинаны оқытудың соңғы технологиясымен басқарылады

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

Жүйенің негізгі элементі Google Coral TPU үдеткіші болып табылады, ол Tensorflow Lite модельдерін офлайн режимде өте жоғары жылдамдықта, тіпті Raspberry Pi сияқты «әлсіз» компьютерде іске қосуға мүмкіндік береді. Бұл мүмкіндік береді, мысалы RPi камерасының көмегімен объектілерді жылдам анықтау және жіктеу, сонымен қатар машиналық оқытуға негізделген дауысты тану функцияларын іске қосу үшін.

Менің білуімше, бұл Coral Accelerator дауысты анықтайтын физикалық DIY құрылғысына арналған бірінші жарияланған мысал, және берілген код үлгісі басқа күрделі жобаларға қолданылуы мүмкін.

Дауысты басқару жақында (2019 жылдың қыркүйек айында) GitHub-да орналастырылған «жобаның кілт сөзін анықтаушыдағы» (https://github.com/google-coral/project-keyword-spotter) «есту жыланы» мысалына негізделген. Менің конфигурациямда жүйе Rafaberry Pi 4 -тен тұрады, онда Adafruit 16 арналы серво -капот, Google Coral TPU үдеткіші және веб -камера бар, мұнда микрофон ретінде пайдаланылады. Jumping Jack туралы алдыңғы нұсқаулықта сипатталған болатын, онда ол Google Voice жиынтығымен дауыстық командаларды оқуға арналған, төменде сипатталған 2.0 нұсқасында Servo Bonnet -ке бекітілген.

Google Voice жиынтығының алдыңғы нұсқасында үш негізгі шектеулер болды: бұл Google-дің дауысты тану қызметтеріне байланысты болды және орнату салыстырмалы түрде күрделі болды, сіз команда бермес бұрын қандай да бір түймені басуыңыз керек еді және елеулі кідіріс болды. команданы айту мен жүйенің жауабы арасында. Google Coral үдеткішін қолдану жауап беру уақытын бірнеше секундқа қысқартады, интернетке қосылмаған және үнемі тыңдайды. Кейбір өзгертулермен сіз оны роботтар немесе автомобильдер сияқты Rumpberry Jack сияқты күрделірек құрылғыларды басқару үшін немесе Raspberry Pi көмегімен басқаруға болатын нәрсені басқару үшін қолдана аласыз.

Ағымдағы нұсқада Keyword Spotter ілеспе модельдік файлда анықталған («voice_commands_v0.7_egetpu.tflite») және бөлек затбелгі файлында сипатталған («labels_gc2.raw.txt») 140 -қа жуық қысқа кілт сөздердің/кілт сөз тіркестерінің жиынтығын түсінеді.. Еркін өзгертілетін файлмен анықталған («commands_v2_hampelmann.txt»), біздің сценарийіміз арнайы қолданатын кілт сөздер виртуалды пернетақтадағы пернелер тіркесімімен салыстырылады, мысалы. әріптер, сандар үшін, жоғары/төмен/солға/оңға, crtl+c және т.б.

Содан кейін, мысалы pygame.key көмегімен бұл «пернелер тіркесімдері» оқылады және құрылғы, осында секіру ұясы қандай әрекеттерді орындайтынын бақылау үшін қолданылады. Біздің жағдайда бұл екі сервоприводты алдын ала анықталған орынға қоюды немесе жарық диодты қосуды немесе өшіруді білдіреді. Spotter кілт сөзі бөлек протекторда жұмыс істейтіндіктен, ол сіздің тапсырыстарыңызды үнемі тыңдай алады.

Нұсқа 21 қыркүйек, 2019 ж

Жабдықтар

Raspberry Pi 4, Pimoroni арқылы

Google Coral TPU Accelerator, 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

Servo Bonnet үшін 4x АА батарея жиынтығы (немесе басқа 5-6В қуат көзі)

Ескі веб -камера, микрофон ретінде

Алдыңғы нұсқаулықта сипатталғандай, серводты секіретін Джек. Орналасу сызбалары келесі қадамға бекітілген, бірақ түзетулер қажет болуы мүмкін.

Секіру үшін қажетті бөлшектер:

- 3 мм форекс тақтасы

- 2 микросерво

- 2 және 3 мм бұрандалар мен гайкалар

- 2 ақ жарық диодты және резистор

- аздап кабель

1 -қадам: құрылғыны реттеу

Құрылғыны реттеу
Құрылғыны реттеу
Құрылғыны реттеу
Құрылғыны реттеу
Құрылғыны реттеу
Құрылғыны реттеу

Секіру ұясын салу үшін алдыңғы нұсқаулықта берілген нұсқауларды орындаңыз. Мен Forex -ті прототипім үшін қолдандым, бірақ сіз лазермен кесілген акрил немесе фанер плиталарын қолдана аласыз. Орналасуды серво өлшеміне сәйкес реттеу қажет болуы мүмкін. Аяқтар мен беріліс үйкеліссіз қозғала алатынын тексеріңіз.

Raspberry Pi орнатыңыз. Coral Github сайтында Pi -де Coral үдеткішін іске қосу үшін қажет нәрсенің бәрі бар және көптеген жобалар бар, барлық параметрлер орнатылған распийлік сурет бар.

Google Coral GitHub бетінен жобаның кілт сөзін анықтаушыны алыңыз. Барлық қажетті бағдарламалық жасақтаманы көрсетілгендей орнатыңыз.

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

Adafruit Servo Bonnet -ті Pi -ге бекітіңіз. Мен желдеткішпен RPI корпусын қолданатындықтан, қосылуды қосу үшін GPIO стекерлерін (мысалы, Pimoroni -ден алуға болады) пайдалану керек болды. Adafruit серво капотына арналған нұсқаулықта көрсетілгендей, барлық қажетті кітапханаларды орнатыңыз.

Серво капотына 5-6В қуат көзін қосыңыз. Серверлер мен жарықдиодты бекітіңіз. Менің жағдайым, мен светодиоды үшін 0 портын, ал серво үшін 11 және 15 портын қолдандым.

Барлығын тексеру үшін мен алдымен «естуші жылан» проекторының кілт сөзін және Adafruit сервопривожниктерінің мысалдарын қолдануға кеңес берер едім.

2 -қадам: секіргішті іске қосу

Егер барлық бөлшектер орнатылып, жұмыс істеп тұрса, оны қолдануға тырысыңыз. Сіз сценарийді IDE немесе пәрмен жолынан іске қоса аласыз.

«0 позициясын» «9 позициясына» айқайлау секіргішті алдын ала анықталған позициялардың бірін алуға итермелейді. Мен «1» -ді екі қолды жоғары (uu), «3» -ті жоғары жоғары, оңға -төмен (ud), «9» -ды екі қолды төмен (dd) және «5» -ті екі қолды ортасында (cc) анықтадым.

uu uc ud = 1 2 3

cc cd = 4 5 6

du dc dd = 7 8 9

«0» «5» -ке ұқсас. «3» және «8» споттер кілт сөзімен жақсы танылмайды және қайталануы мүмкін.

Сервалардың бұғатталмауы үшін әр серво/бүйір үшін минималды және максималды мәндерді реттеу қажет болуы мүмкін, содан кейін тым көп қуат алады.

«келесі ойын» «биді» бастайды, яғни позициялардың белгіленген тізбегін, ал кездейсоқ ойын секіруді бастайды, кездейсоқ қозғалыстар тізбегін орындайды. Екі жағдайда да олар мәңгілікке созылады, сондықтан қозғалыстарды тоқтатуға тура келуі мүмкін, мысалы. «нөлдік позиция» командасымен.

«Ойынды тоқтату» «ctrl + c» шақырады және процесті тоқтатады.

«қосу» және «өшіру» көмегімен жарық диодты қосуға және өшіруге болады.

Time.sleep мәндерін өзгерту арқылы қозғалыстардың жылдамдығын реттеуге болады.

3 -қадам: Код және пәрмендер файлы

Мұнда ұсынылған код - бұл жобаның кілт сөзін анықтаушы пакеттің бөлігі болып табылатын «есту жыланы» кодының модификациясы. Мен жай ғана егжей -тегжейлі түсінбестен менің өтінішім үшін қажет емес нәрсені алып тастадым. Кез келген жақсартулар құпталады.

Содан кейін мен олардың үлгі файлдарына сүйене отырып, Adafruit Servo Bonnet үшін қажетті бөлшектерді қостым.

Мен екі бөліктің бағдарламашыларына алғыс айтқым келеді.

Кодты файл ретінде қоса табуға болады. Оны өзіңіздің тәуекелдеріңізге қолданыңыз, өзгертіңіз, жетілдіріңіз, онымен ойнаңыз.

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

# # Apache лицензиясы бойынша лицензияланған, 2.0 нұсқасы («Лицензия»); # сіз бұл файлды Лицензияға сәйкес келмейінше пайдалана алмайсыз. # Сіз Лицензияның көшірмесін ала аласыз # # https://www.apache.org/licenses/LICENSE-2.0 # # Егер қолданыстағы заңнама талап етпесе немесе жазбаша түрде келісілмесе, Лицензия бойынша таратылған бағдарламалық қамтамасыз ету # таратылады. «БОЛҒАНДАЙ» НЕГІЗІ, # КЕПІЛДІКСІЗ ЖӘНЕ КЕЗ КЕЛІСІЗ ШАРТТАРСЫЗ, тікелей немесе тікелей. # Лицензия бойынша тілді реттейтін арнайы рұқсаттар мен # шектеулерді білу үшін Лицензияны қараңыз. _future_ импорттау абсолютті_импорт _future_ импорт бөлімі _future_ импорттау print_function импорттау кездейсоқ импорт randint -тен ағынды импорттау кезінен randint импорттау. 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) #жоғары, орта және төмен сол және оң қолдар үшін параметрлер жоғары_l = 35 md_l = 90 dn_l = 160 жоғары_r = 160 md_r = 90 dn_r = 35

lft = 15 # серво портының саны, сол жақ серво (0-8)

rgt = 11 # серво портының саны, оң жақтағы servo (0-8) led_channel_0 = hat.kanals [0] # 0 портында жарық диодты орнату 0 led_channel_0.duty_cycle = 0 # жарықдиодты қосу 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)] # 0-9 биіктіктегі 0 JumpingJack позициясын анықтайды1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2), 1, 4, 7, 8, 9, 6, 3, 2, 0) # a «би» сыныбы Контроллер (объект): # Қайта шақыру функциясы _ _ _ (өзін -өзі, q): өзін -өзі._q = q def кері шақыру (өзін, команда): self._q.put (командалық) сынып Қолданба: def _init _ (өзін): self._running = Шын мәні on_init (өзін): pygame.init () self.game_started = Нағыз өзін -өзі_жүгіру = Нақты қайтару Шын мәні on_event (өзін -өзі, оқиға): егер event.type == pygame. QUIT: self._running = False def JumpingJack0 (өздігінен, пернелер): # басқару Jumping Jack, кілт сөздер: «position x» key = int (пернелер) p = позиция [key] a = p [0] b = p [1] басып шығару («Орналасуы:», перне, «сол жақта /оңға: «, а,»/«, б,» дәреже «) # 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 = (len (dnce)) үшін r диапазонында (sp): # позицияның би тәртібі, sp қадамдары dc = dnce [r] if (dc (10) ауқымында емес): # басып шығару («позициядағы кіріс қатесі», sp) dc = 4 p = позиция [dc] a = p [0] b = p [1] kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.25) # жылдамдықты орнатады JumpingJack2 қозғалыстарының қозғалысы (өздігінен, пернелер): # басқару элементтері Джек светодиодтары, кілт сөздер: «қосу/өшіру» led = int (пернелер) егер led == 1: led_channel_0.duty_cycle = 0xffff # жарықдиодты қосу 100% уақыт.ұйқы (0.1) егер led == 0: led_channel_0.duty_cycle = 0 # жарықдиодты уақытты сөндіріңіз.duty_cycle = 0 #жарықдиодты 100% қосу. ұйықтау (0,5) #жарық диодты 100% қосу): # басқару секіру Джек биі, кілт сөз: «кездейсоқ ойын» # үшін диапазонда (10): dr = randrange (9) p = позиция [dr] a = p [0] b = p [1] kit.servo [lft].angle = жинақ args.mic басқа ешбір емес 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.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) queue. Empty: new_item = new_item болмаса None: Node: new_item if (args.debug_keyboard және [pygame. K_ESCAPE] пернелері) немесе == «stop»: self._running = False # if.. JumpingJack0 (6) if (args.debug_keyboard және пернелер [pygame. K_LEFT]) немесе элемент == «солға»: self. JumpingJack0 (4) if (args.debug_keyboard және пернелер [pygame. K_UP]) немесе элемент == « жоғары «: self. JumpingJack0 (1) if (args.debug_keyboard және пернелер [pygame. K_DOWN]) немесе элемент ==» төмен «: self. JumpingJack0 (9) if (args.debug_keyboard және пернелер [pygam e. K_0]) немесе item == «0»: self. JumpingJack0 (0) if (args.debug_keyboard and keys [pygame. K_1]) немесе item == «1»: self. JumpingJack0 (1) if (args. debug_keyboard және пернелер [pygame. K_2]) немесе item == «2»: self. JumpingJack0 (2) if (args.debug_keyboard and keys [pygame. K_3]) немесе item == «3»: self. JumpingJack0 (3) if (args.debug_keyboard және пернелер [pygame. K_4]) немесе item == «4»: self. JumpingJack0 (4) if (args.debug_keyboard and key [pygame. K_5]) немесе item == «5»: self. JumpingJack0 (5) if (args.debug_keyboard және пернелер [pygame. K_6]) немесе элемент == «6»: self. JumpingJack0 (6) if (args.debug_keyboard және пернелер [pygame. K_7]) немесе элемент == «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) if (args.debug_keyboard and keys [pygame. K_a]) немесе item == «d»: self. JumpingJack1 () #dansing Jack, «next_game» if (args. debug_keyboard және пернелер [pygame. K_j]) немесе item == «j»: self. JumpingJack2 (0) #LED қосулы, ҚОСУЛЫ « switch_on «if (args.debug_keyboard және пернелер [pygame. K_k]) немесе элемент ==» k «: self. JumpingJack2 (1) #LED өшірулі болса,» өшіру «күйінде (args.debug_keyboard және пернелер [pygame. K_l]) немесе item == «l»: self. JumpingJack2 (1) #LED «мақсатты» жыпылықтайды, егер (args.debug_keyboard және пернелер [pygame. K_r]) немесе item == «r»: self. JumpingJack3 () #кездейсоқ би «кездейсоқ ойын» time.sleep (0.05) self.on_cleanup () егер _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, иә, у, жоқ, n, қосқышта, j, өшіруді өшіру, k, дыбыс деңгейін жоғарылату, жоғары, дыбыс деңгейін төмендету, төмен, next_game, d, random_game, r, start_game, s, stop_game, ctrl+c,

4 -қадам: Басқа идеялар мен басқа мысалдар

Бұл параметрді роботтарды немесе басқа құрылғыларды басқару үшін де қолдануға болатыны анық. Негізінен Raspberry Pi басқаратын барлық нәрсе.

Мен MeArm жүргізуге арналған сценарийді кеңейту үстінде жұмыс жасаймын және оны 2019 жылдың қазанында ұсына аламын деп үміттенемін.

Мен сондай -ақ, секіру секциясын семафор ретінде қолдануды және «project posenet» аяқ -қолдың позициясын тану бағдарламасын секіруші Джек позицияларын оқу және оны санға аудару құралы ретінде қолдануды қарастырамын. Осылайша, ол мәтінді де жеткізе алады, егер 2x 8 позиция алфавитке, сандар мен белгілерге жеткілікті 64 түрлі санды көрсете алады. Бұл ұсынылған IETF «Semaphore Flag Signaling System (SFSS) арқылы IP -деректерінің диаграммаларын беру» (https://tools.ietf.org/html/rfc4824) үшін физикалық іске асыруға мүмкіндік береді.

Бірақ бұл тағы бір нұсқаулық болады. Алғашқы эксперименттер көрсеткендей, секіру ұясы АИ жүйесімен адам ретінде танылмас бұрын айтарлықтай өзгерістерге мұқтаж болады.

Мен сіздің назарыңызды келесі нұсқаулыққа аударғым келеді: Raspberry Pi мен Google Coral TPU комбинациясын қолдана отырып, объект іздейтін робот сипатталатын объектіні табу-жеке-көмекші-робот-Ft-таңқурай.

Ұсынылған: