5.4 KiB
Paleiskite savo objektų detektorių iš IoT įrenginio - Wio Terminal
Kai jūsų objektų detektorius bus paskelbtas, jį galėsite naudoti iš savo IoT įrenginio.
Nukopijuokite vaizdų klasifikatoriaus projektą
Dauguma jūsų atsargų detektoriaus kodo yra tokia pati kaip vaizdų klasifikatoriaus, kurį sukūrėte ankstesnėje pamokoje.
Užduotis - nukopijuokite vaizdų klasifikatoriaus projektą
-
Prijunkite savo ArduCam prie Wio Terminal, vadovaudamiesi 2-osios gamybos projekto pamokos žingsniais.
Taip pat galite pritvirtinti kamerą vienoje pozicijoje, pavyzdžiui, pakabindami kabelį virš dėžutės ar skardinės arba pritvirtindami kamerą prie dėžutės su dvipuse lipnia juosta.
-
Sukurkite visiškai naują Wio Terminal projektą naudodami PlatformIO. Pavadinkite šį projektą
stock-counter
. -
Pakartokite žingsnius iš 2-osios gamybos projekto pamokos, kad užfiksuotumėte vaizdus iš kameros.
-
Pakartokite žingsnius iš 2-osios gamybos projekto pamokos, kad iškviestumėte vaizdų klasifikatorių. Dauguma šio kodo bus panaudota objektų aptikimui.
Pakeiskite kodą iš klasifikatoriaus į vaizdų detektorių
Kodas, kurį naudojote vaizdams klasifikuoti, yra labai panašus į kodą, skirtą objektams aptikti. Pagrindinis skirtumas yra URL, kurį gavote iš Custom Vision, ir skambučio rezultatai.
Užduotis - pakeiskite kodą iš klasifikatoriaus į vaizdų detektorių
-
Pridėkite šią
include
direktyvą failomain.cpp
viršuje:#include <vector>
-
Pervardykite funkciją
classifyImage
įdetectStock
, tiek funkcijos pavadinimą, tiek jos iškvietimą funkcijojebuttonPressed
. -
Virš funkcijos
detectStock
deklaruokite slenkstį, kad atmestumėte aptikimus su maža tikimybe:const float threshold = 0.3f;
Skirtingai nuo vaizdų klasifikatoriaus, kuris grąžina tik vieną rezultatą kiekvienai žymai, objektų detektorius grąžina kelis rezultatus, todėl tie, kurių tikimybė maža, turi būti atmesti.
-
Virš funkcijos
detectStock
deklaruokite funkciją, skirtą apdoroti prognozes: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); } }
Ši funkcija priima prognozių sąrašą ir išveda jas į serijinį monitorių.
-
Funkcijoje
detectStock
pakeiskitefor
ciklo, kuris iteruoja per prognozes, turinį šiuo: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);
Šis ciklas iteruoja per prognozes, lygindamas tikimybę su slenksčiu. Visos prognozės, kurių tikimybė didesnė už slenkstį, pridedamos į
list
ir perduodamos funkcijaiprocessPredictions
. -
Įkelkite ir paleiskite savo kodą. Nukreipkite kamerą į objektus lentynoje ir paspauskite C mygtuką. Rezultatus pamatysite serijiniame monitoriuje:
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%
💁 Gali tekti pritaikyti
threshold
reikšmę, kad ji atitiktų jūsų vaizdus.Galėsite pamatyti užfiksuotą vaizdą ir šias reikšmes Predictions skirtuke Custom Vision.
💁 Šį kodą galite rasti code-detect/wio-terminal aplanke.
😀 Jūsų atsargų skaičiavimo programa buvo sėkminga!
Atsakomybės atsisakymas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.