Πίνακας περιεχομένων:

A Hearing Jumping Jack, Google Coral TPU Accelerator Έκδοση: 4 Βήματα
A Hearing Jumping Jack, Google Coral TPU Accelerator Έκδοση: 4 Βήματα

Βίντεο: A Hearing Jumping Jack, Google Coral TPU Accelerator Έκδοση: 4 Βήματα

Βίντεο: A Hearing Jumping Jack, Google Coral TPU Accelerator Έκδοση: 4 Βήματα
Βίντεο: 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

Κινεί τα άκρα του, ακούει τις παραγγελίες σας, οδηγείται από την τελευταία λέξη της τεχνολογίας μηχανικής μάθησης

Το "Hearing Jumping Jack" είναι ένα απλό ηλεκτρομηχανικό Jumping Jack, που οδηγείται από δύο μικρο σερβο και ένα πολύ απλό γρανάζι, με LED ως "μάτια". Ελέγχεται με απλές φωνητικές εντολές που υποδεικνύουν ποια από τις εννέα προκαθορισμένες θέσεις πρέπει να πάρει ή εάν το LED πρέπει να ενεργοποιηθεί ή απενεργοποιηθεί ή εάν εκτελεί ένα προκαθορισμένο "χορό" ή τυχαίο σύνολο κινήσεων.

Το βασικό στοιχείο του συστήματος είναι ο επιταχυντής Google Coral TPU, ο οποίος επιτρέπει την εκτέλεση των μοντέλων Tensorflow Lite εκτός σύνδεσης με πολύ μεγάλη ταχύτητα, ακόμη και σε έναν «αδύναμο» υπολογιστή όπως το Raspberry Pi. Αυτό επιτρέπει π.χ. ταχεία αναγνώριση και ταξινόμηση αντικειμένων με χρήση της κάμερας RPi, αλλά και εκτέλεση τοπικών λειτουργιών αναγνώρισης φωνής που βασίζονται σε μηχανική μάθηση.

Από τη γνώση μου, αυτό είναι το πρώτο δημοσιευμένο παράδειγμα για μια φυσική συσκευή DIY που βασίζεται στον εντοπισμό φωνής Coral Accelerator και το συνημμένο παράδειγμα κώδικα μπορεί επίσης να χρησιμοποιηθεί για άλλα πιο πολύπλοκα έργα.

Ο φωνητικός έλεγχος βασίζεται στο παράδειγμα "το φίδι που ακούει" στο "spotter λέξεων-κλειδιών έργου" (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.

Στην τρέχουσα έκδοσή του, το Spotter Keyword κατανοεί ένα σύνολο 140 σύντομων λέξεων -κλειδιών/φράσεων -κλειδιών, που ορίζονται στο συνοδευτικό αρχείο μοντέλου ("voice_commands_v0.7_egetpu.tflite") και περιγράφονται σε ξεχωριστό αρχείο ετικέτας ("labels_gc2.raw.txt") Το Ορίζονται από ένα ελεύθερα τροποποιήσιμο αρχείο ("commands_v2_hampelmann.txt"), οι λέξεις -κλειδιά που χρησιμοποιούνται ειδικά από το σενάριό μας αντιστοιχίζονται στη συνέχεια σε πληκτρολογήσεις σε ένα εικονικό πληκτρολόγιο, π.χ. για γράμματα, αριθμούς, πάνω/κάτω/αριστερά/δεξιά, crtl+c, κ.λπ.

Στη συνέχεια, π.χ. χρησιμοποιώντας το pygame.key, αυτές οι «πληκτρολογήσεις» διαβάζονται και χρησιμοποιούνται για τον έλεγχο των ενεργειών που πρέπει να εκτελέσει μια συσκευή, εδώ ο γρύλος άλματος. Στην περίπτωσή μας, αυτό σημαίνει ότι πρέπει να οδηγήσετε τα δύο servos σε προκαθορισμένες θέσεις ή να ενεργοποιήσετε ή να απενεργοποιήσετε τα LED. Καθώς η λέξη -κλειδί 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

4x μπαταρία AA (ή άλλη πηγή ισχύος 5-6V) για Servo Bonnet

Παλιά κάμερα web, ως μικρόφωνο

Ο Servo οδήγησε τον Jumping Jack, όπως περιγράφεται σε προηγούμενο οδηγό. Τα σχέδια διάταξης επισυνάπτονται στο επόμενο βήμα, αλλά ενδέχεται να απαιτούν προσαρμογές.

Απαιτούμενα μέρη για το Jumping Jack:

- Πλάκα Forex 3 mm

- 2 μικρο σερβίς

- Βίδες και παξιμάδια 2 και 3 mm

- 2 λευκές λυχνίες LED και μια αντίσταση

- λίγο καλώδιο

Βήμα 1: Ρύθμιση της συσκευής

Ρύθμιση της συσκευής
Ρύθμιση της συσκευής
Ρύθμιση της συσκευής
Ρύθμιση της συσκευής
Ρύθμιση της συσκευής
Ρύθμιση της συσκευής

Για να φτιάξετε το Jumping Jack, ακολουθήστε τις υποδείξεις που δίνονται σε προηγούμενες οδηγίες. Χρησιμοποίησα το Forex για το πρωτότυπό μου, αλλά μπορείτε να χρησιμοποιήσετε ακρυλικές ή πλάκες από κόντρα πλακέ κομμένες με λέιζερ. Mayσως χρειαστεί να προσαρμόσετε τη διάταξη ανάλογα με το μέγεθος των servos σας κλπ. Δοκιμάστε αν τα άκρα και ο εξοπλισμός μπορούν να κινηθούν χωρίς τριβές.

Ρυθμίστε το Raspberry Pi. Στον ιστότοπο Coral Github, υπάρχει διαθέσιμη μια εικόνα Raspian που περιέχει όλα όσα απαιτούνται για την εκτέλεση του επιταχυντή Coral στο Pi και περιέχει πολλά έργα, με όλες τις ρυθμίσεις ήδη σε ισχύ.

Αποκτήστε το spotter λέξεων -κλειδιών έργου από τη σελίδα Google Coral GitHub. Εγκαταστήστε όλο το απαιτούμενο λογισμικό όπως υποδεικνύεται.

Εγκαταστήστε τα παρεχόμενα αρχεία. Τοποθετήστε το σενάριο python jacking jumping στο φάκελο spotter λέξεων -κλειδιών έργου και το αντίστοιχο αρχείο εντολών στον υποφάκελο config.

Συνδέστε το Adafruit Servo Bonnet στο Pi. Καθώς χρησιμοποιώ περίβλημα RPI με ανεμιστήρα, χρειάστηκε να χρησιμοποιήσω GPIO stackers (π.χ. διαθέσιμα από το Pimoroni) για να ενεργοποιήσω τη σύνδεση. Εγκαταστήστε όλες τις απαιτούμενες βιβλιοθήκες, όπως υποδεικνύεται στις οδηγίες του Adafruit για το σερβο καπό.

Συνδέστε μια πηγή τροφοδοσίας 5-6V στο σερβο καπό. Συνδέστε servos και LED. Στην περίπτωσή μου, χρησιμοποίησα τη θύρα 0 για τα LED και τις θύρες 11 και 15 για τα servos.

Για να ελέγξετε τα πάντα, θα συνιστούσα να δοκιμάσετε πρώτα το παράδειγμα λέξης -κλειδιού "ακρόαση φιδιού" και τα παραδείγματα σέρβο καπό Adafruit.

Βήμα 2: Τρέξιμο του Jumping Jack

Εάν όλα τα μέρη είναι ρυθμισμένα και λειτουργούν, δοκιμάστε να το χρησιμοποιήσετε. Μπορείτε να εκτελέσετε το σενάριο στο 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" δεν αναγνωρίζονται πολύ καλά από το spotter των λέξεων -κλειδιών και ίσως χρειαστεί να επαναληφθούν.

Mayσως χρειαστεί να προσαρμόσετε τις ελάχιστες και μέγιστες τιμές για κάθε σερβο/πλευρά, έτσι ώστε τα σερβίς να μην μπλοκαριστούν και στη συνέχεια να αντλήσετε υπερβολική ισχύ.

Το "επόμενο παιχνίδι" θα ξεκινήσει τον "χορό", δηλαδή μια καθορισμένη ακολουθία θέσεων, ενώ το "τυχαίο παιχνίδι" θα ξεκινήσει το Jumping Jack για να εκτελέσει μια τυχαία ακολουθία κινήσεων. Και στις δύο περιπτώσεις θα τρέξουν για πάντα, οπότε ίσως χρειαστεί να σταματήσετε τις κινήσεις, π.χ. με εντολή "θέση μηδέν".

Το "παιχνίδι διακοπής" θα προκαλέσει ένα "ctrl + c" και θα σταματήσει τη διαδικασία.

Μπορείτε να χρησιμοποιήσετε "ενεργοποίηση" και "απενεργοποίηση" ενεργοποίηση και απενεργοποίηση των LED.

Με τροποποίηση των τιμών time.sleep μπορείτε να ρυθμίσετε την ταχύτητα των κινήσεων.

Βήμα 3: Ο κώδικας και το αρχείο εντολών

Ο κώδικας που παρουσιάζεται εδώ είναι μια τροποποίηση του κώδικα "φίδι που ακούει" που αποτελεί μέρος του πακέτου λέξεων -κλειδιών spotter του έργου. Απλώς αφαίρεσα οτιδήποτε δεν ήταν απαραίτητο για την αίτησή μου, χωρίς καμία πραγματική κατανόηση των λεπτομερειών. Οποιεσδήποτε βελτιώσεις είναι ευπρόσδεκτες.

Στη συνέχεια πρόσθεσα τα εξαρτήματα που απαιτούνται για το Adafruit Servo Bonnet, με βάση τα παραδείγματα αρχείων τους.

Θα ήθελα να ευχαριστήσω τους προγραμματιστές και των δύο τμημάτων.

Ο κώδικας μπορεί να βρεθεί συνημμένος ως αρχείο. Χρησιμοποιήστε το με δικούς σας κινδύνους, τροποποιήστε το, βελτιώστε το, παίξτε μαζί του.

# Πνευματικά δικαιώματα 2019 Google LLC

# # Με άδεια χρήσης Apache, Έκδοση 2.0 (η "Άδεια"). # δεν μπορείτε να χρησιμοποιήσετε αυτό το αρχείο παρά μόνο σύμφωνα με την Άδεια. # Μπορείτε να λάβετε αντίγραφο της Άδειας στη διεύθυνση # # https://www.apache.org/licenses/LICENSE-2.0 # # Εκτός εάν απαιτείται από την ισχύουσα νομοθεσία ή συμφωνηθεί γραπτώς, το λογισμικό # που διανέμεται βάσει της Άδειας διανέμεται σε ΒΑΣΗ "ΟΠΩΣ ΕΙΝΑΙ", # ΧΩΡΙΣ ΕΓΓΥΗΣΕΙΣ CON ΟΡΟΙ ΟΠΟΙΟΥΔΗΠΟΤΕ ΕΙΔΟΥΣ, ρητά ή σιωπηρά. # Δείτε την Άδεια για τη συγκεκριμένη γλώσσα που διέπει τα δικαιώματα και τους # περιορισμούς βάσει της Άδειας. από _future_ εισαγωγή absolute_import από _future_ εισαγωγή διαίρεση από _future_ import print_function import argparse import os from random import randint from threading import importρα εισαγωγής νήματος από edgetpu.basic.basic_engine import BasicEngine import model pygame from pygame.locals import * import queue from random import randrange από adafruit_servokit import ServoKit import board import busio import adafruit_pca9685 import time 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 port, αριστερό servo (0-8)

rgt = 11 # αριθμός σερβο-θύρας, δεξί σερβο (0-8) led_channel_0 = καπέλο. κανάλια [0] # LED set on port 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 χορός1 = (0, 8, 7, 4, 1, 2, 3, 6, 9, 8, 5, 2, 1, 4, 7, 8, 9, 6, 3, 2 0., εντολή): 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 (self, event): if event.type == pygame. QUIT: self._running = False def JumpingJack0 (self, keys): # ελέγχους Jumping Jack, λέξεις -κλειδιά: "position x" key = int (keys) p = position [key] a = p [0] b = p [1] print ("Θέση:", κλειδί, "αριστερά /δεξιά: ", a,"/", b," βαθμό ") # sys.stdout.write (" Θέση: ", κλειδί," αριστερά/δεξιά: ", a,"/", b," βαθμό ") 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 not in range (10)): # print ("error input in position", sp) dc = 4 p = θέση [dc] a = p [0] b = p [1] kit.servo [lft].angle = a kit.servo [rgt].ango = b time.sleep (0,25) # ορίζει ταχύτητα των κινήσεων def JumpingJack2 (self, keys): # χειριστήρια 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. Ύπνος (0.1) αν led == 2: # αναβοσβήνει 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.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 (self): # ελέγχοι Jumping Jack χορός, λέξη -κλειδί: "τυχαίο παιχνίδι" # για h στο εύρος (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 (self, 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 (self, args):

αν όχι 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 while self._running: pygame.event.pump () if args.debug_keyboard: keys = pygame.key.get_pressed () else: try: new_item = q.get (Αληθινό, 0,1) εκτός από την ουρά. Κενό: new_item = Κανένα αν το νέο_item δεν είναι Κανένα: item = new_item if (args.debug_keyboard and keys [pygame. K_ESCAPE]) ή item == "stop": self._running = False # if (args.debug_keyboard και κλειδιά [pygame. K_SPACE]) ή στοιχείο == "go": # 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) if (args.debug_keyboard and keys [pygame. K_DOWN]) or item ==" down ": self. JumpingJack0 (9) if (args.debug_keyboard and keys [pygam e. K_0]) ή στοιχείο == "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]) ή στοιχείο == "2": self. JumpingJack0 (2) if (args.debug_keyboard and keys [pygame. K_3]) or item == "3": self. 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) if (args.debug_keyboard and keys [pygame. K_8]) or item ==" 8 ": self. JumpingJack0 (8) if (args.debug_keyboard and keys [pygame. K_9]) ή item == "9": self. JumpingJack0 (9) if (args.debug_keyboard and keys [pygame. K_a]) or item == "d": self. JumpingJack1 () #dancing Jack, on "next_game" if (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]) ή στοιχείο == "l": self. JumpingJack2 (1) #LED blink "target" if (args.debug_keyboard and keys [pygame. K_r]) or item == "r": self. JumpingJack3 () #random dance "τυχαίο παιχνίδι" 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, position_one, 1, position_two, 2, position_three, 3, position_four, 4, position_five, 5, position_six, 6, position_seven, 7, position_eight, 8, position_nine, 9, move_up, πάνω, go_up, πάνω, move_down, down, go_down, κάτω, μετακίνηση προς τα πίσω, αριστερά, μετακίνηση προς τα εμπρός, δεξιά, μετακίνηση προς τα πίσω, αριστερά, μετάβαση προς τα εμπρός, δεξιά, στόχος 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 "The Transmission of IP Datagrams over the Semaphore Flag Signaling System (SFSS)" (https://tools.ietf.org/html/rfc4824).

Αλλά αυτό θα είναι άλλο ένα διδακτικό. Και, καθώς τα πρώτα πειράματα έδειξαν ότι ο γρύλος άλματος θα χρειαστεί σημαντικές τροποποιήσεις προτού αναγνωριστεί ως άνθρωπος από το σύστημα τεχνητής νοημοσύνης μπορεί να απαιτήσει λίγο χρόνο.

Θα ήθελα να επιστήσω την προσοχή σας στα ακόλουθα διδακτικά: Object-Finding-Personal-Assistant-Robot-Ft-Raspberry, όπου περιγράφεται ένα ρομπότ εύρεσης αντικειμένου χρησιμοποιώντας συνδυασμό Raspberry Pi και Google Coral TPU.

Συνιστάται: