5.1 KiB
Pokličite svoj detektor objektov iz IoT naprave - Wio Terminal
Ko je vaš detektor objektov objavljen, ga lahko uporabite iz svoje IoT naprave.
Kopirajte projekt za razvrščanje slik
Večina vašega detektorja zalog je enaka kot razvrščevalnik slik, ki ste ga ustvarili v prejšnji lekciji.
Naloga - kopirajte projekt za razvrščanje slik
-
Povežite svojo ArduCam z Wio Terminalom, tako da sledite korakom iz lekcije 2 proizvodnega projekta.
Morda boste želeli kamero pritrditi v en položaj, na primer tako, da kabel obesite čez škatlo ali pločevinko, ali pa kamero pritrdite na škatlo z dvostranskim lepilnim trakom.
-
Ustvarite povsem nov projekt za Wio Terminal z uporabo PlatformIO. Poimenujte ta projekt
stock-counter
. -
Ponovite korake iz lekcije 2 proizvodnega projekta za zajem slik s kamere.
-
Ponovite korake iz lekcije 2 proizvodnega projekta za klic razvrščevalnika slik. Večina te kode bo ponovno uporabljena za zaznavanje objektov.
Spremenite kodo iz razvrščevalnika v detektor slik
Koda, ki ste jo uporabili za razvrščanje slik, je zelo podobna kodi za zaznavanje objektov. Glavna razlika je URL, ki ste ga pridobili iz Custom Vision, in rezultati klica.
Naloga - spremenite kodo iz razvrščevalnika v detektor slik
-
Dodajte naslednjo direktivo
include
na vrh datotekemain.cpp
:#include <vector>
-
Preimenujte funkcijo
classifyImage
vdetectStock
, tako ime funkcije kot klic v funkcijibuttonPressed
. -
Nad funkcijo
detectStock
deklarirajte prag za filtriranje vseh zaznavanj z nizko verjetnostjo:const float threshold = 0.3f;
Za razliko od razvrščevalnika slik, ki vrne samo en rezultat na oznako, detektor objektov vrne več rezultatov, zato je treba vse z nizko verjetnostjo filtrirati.
-
Nad funkcijo
detectStock
deklarirajte funkcijo za obdelavo napovedi: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); } }
Ta funkcija sprejme seznam napovedi in jih natisne na serijski monitor.
-
V funkciji
detectStock
zamenjajte vsebino zankefor
, ki pregleduje napovedi, z naslednjim: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);
Ta zanka pregleduje napovedi in primerja verjetnost s pragom. Vse napovedi z verjetnostjo, višjo od praga, se dodajo v
list
in posredujejo funkcijiprocessPredictions
. -
Naložite in zaženite svojo kodo. Usmerite kamero na predmete na polici in pritisnite gumb C. Rezultate boste videli na serijskem monitorju:
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%
💁 Morda boste morali prilagoditi
threshold
na ustrezno vrednost za vaše slike.Videli boste sliko, ki je bila posneta, in te vrednosti v zavihku Predictions v Custom Vision.
💁 To kodo lahko najdete v mapi code-detect/wio-terminal.
😀 Vaš program za štetje zalog je bil uspešen!
Omejitev odgovornosti:
Ta dokument je bil preveden z uporabo storitve za strojno prevajanje Co-op Translator. Čeprav si prizadevamo za natančnost, vas opozarjamo, da lahko avtomatizirani prevodi vsebujejo napake ali netočnosti. Izvirni dokument v njegovem izvirnem jeziku je treba obravnavati kot avtoritativni vir. Za ključne informacije priporočamo strokovno človeško prevajanje. Ne prevzemamo odgovornosti za morebitna nesporazumevanja ali napačne razlage, ki izhajajo iz uporabe tega prevoda.