Мазмуну:

Угуучу секирүүчү Джек, Google Coral TPU Accelerator Version: 4 Steps
Угуучу секирүүчү Джек, Google Coral TPU Accelerator Version: 4 Steps

Video: Угуучу секирүүчү Джек, Google Coral TPU Accelerator Version: 4 Steps

Video: Угуучу секирүүчү Джек, Google Coral TPU Accelerator Version: 4 Steps
Video: АЯТУЛЬ КУРСИ 3 ЧАСА НА ВСЮ НОЧЬ, СЛУШАЙТЕ КАЖДЫЙ ДЕНЬ АЯТУЛЬ КУРСИ УСПОКАИВАЕТ И ЗАЩИЩАЕТ ОТ ПЛОХОГО 2024, Июль
Anonim
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы
Угуучу секирүүчү Джек, Google Coral TPU Accelerator версиясы

Ал буту -колун кыймылга келтирет, сиздин буйрутмаларыңызды угат, эң акыркы машинаны үйрөнүү технологиясы менен башкарылат

"Уккан секирүүчү джек" - бул жөнөкөй эле электромеханикалык секирүү, эки микро сервосу жана өтө жөнөкөй тетиги менен башкарылган, "көз" светодиоддору бар. Ал алдын ала аныкталган тогуз позициянын кайсынысын же LEDди күйгүзүү же өчүрүү керектигин же алдын ала аныкталган "бийди" же туш келди кыймылдарды аткарууну көрсөтүүчү жөнөкөй үн буйруктары менен башкарылат.

Системанын негизги элементи Google Coral TPU ылдамдаткычы болуп саналат, ал Tensorflow Lite моделдерин Raspberry Pi сыяктуу "алсыз" компьютерде да өтө жогорку ылдамдыкта оффлайнда иштетүүгө мүмкүндүк берет. Бул, мис. RPi камерасын колдонуп, объектти ылдам аныктоо жана классификациялоо, бирок ошондой эле машинаны үйрөнүүгө негизделген үн таануу функцияларын иштетүү.

Менин билишимче, бул Coral Accelerator үнүн аныктоочу физикалык DIY түзмөгү үчүн биринчи жарыяланган мисал жана тиркелген коддун мисалы башка татаал долбоорлор үчүн да колдонулушу мүмкүн.

Үн көзөмөлү GitHub'да жакында (2019-жылдын сентябрында) жайгаштырылган "проект ачкычын аныктоочу" (https://github.com/google-coral/project-keyword-spotter) "угуучу жылан" мисалына негизделген. Менин конфигурациямда, система Raspberry Pi 4тен турат, бул жерде Adafruit 16 каналынын серво капоту, Google Coral TPU Accelerator жана веб -камера бар, бул жерде микрофон катары колдонулат. Jumping Jack мурунку нускамада сүрөттөлгөн, ал Google Voice комплектинин үн буйруктарын окуу үчүн жетектелген, Servo Bonnetке 2.0 версиясында төмөндө сүрөттөлгөн.

Мурунку Google Voice Kit версиясында үч борбордук чектөө болгон: ал Google вебге негизделген үн таануу кызматтарына жараша болгон жана орнотуу салыштырмалуу татаал болгон, сиз буйрук берерден мурун кандайдыр бир баскычты басууну талап кылган жана олуттуу кечигүү болгон буйрук менен системанын жообун айтуунун ортосунда. Google Coral ылдамдаткычын колдонуу жооп убактысын секундага кыскартат, интернет байланышы жок жана ар дайым угуп турат. Кээ бир өзгөртүүлөр менен сиз аны Jumping Jack сыяктуу кыйла татаал түзмөктөрдү, роботторду же машиналарды, же Raspberry Pi менен кура турган жана башкара турган нерселерди башкаруу үчүн колдонсоңуз болот.

Учурдагы версиясында Ачкычтуу сүйлөм боюнча споттер коштомо моделдин файлында аныкталган ("voice_commands_v0.7_egetpu.tflite") жана өзүнчө этикетка файлында сүрөттөлгөн ("labels_gc2.raw.txt") болжол менен 140 кыска ачкыч сөздөрдү/негизги фразаларды түшүнөт.. Эркин өзгөртүлүүчү файл менен аныкталган ("commands_v2_hampelmann.txt"), биздин скрипт тарабынан атайын колдонулган ачкыч сөздөр виртуалдык баскычтоптун баскычтарына картага түшүрүлөт, мис. тамгалар, сандар үчүн, өйдө/ылдый/солго/оңго, crtl+c, жана башкалар.

Андан кийин, мис. pygame.keyди колдонуп, бул "баскычтар" окулат жана кайсы иш -аракеттерди аткара тургандыгын көзөмөлдөө үчүн колдонулат. Биздин учурда, бул эки сервону алдын ала аныкталган абалга жеткирүү же LED ди күйгүзүү же өчүрүү дегенди билдирет. Ачкычтуу сүйлөмдүн ачкычы өзүнчө баскычта иштегендиктен, ал сиздин заказдарыңызды биротоло уга алат.

Версия 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…

Stacker аталышы (эгер керек болсо)

www.adafruit.com/product/2223

4x АА батарейкасы (же башка 5-6В кубат булагы) Servo Bonnet үчүн

Эски веб -камера, микрофон катары

Мурунку көрсөтмөлөрдө айтылгандай, секирүү секвери. Макет чиймелери кийинки кадамга тиркелет, бирок түзөтүүлөрдү талап кылышы мүмкүн.

Jumping Jack үчүн керектүү бөлүктөр:

- 3 мм Forex плитасы

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

- 2 жана 3 мм бурамалар жана гайкалар

- 2 ак LED жана резистор

- бир аз кабель

1 -кадам: Түзмөктү орнотуу

Түзмөктү орнотуу
Түзмөктү орнотуу
Түзмөктү орнотуу
Түзмөктү орнотуу
Түзмөктү орнотуу
Түзмөктү орнотуу

Jumping Jackти куруу үчүн, мурунку көрсөтмөлөрдө көрсөтүлгөн көрсөтмөлөрдү аткарыңыз. Мен Forexти прототипим үчүн колдондум, бирок сиз лазер менен кесилген акрил же фанер плиталарын колдонсоңуз болот. Орнотууну сервоприводдоруңуздун өлчөмүнө жараша тууралоого туура келиши мүмкүн ж.

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

Google Coral GitHub баракчасынан долбоордун ачкычын алыңыз. Көрсөтүлгөндөй бардык керектүү программаларды орнотуңуз.

Берилген файлдарды орнотуңуз. Джек питон секирүүчү скриптин проект ачкычын аныктоочу папкага жана конфигурациялоочу командалар файлына конфигурация папкасына коюңуз.

Adafruit Servo Bonnetти Piге тиркеңиз. Мен желдеткич менен RPI корпусун колдонуп жаткандыктан, туташууну иштетүү үчүн GPIO стекерлерин (мисалы, Pimoroniден жеткиликтүү) колдонуу керек болчу. Adafruit көрсөтмөсүндө көрсөтүлгөндөй, бардык керектүү китепканаларды орнотуңуз.

Серво капотуна 5-6В кубат булагын тиркеңиз. Серволорду жана LED ди тиркеңиз. Менимче, мен светодиоддор үчүн 0 портту жана серволор үчүн 11 жана 15 портторду колдондум.

Бардыгын текшерүү үчүн, мен адегенде проектордун ачкычын "уккан жылан" мисалын жана Adafruit servo капот мисалдарын колдонууну сунуштаар элем.

2 -кадам: секирүү джекти иштетүү

Бардык бөлүктөр орнотулган жана иштеп жаткан болсо, аны колдонууга аракет кылыңыз. Сиз сценарийди IDEде же буйрук сабынан иштете аласыз.

"0 позиция" менен "9 позиция" деп кыйкыруу секирүү Джекти алдын ала аныкталган позициялардын бирин алууга түрткү берет. Мен "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" ачкыч сөзү тарабынан анча жакшы таанылбайт жана кайталанышы мүмкүн.

Ар бир серво/каптал үчүн минималдуу жана максималдуу маанилерди тууралашыңыз керек болот, андыктан серволор бөгөлбөйт жана андан кийин өтө көп күч тартылат.

"Кийинки оюн" "бийди" баштайт, башкача айтканда, позициялардын аныкталган ырааттуулугу, ал эми "кокус оюн" секирүү Джекти баштайт, ал кокустук ырааттуу ырааттуулукту аткарат. Эки учурда тең алар түбөлүккө иштешет, андыктан кыймылдарды токтотууга туура келет, мис. "позиция нөл" буйругу менен.

"Stop game" "ctrl + c" ойготот жана процессти токтотот.

"күйгүзүү" жана "өчүрүү" LED ди күйгүзүү жана өчүрүү үчүн колдонулушу мүмкүн.

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 импорт argparse импорт os adafruit_servokit импорттон ServoKit импорт тактасы импорт busio импорт adafruit_pca9685 импорт убактысы i2c = busio. I2C (board. SCL, board. SDA) hat = adafruit_pca9685. PCA9685 (i2c) hat.frequency = 60 kit = ServoKit (каналдар = 16) # топтому каналдардын саны #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 # servo порттун саны, сол серво (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)] # 9 JumpingJack позициясын аныктайт, 0-9 бүтүн сандар менен көрсөтүлгөн dance1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2), 1, 4, 7, 8, 9, 6, 3, 2, 0) # "бий" классы Контроллер (объект): # Чалуу функциясы def _init _ (өзүн, q): өзүн._q = q def чалуу (өзүн өзү), 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 True def on_event (өзүнчө, окуя): if event.type == pygame. QUIT: self._running = False def JumpingJack0 (өз алдынча, баскычтар): # башкаруу Jumping Jack, ачкыч сөздөр: "position x" key = int (key) p = position [key] a = p [0] b = p [1] басып чыгаруу ("Position:", key, "left /оң: ", а,"/", б," даража ") # sys.stdout.write (" Позиция: ", ачкыч," сол/оң: ", а,"/", б," даража ") kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.1) def JumpingJack1 (өз алдынча): # башкаруу 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 (өз алдынча, баскычтар): # башкаруу Jumping Jack LED, ачкыч сөздөр: "күйгүзүү/өчүрүү" led = int (баскычтар) led == 1 болсо: led_channel_0.duty_cycle = 0xffff # күйгүзүү LED 100% time.sleep (0.1) эгерде LED == 0: led_channel_0.duty_cycle = 0 # LED убактысын өчүрүңүз..duty_cycle = 0 #күйгүзүү LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0xffff #күйгүзүү LED 100% time.sleep (0.5) led_channel_0.duty_cycle = 0 #LED күйгүзүү 100% time.sleep (0.5) led_channel_0.duty_cycle = 0xffff #күйгүзүү LED 100% time.sleep (0.1) def JumpingJack3 (өзүн өзү): # башкаруу Jumping Jack бийи, ачкыч сөз: "random game" # үчүн h диапазонунда (10): dr = randrange (9) p = позиция [dr] a = p [0] b = p [1] kit.servo. 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 = Controler (q) if not args.debug_keyboard: t = Thread (target = self.spotter, args = (args,)) t.daemon = Чыныгы t.start () пункт = -1 өзүн -өзү иштеткенде: pygame.event.pump () if args.debug_keyboard: key = pygame.key.get_pressed () башка: аракет кылыңыз: new_item = q.get (True, 0.1) queue. Empty: new_item = new_item жок болсо None: item = new_item if (args.debug_keyboard жана key [pygame. K_ESCAPE]) же item == "stop": self._running = False # if (args.debug_keyboard жана ачкычтар [pygame. K_SPACE]) же item == "go": # self. JumpingJack0 (7) # if (args.debug_keyboard and key [pygame. K_RIGHT]) же item == "right": self. JumpingJack0 (6) if (args.debug_keyboard and key [pygame. K_LEFT]) or item == "left": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_UP]) or item == " up ": self. JumpingJack0 (1) if (args.debug_keyboard and key [pygame. K_DOWN]) or item ==" down ": self. JumpingJack0 (9) if (args.debug_keyboard and keys [pygam e. K_0]) же item == "0": self. JumpingJack0 (0) if (args.debug_keyboard and key [pygame. K_1]) or item == "1": self. JumpingJack0 (1) if (args. debug_keyboard жана ачкычтар [pygame. K_2]) же item == "2": self. JumpingJack0 (2) if (args.debug_keyboard and key [pygame. K_3]) or item == "3": self. JumpingJack0 (3) if (args.debug_keyboard and key [pygame. K_4]) or item == "4": self. JumpingJack0 (4) if (args.debug_keyboard and key [pygame. K_5]) or item == "5": self. JumpingJack0 (5) if (args.debug_keyboard and key [pygame. K_6]) or item == "6": self. JumpingJack0 (6) if (args.debug_keyboard and keys [pygame. K_7]) or item == "7 ": self. JumpingJack0 (7) if (args.debug_keyboard and key [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 key [pygame. K_a]) or item == "d": self. JumpingJack1 () #dansing Jack, on "next_game" if (args. debug_keyboard жана ачкычтар [pygame. K_j]) же item == "j": self. JumpingJack2 (0) #LED on, ON " switch_on "if (args.debug_keyboard and key [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" буйрук конфигурация файлы бар. Өзүңүз каалагандай өзгөртүңүз. Бул этикетка файлына негизделген "буйрук, ачкыч, (күч,)" айкалыштарынын тизмеси.

