Агуулгын хүснэгт:

Сонсголын үсрэх Жак, Google Шүрэн TPU хурдасгуурын хувилбар: 4 алхам
Сонсголын үсрэх Жак, Google Шүрэн TPU хурдасгуурын хувилбар: 4 алхам

Видео: Сонсголын үсрэх Жак, Google Шүрэн TPU хурдасгуурын хувилбар: 4 алхам

Видео: Сонсголын үсрэх Жак, Google Шүрэн TPU хурдасгуурын хувилбар: 4 алхам
Видео: КАК НАСТРОИТЬ L4D2 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 хувилбар

Энэ нь мөчрөө хөдөлгөж, таны захиалгыг сонсдог бөгөөд хамгийн сүүлийн үеийн машин сурах технологиор удирддаг

"Сонсголын үсрэх үүр" нь энгийн цахилгаан цахилгаан үсрэлт, хоёр бичил servo, маш энгийн араагаар удирддаг бөгөөд LED нь "нүд" гэж нэрлэдэг. Үүнийг урьдчилан тодорхойлсон есөн байрлалаас аль нь авах, эсвэл LED -ийг асаах, унтраах, эсвэл урьдчилан тодорхойлсон "бүжиг" эсвэл санамсаргүй хөдөлгөөн хийх ёстойг зааж өгөх энгийн дуут командуудаар удирддаг.

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

Миний мэдэж байгаагаар энэ бол Coral Accelerator дуу илрүүлэх төхөөрөмжтэй DIY төхөөрөмжүүдийн анхны хэвлэгдсэн жишээ бөгөөд хавсаргасан кодын жишээг бусад илүү төвөгтэй төслүүдэд ашиглаж болно.

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

Google Voice Kit-ийн өмнөх хувилбар нь гурван үндсэн хязгаарлалттай байсан: энэ нь Google вэб дээр суурилсан дуу хоолой таних үйлчилгээнээс хамаардаг бөгөөд тохиргоо нь харьцангуй төвөгтэй байсан тул тушаал өгөхөөсөө өмнө ямар нэгэн товчлуур дарах шаардлагатай байсан бөгөөд ноцтой саатал гарсан байна. тушаал хэлэх ба системийн хариу үйлдлийн хооронд. Google Coral хурдасгуурыг ашиглах нь хариу өгөх хугацааг хэдхэн секундээр богиносгодог, интернет холболтоос хамааралгүй, байнга сонсдог. Зарим өөрчлөлтийн тусламжтайгаар та үүнийг үсрэх үүр, робот, машин гэх мэт илүү төвөгтэй төхөөрөмжийг удирдахад ашиглаж болно, эсвэл Raspberry Pi ашиглан бүтээж, удирдаж болно.

Одоогийн хувилбарт Түлхүүр үг хайгч нь дагалдах загварын файлд тодорхойлогдсон ("voice_commands_v0.7_egetpu.tflite") болон тусдаа шошгоны файлд ("labels_gc2.raw.txt") тайлбарласан 140 орчим богино түлхүүр үг/түлхүүр үгсийг ойлгодог.. Чөлөөтэй өөрчлөгддөг файлаар тодорхойлогддог ("commands_v2_hampelmann.txt"), манай скриптэд тусгайлан ашигладаг түлхүүр үгсийг виртуал гар дээрх товчлууруудын зураглалд буулгадаг. үсэг, тоо, дээш/доош/зүүн/баруун, crtl+c, гэх мэт.

Дараа нь, жишээ нь pygame.key ашиглан эдгээр "товчлууруудыг" уншиж, төхөөрөмж, энд үсрэх үүр ямар үйлдлийг гүйцэтгэхийг хянахад ашигладаг. Манай тохиолдолд энэ нь хоёр servo -ийг урьдчилан тодорхойлсон байрлалд шилжүүлэх, эсвэл LED -ийг асаах, унтраах гэсэн үг юм. Spotter түлхүүр үг нь тусдаа дэвсэлдэг тул таны захиалгыг байнга сонсох боломжтой болно.

Хувилбар 2019 оны 9 -р сарын 21

Хангамж

Raspberry Pi 4, Pimoroni -ээр дамжуулан

Google Шүрэн 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

Servo Bonnet-ийн 4х АА батерейны багц (эсвэл бусад 5-6В тэжээлийн эх үүсвэр)

Хуучин вэбкамер, микрофон шиг

Өмнөх зааварчилгаанд дурдсанчлан серво жолоодлоготой үсрэх Жак. Байршлын зургийг дараагийн алхамд хавсаргасан боловч тохируулга хийх шаардлагатай байж магадгүй юм.

Үсрэх үүрэнд шаардлагатай хэсгүүд:

- 3 мм -ийн Forex хавтан

- 2 бичил servo

- 2 ба 3 мм -ийн эрэг, самар

- 2 цагаан LED ба резистор

- жаахан кабель

Алхам 1: Төхөөрөмжийг тохируулах

Төхөөрөмжийг тохируулах
Төхөөрөмжийг тохируулах
Төхөөрөмжийг тохируулах
Төхөөрөмжийг тохируулах
Төхөөрөмжийг тохируулах
Төхөөрөмжийг тохируулах

Үсрэх үүр барихын тулд өмнөх зааварт заасан зааврыг дагана уу. Би прототипдээ Forex -ийг ашигласан боловч та лазераар хийсэн нийлэг эсвэл фанер хавтан ашиглаж болно. Та servos -ийн хэмжээ гэх мэт тохиргоог тохируулах хэрэгтэй болж магадгүй. Хөл, араа нь үрэлтгүйгээр хөдөлж чадах эсэхийг шалгаарай.

Raspberry Pi -ээ тохируулна уу. Coral Github сайт дээр Pi дээр Coral хурдасгуурыг ажиллуулахад шаардлагатай бүх зүйлийг агуулсан, бүх тохиргоог аль хэдийн бэлэн болгосон олон тооны төсөл агуулсан Распиан дүрс байдаг.

Төслийн түлхүүр үгийг илрүүлэгчийг Google Coral GitHub хуудаснаас аваарай. Шаардлагатай бүх програм хангамжийг зааврын дагуу суулгана уу.

Өгөгдсөн файлуудыг суулгана уу. Үсрэх jack python скриптийг төслийн түлхүүр үгийн споттер фолдерт болон тохирох командуудын файлыг config дэд хавтсанд байрлуул.

Adafruit Servo Bonnet -ийг Pi -д холбоно уу. Би RPI орон сууцыг сэнстэй ашиглаж байгаа тул холболтыг идэвхжүүлэхийн тулд GPIO стекер (жишээлбэл, Пиморони дээрээс авах боломжтой) ашиглах шаардлагатай болсон. Adafruit -ийн servo капотын зааварт заасны дагуу шаардлагатай бүх номын санг суулгаарай.

Servo капотт 5-6В хүчдэлийн эх үүсвэрийг холбоно уу. Серво ба LED холбоно уу. Миний хувьд би LED -ийн 0 порт, servo -ийн 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" гэсэн үгийг споттер түлхүүр үг сайн танихгүй тул дахин давтах шаардлагатай болж магадгүй юм.

Серво хаагдахгүй байхын тулд та servo/side бүрийн хамгийн бага ба хамгийн их утгыг тохируулах хэрэгтэй болж магадгүй бөгөөд дараа нь хэт их хүч авах болно.

"Дараагийн тоглоом" нь "бүжиг", өөрөөр хэлбэл тодорхой дараалсан байрлалыг эхлүүлэх бол "санамсаргүй тоглоом" нь үсрэх Жак -ийг эхлүүлж, санамсаргүй хөдөлгөөн хийх болно. Аль ч тохиолдолд тэд үүрд үргэлжлэх тул та хөдөлгөөнөө зогсоох хэрэгтэй болж магадгүй. "байрлал тэг" гэсэн тушаалаар.

"Тоглоомыг зогсоох" нь "ctrl + c" -ийг өдөөж, процессыг зогсоох болно.

"асаах", "унтраах" зэргийг ашиглан LED -ийг асаах, унтраах боломжтой.

Унтах цагийг өөрчилснөөр та хөдөлгөөний хурдыг тохируулж болно.

Алхам 3: Код ба командын файл

Энд танилцуулсан код нь төслийн түлхүүр үгийг илрүүлэгч багцын нэг хэсэг болох "сонсогч могой" кодын өөрчлөлт юм. Би зүгээр л нарийн ширийн зүйлийг огт ойлголгүйгээр өргөдөл гаргахад шаардлагагүй бүх зүйлийг устгасан. Аливаа сайжруулалтыг хүлээж авах боломжтой.

Дараа нь би тэдний жишээ файл дээр үндэслэн Adafruit Servo Bonnet -д шаардлагатай хэсгүүдийг нэмж оруулав.

Хоёр хэсгийн програмистуудад баярлалаа гэж хэлмээр байна.

Кодыг файл хэлбэрээр хавсаргасан хэлбэрээр олж болно. Үүнийг өөрийн эрсдэлд ашиглах, өөрчлөх, сайжруулах, түүнтэй тоглох.

# Зохиогчийн эрх 2019 Google ХХК

# # Apache лицензийн дагуу лицензтэй, хувилбар 2.0 ("Лиценз"); # та энэ файлыг Лицензийг дагаж мөрдөхөөс бусад тохиолдолд ашиглаж болохгүй. # Та Лицензийн хуулбарыг авах боломжтой # # https://www.apache.org/licenses/LICENSE-2.0 # # Холбогдох хуульд заагаагүй эсвэл бичгээр зөвшөөрөөгүй бол Лицензийн дагуу тараасан програм хангамжийг # "ЯГ БАЙДАГ" ҮНДСЭН, # ямар ч төрлийн ил тод, далд баталгаат баталгаа, нөхцөлгүйгээр. # Тусгай хэлийг зохицуулах тусгай зөвшөөрлүүд болон Лицензийн доорх # хязгаарлалтыг Лицензээс үзнэ үү. _future_ импортын абсолют_импорт _future_ -аас _future_ импортлох тасалгаанаас импорт хэвлэх 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) #зүүн, баруун гарны дээш, дунд, доош тохиргоо_l = 35 md_l = 90 dn_l = 160 up_r = 160 md_r = 90 dn_r = 35

lft = 15 # servo портын тоо, зүүн 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)] # нь 0-9 бүжиг1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2 гэсэн тоогоор илэрхийлсэн 9 JumpingJack байрлалыг тодорхойлдог., 1, 4, 7, 8, 9, 6, 3, 2, 0) # a "бүжгийн" анги 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 True def on_event (өөрөө, үйл явдал): хэрэв event.type == pygame. QUIT: self._running = False def JumpingJack0 (өөрөө, түлхүүрүүд): # Jumping Jack, түлхүүр үгс: "position x" key = int (түлхүүрүүд) p = байрлал [түлхүүр] 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 (өөрөө): # удирдлага Jumping Jack dance, түлхүүр үг: "next game" dnce = dance1 sp = (len (dnce)) for r in range: 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% цаг. унтах (0.1) хэрэв led == 0: led_channel_0.duty_cycle = 0 # LED цагийг унтраана. Унтах (0.1) хэрэв led == 2: # LED анивчих суваг_0..duty_cycle = 0 #LED -ийг 100% асаах. унтах (0.5) #LED -ийг 100% асаах. унтах (0.5) LED_kanal_0.duty_cycle = 0 #LED -ийг 100% асаах. унтах (0.5) LED_kanal_0.duty_cycle = 0xffff): # удирдах Jumping Jack dance, түлхүүр үг: "random game" # for h for range (10): dr = randrange (9) p = position [dr] a = p [0] b = p [1] kit.servo [lft].angle = a kit.servo [rgt].angle = b time.sleep (0.25) # хөдөлгөөний хурдыг def spotter (өөрөө, args) тохируулдаг: engine = BasicEngine (args.model_file) mic = args.mic if 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 (өөрөө, args):

Хэрэв үгүй бол self.on_init (): self._running = False q = model.get_queue () self._controler = Controler (q) args.debug_keyboard биш бол: t = Thread (target = self.spotter, args = (args,)) t.daemon = Үнэн t.start () item = -1 өөрөө._ гүйж байх үед: pygame.event.pump () хэрэв args.debug_keyboard: keys = pygame.key.get_pressed () өөр: оролдох: new_item = q.get (Үнэн, 0.1) 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 болон түлхүүрүүд [pygame. K_SPACE]) эсвэл item == "go": # self. JumpingJack0 (7) # if (args.debug_keyboard and keys [pygame. K_RIGHT]) эсвэл item == "right": self. JumpingJack0 (6) if (args.debug_keyboard and keys [pygame. K_LEFT]) эсвэл 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 keys [pygame. K_DOWN]) эсвэл 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 keys [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 keys [pygame. K_3]) or item == "3": self. JumpingJack0 (3) if (args.debug_keyboard and keys [pygame. K_4]) or item == "4": self. JumpingJack0 (4) if (args.debug_keyboard and keys [pygame. K_5]) or item == "5": self. 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) 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]) or item == "d": self. JumpingJack1 () #dansing Jack, "next_game" if (args. debug_keyboard болон түлхүүрүүд [pygame. K_j]) эсвэл item == "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, if" swithch off "if (args.debug_keyboard and keys [pygame. K_l]) эсвэл item == "l": self. JumpingJack2 (1) #LED "зорилтот" бол "санамсаргүй тоглоом" 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 -р байр, 3, 4 -р байр, 4, 5 -р байр, 5, 6 -р байр, 6, 7 -р байр, 7, 8 -р байр, 8, 8 -р байр, 9 -р байр, 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 оны 10 -р сард танилцуулах боломжтой гэж найдаж байна.

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

Гэхдээ энэ нь бас нэг сургамж болно. Эхний туршилтуудын дагуу үсрэх үүрэнд хиймэл оюун ухааны системээр хүн болохыг хүлээн зөвшөөрөхөөс өмнө ихээхэн өөрчлөлт оруулах шаардлагатай болно.

Дараахь зааварчилгаанд анхаарлаа хандуулахыг хүсч байна: Raspberry Pi ба Google Coral TPU-ийн хослолыг ашиглан объект хайх роботыг дүрсэлсэн объект-хайх-хувийн-туслах-робот-Ft-бөөрөлзгөнө.

Зөвлөмж болгож буй: