5.3 KiB
Zavolajte svoj detektor objektov z IoT zariadenia - Wio Terminal
Keď je váš detektor objektov publikovaný, môžete ho používať zo svojho IoT zariadenia.
Skopírujte projekt klasifikátora obrázkov
Väčšina vášho detektora zásob je rovnaká ako klasifikátor obrázkov, ktorý ste vytvorili v predchádzajúcej lekcii.
Úloha - skopírujte projekt klasifikátora obrázkov
-
Pripojte svoju ArduCam k Wio Terminalu podľa krokov z lekcie 2 výrobného projektu.
Môžete tiež upevniť kameru do jednej polohy, napríklad zavesením kábla cez krabicu alebo plechovku, alebo pripevnením kamery na krabicu pomocou obojstrannej lepiacej pásky.
-
Vytvorte úplne nový projekt pre Wio Terminal pomocou PlatformIO. Nazvite tento projekt
stock-counter
. -
Zopakujte kroky z lekcie 2 výrobného projektu na zachytenie obrázkov z kamery.
-
Zopakujte kroky z lekcie 2 výrobného projektu na zavolanie klasifikátora obrázkov. Väčšina tohto kódu bude znovu použitá na detekciu objektov.
Zmeňte kód z klasifikátora na detektor obrázkov
Kód, ktorý ste použili na klasifikáciu obrázkov, je veľmi podobný kódu na detekciu objektov. Hlavný rozdiel je v URL, ktoré ste získali z Custom Vision, a výsledkoch volania.
Úloha - zmeňte kód z klasifikátora na detektor obrázkov
-
Pridajte nasledujúci direktív na začiatok súboru
main.cpp
:#include <vector>
-
Premenujte funkciu
classifyImage
nadetectStock
, a to ako názov funkcie, tak aj volanie vo funkciibuttonPressed
. -
Nad funkciou
detectStock
deklarujte prahovú hodnotu na filtrovanie detekcií s nízkou pravdepodobnosťou:const float threshold = 0.3f;
Na rozdiel od klasifikátora obrázkov, ktorý vracia iba jeden výsledok na značku, detektor objektov vráti viacero výsledkov, takže tie s nízkou pravdepodobnosťou je potrebné filtrovať.
-
Nad funkciou
detectStock
deklarujte funkciu na spracovanie predikcií: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); } }
Táto funkcia vezme zoznam predikcií a vytlačí ich do sériového monitora.
-
Vo funkcii
detectStock
nahraďte obsah cyklufor
, ktorý prechádza predikciami, nasledujúcim: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);
Tento cyklus prechádza predikciami a porovnáva pravdepodobnosť s prahovou hodnotou. Všetky predikcie s pravdepodobnosťou vyššou ako prahová hodnota sa pridajú do zoznamu a odovzdajú funkcii
processPredictions
. -
Nahrajte a spustite svoj kód. Namierte kameru na objekty na poličke a stlačte tlačidlo C. Výstup uvidíte v sériovom monitore:
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%
💁 Možno budete musieť upraviť hodnotu
threshold
na vhodnú hodnotu pre vaše obrázky.Budete môcť vidieť obrázok, ktorý bol zachytený, a tieto hodnoty na karte Predictions v Custom Vision.
💁 Tento kód nájdete v priečinku code-detect/wio-terminal.
😀 Váš program na počítanie zásob bol úspešný!
Upozornenie:
Tento dokument bol preložený pomocou služby AI prekladu Co-op Translator. Hoci sa snažíme o presnosť, prosím, berte na vedomie, že automatizované preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho rodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nie sme zodpovední za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.