5.3 KiB
Kall objektgjenkjenneren fra IoT-enheten din - Wio Terminal
Når objektgjenkjenneren din er publisert, kan den brukes fra IoT-enheten din.
Kopier bildegjenkjenner-prosjektet
Hoveddelen av lagerdetektoren din er den samme som bildegjenkjenneren du opprettet i en tidligere leksjon.
Oppgave - kopier bildegjenkjenner-prosjektet
-
Koble ArduCam til Wio Terminal, ved å følge trinnene fra leksjon 2 i produksjonsprosjektet.
Du kan også feste kameraet i en fast posisjon, for eksempel ved å henge kabelen over en boks eller en boks, eller feste kameraet til en boks med dobbeltsidig tape.
-
Opprett et helt nytt Wio Terminal-prosjekt ved hjelp av PlatformIO. Kall dette prosjektet
stock-counter
. -
Gjenta trinnene fra leksjon 2 i produksjonsprosjektet for å ta bilder med kameraet.
-
Gjenta trinnene fra leksjon 2 i produksjonsprosjektet for å kalle bildegjenkjenneren. Hoveddelen av denne koden vil bli gjenbrukt for å oppdage objekter.
Endre koden fra en gjenkjenner til en objektgjenkjenner
Koden du brukte for å klassifisere bilder er veldig lik koden for å oppdage objekter. Den største forskjellen er URL-en som kalles, som du fikk fra Custom Vision, og resultatene av kallet.
Oppgave - endre koden fra en gjenkjenner til en objektgjenkjenner
-
Legg til følgende include-direktiv øverst i
main.cpp
-filen:#include <vector>
-
Endre navnet på funksjonen
classifyImage
tildetectStock
, både navnet på funksjonen og kallet i funksjonenbuttonPressed
. -
Over funksjonen
detectStock
, deklarer en terskelverdi for å filtrere ut deteksjoner med lav sannsynlighet:const float threshold = 0.3f;
I motsetning til en bildegjenkjenner som kun returnerer ett resultat per tag, vil objektgjenkjenneren returnere flere resultater, så de med lav sannsynlighet må filtreres ut.
-
Over funksjonen
detectStock
, deklarer en funksjon for å behandle prediksjonene: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); } }
Denne tar en liste med prediksjoner og skriver dem ut til seriellmonitoren.
-
I funksjonen
detectStock
, erstatt innholdet ifor
-løkka som går gjennom prediksjonene med følgende: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);
Denne løkker gjennom prediksjonene og sammenligner sannsynligheten med terskelverdien. Alle prediksjoner med en sannsynlighet høyere enn terskelverdien legges til en
list
og sendes til funksjonenprocessPredictions
. -
Last opp og kjør koden din. Rett kameraet mot objekter på en hylle og trykk på C-knappen. Du vil se resultatene i seriellmonitoren:
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%
💁 Du kan trenge å justere
threshold
til en passende verdi for bildene dine.Du vil kunne se bildet som ble tatt, og disse verdiene i Predictions-fanen i Custom Vision.
💁 Du finner denne koden i code-detect/wio-terminal-mappen.
😀 Lagerdetektor-programmet ditt var en suksess!
Ansvarsfraskrivelse:
Dette dokumentet er oversatt ved hjelp av AI-oversettelsestjenesten Co-op Translator. Selv om vi streber etter nøyaktighet, vær oppmerksom på at automatiserte oversettelser kan inneholde feil eller unøyaktigheter. Det originale dokumentet på sitt opprinnelige språk bør anses som den autoritative kilden. For kritisk informasjon anbefales profesjonell menneskelig oversettelse. Vi er ikke ansvarlige for misforståelser eller feiltolkninger som oppstår ved bruk av denne oversettelsen.