5.6 KiB
Hívd meg az objektumdetektorodat az IoT eszközödről - Wio Terminal
Miután az objektumdetektorodat közzétetted, használhatod az IoT eszközödről.
Másold az képosztályozó projektet
Az objektumdetektorod nagy része megegyezik azzal a képosztályozóval, amelyet egy korábbi leckében készítettél.
Feladat - másold az képosztályozó projektet
-
Csatlakoztasd az ArduCam kamerát a Wio Terminalhoz, a gyártási projekt 2. leckéjében leírt lépések szerint.
Érdemes lehet a kamerát egy fix pozícióba rögzíteni, például úgy, hogy a kábelt egy doboz vagy konzerv fölé akasztod, vagy a kamerát kétoldalas ragasztóval egy dobozhoz rögzíted.
-
Hozz létre egy teljesen új Wio Terminal projektet a PlatformIO segítségével. Nevezd el a projektet
stock-counter
-nek. -
Ismételd meg a lépéseket a gyártási projekt 2. leckéjéből, hogy képeket készíts a kamerával.
-
Ismételd meg a lépéseket a gyártási projekt 2. leckéjéből, hogy meghívd a képosztályozót. Ennek a kódnak a nagy része újra felhasználható az objektumok detektálásához.
Módosítsd a kódot osztályozóról objektumdetektorra
A képek osztályozására használt kód nagyon hasonló az objektumok detektálására használt kódhoz. A fő különbség az URL, amelyet a Custom Vision-től kaptál, és a hívás eredményei.
Feladat - módosítsd a kódot osztályozóról objektumdetektorra
-
Add hozzá a következő include direktívát a
main.cpp
fájl tetejéhez:#include <vector>
-
Nevezd át a
classifyImage
függvénytdetectStock
-ra, mind a függvény nevét, mind abuttonPressed
függvényben lévő hívást. -
A
detectStock
függvény fölött deklarálj egy küszöbértéket, hogy kiszűrd az alacsony valószínűségű detektálásokat:const float threshold = 0.3f;
Ellentétben a képosztályozóval, amely csak egy eredményt ad vissza címkénként, az objektumdetektor több eredményt ad vissza, így az alacsony valószínűségűeket ki kell szűrni.
-
A
detectStock
függvény fölött deklarálj egy függvényt a predikciók feldolgozására: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); } }
Ez egy predikciók listáját veszi át, és kiírja őket a soros monitorra.
-
A
detectStock
függvényben cseréld ki a predikciókat végigjárófor
ciklus tartalmát a következőre: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);
Ez végigmegy a predikciókon, összehasonlítja a valószínűséget a küszöbértékkel. Az összes olyan predikció, amelynek valószínűsége magasabb a küszöbértéknél, hozzáadódik egy
list
-hez, és átadódik aprocessPredictions
függvénynek. -
Töltsd fel és futtasd a kódot. Irányítsd a kamerát a polcon lévő tárgyakra, és nyomd meg a C gombot. Az eredményt a soros monitoron fogod látni:
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%
💁 Lehet, hogy a
threshold
értékét hozzá kell igazítanod a képeidhez.Látni fogod a készített képet, és ezeket az értékeket a Predictions fülön a Custom Vision-ben.
💁 Ezt a kódot megtalálod a code-detect/wio-terminal mappában.
😀 A készlet számláló programod sikeres volt!
Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Kritikus információk esetén javasolt professzionális emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.