position_zero, 0, позиция_бир, 1, позиция_эки, 2, позиция_үч, 3, позиция_ төрт, 4, позиция_беш, 5, позиция_ алты, 6, позиция_ жети, 7, позиция_ сегиз, 8, позиция_ тогуз, 9, жылуу_ өйдө, өйдө, өйдө, өйдө, ылдый, ылдый, ылдый, ылдый, артка -артка, солго, алдыга -алдыга, оңго, артка -артка, солго, алдыга, оңго, 0,8 бута, л, үнсүз, z, ооба, у, жок, n, которуу_он, j, өчүрүү_өнүү, k, үн_жогору, өйдө, үнүн түшүрүү, ылдый, next_game, d, random_game, r, start_game, s, stop_game, ctrl+c,

4 -кадам: Мындан аркы идеялар жана башка мисалдар

Бул жөндөө роботторду же башка түзмөктөрдү башкаруу үчүн да колдонулушу мүмкүн экени айдан ачык. Негизи Raspberry Pi тарабынан көзөмөлдөнө турган нерсенин баары.

Мен MeArm айдоо үчүн сценарийди кеңейтүүнүн үстүндө иштеп жатам жана муну 2019 -жылдын октябрь айында сунуштайм деп үмүттөнөм.

Мен ошондой эле секирүү Джекти семафор катары колдонууну жана "проекти posenet" мүчө позициясын таануу программасын секирүү Джектин позицияларын окуу жана аны кайра санга которуу куралы катары колдонууну ойлонуп жатам. Ошентип, ал текстти да билдириши мүмкүн, анткени 2х 8 позиция алфавитке, сандарга жана белгилерге жетиштүү болгон 64 ар кандай сандарды көрсөтө алат. Бул сунушталган IETF "Semaphore Flag Signaling System (SFSS) аркылуу IP -маалыматтардын берилиштерин берүү" (https://tools.ietf.org/html/rfc4824) үчүн физикалык ишке ашырууга мүмкүндүк берет.

Бирок бул дагы бир көрсөтмө болот. Жана биринчи эксперименттер көрсөткөндөй, секирүү уячасы AI системасы адам катары таанылганга чейин бир топ убакытты талап кылышы мүмкүн.

Мен сиздин көңүлүңүздү төмөнкү инструктивдүү нерсеге бургум келет: Object-Finding-Personal-Assistant-Robot-Ft-Raspberry, мында Raspberry Pi менен Google Coral TPUнун айкалышын колдонуу менен объект табуучу робот сүрөттөлөт.

Сунушталууда: