8.4 KiB
Κάλεσε τον ανιχνευτή αντικειμένων από τη συσκευή IoT σου - Wio Terminal
Μόλις ο ανιχνευτής αντικειμένων σου δημοσιευτεί, μπορεί να χρησιμοποιηθεί από τη συσκευή IoT σου.
Αντιγραφή του έργου ταξινόμησης εικόνων
Το μεγαλύτερο μέρος του ανιχνευτή αποθεμάτων σου είναι ίδιο με τον ταξινομητή εικόνων που δημιούργησες σε προηγούμενο μάθημα.
Εργασία - Αντιγραφή του έργου ταξινόμησης εικόνων
-
Σύνδεσε την ArduCam σου στο Wio Terminal, ακολουθώντας τα βήματα από το μάθημα 2 του έργου κατασκευής.
Ίσως θελήσεις επίσης να σταθεροποιήσεις την κάμερα σε μια συγκεκριμένη θέση, για παράδειγμα, κρεμώντας το καλώδιο πάνω από ένα κουτί ή κονσέρβα, ή στερεώνοντας την κάμερα σε ένα κουτί με διπλής όψης ταινία.
-
Δημιούργησε ένα ολοκαίνουργιο έργο Wio Terminal χρησιμοποιώντας το PlatformIO. Ονόμασε αυτό το έργο
stock-counter
. -
Αντέγραψε τα βήματα από το μάθημα 2 του έργου κατασκευής για να τραβήξεις εικόνες από την κάμερα.
-
Αντέγραψε τα βήματα από το μάθημα 2 του έργου κατασκευής για να καλέσεις τον ταξινομητή εικόνων. Το μεγαλύτερο μέρος αυτού του κώδικα θα επαναχρησιμοποιηθεί για την ανίχνευση αντικειμένων.
Τροποποίηση του κώδικα από ταξινομητή σε ανιχνευτή εικόνων
Ο κώδικας που χρησιμοποίησες για την ταξινόμηση εικόνων είναι πολύ παρόμοιος με τον κώδικα για την ανίχνευση αντικειμένων. Η κύρια διαφορά είναι το URL που καλείται, το οποίο έλαβες από το Custom Vision, και τα αποτελέσματα της κλήσης.
Εργασία - Τροποποίηση του κώδικα από ταξινομητή σε ανιχνευτή εικόνων
-
Πρόσθεσε την παρακάτω οδηγία
include
στην κορυφή του αρχείουmain.cpp
:#include <vector>
-
Μετονόμασε τη συνάρτηση
classifyImage
σεdetectStock
, τόσο το όνομα της συνάρτησης όσο και την κλήση της στη συνάρτησηbuttonPressed
. -
Πάνω από τη συνάρτηση
detectStock
, δήλωσε ένα κατώφλι για να φιλτράρεις οποιαδήποτε ανίχνευση έχει χαμηλή πιθανότητα:const float threshold = 0.3f;
Σε αντίθεση με έναν ταξινομητή εικόνων που επιστρέφει μόνο ένα αποτέλεσμα ανά ετικέτα, ο ανιχνευτής αντικειμένων θα επιστρέψει πολλαπλά αποτελέσματα, οπότε οποιαδήποτε με χαμηλή πιθανότητα πρέπει να φιλτραριστούν.
-
Πάνω από τη συνάρτηση
detectStock
, δήλωσε μια συνάρτηση για την επεξεργασία των προβλέψεων:void processPredictions(std::vector<JsonVariant> &predictions) { for(JsonVariant prediction : predictions) { String tag = prediction["tagName"].as<String>(); float probability = prediction["probability"].as<float>(); char buff[32]; sprintf(buff, "%s:\t%.2f%%", tag.c_str(), probability * 100.0); Serial.println(buff); } }
Αυτή λαμβάνει μια λίστα προβλέψεων και τις εκτυπώνει στην οθόνη σειριακής επικοινωνίας.
-
Στη συνάρτηση
detectStock
, αντικατάστησε το περιεχόμενο τουfor
loop που διατρέχει τις προβλέψεις με το εξής:std::vector<JsonVariant> passed_predictions; for(JsonVariant prediction : predictions) { float probability = prediction["probability"].as<float>(); if (probability > threshold) { passed_predictions.push_back(prediction); } } processPredictions(passed_predictions);
Αυτό διατρέχει τις προβλέψεις, συγκρίνοντας την πιθανότητα με το κατώφλι. Όλες οι προβλέψεις που έχουν πιθανότητα μεγαλύτερη από το κατώφλι προστίθενται σε μια
λίστα
και περνούν στη συνάρτησηprocessPredictions
. -
Ανέβασε και εκτέλεσε τον κώδικά σου. Στρέψε την κάμερα σε αντικείμενα σε ένα ράφι και πάτησε το κουμπί C. Θα δεις την έξοδο στην οθόνη σειριακής επικοινωνίας:
Connecting to WiFi.. Connected! Image captured Image read to buffer with length 17416 tomato paste: 35.84% tomato paste: 35.87% tomato paste: 34.11% tomato paste: 35.16%
💁 Ίσως χρειαστεί να προσαρμόσεις το
threshold
σε μια κατάλληλη τιμή για τις εικόνες σου.Θα μπορείς να δεις την εικόνα που τραβήχτηκε και αυτές τις τιμές στην καρτέλα Predictions στο Custom Vision.
💁 Μπορείς να βρεις αυτόν τον κώδικα στον φάκελο code-detect/wio-terminal.
😀 Το πρόγραμμα καταμέτρησης αποθεμάτων σου ήταν επιτυχές!
Αποποίηση ευθύνης:
Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης Co-op Translator. Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης.