5.6 KiB
Tawagin ang iyong object detector mula sa iyong IoT device - Wio Terminal
Kapag na-publish na ang iyong object detector, maaari na itong gamitin mula sa iyong IoT device.
Kopyahin ang proyekto ng image classifier
Ang karamihan sa iyong stock detector ay pareho sa image classifier na ginawa mo sa nakaraang aralin.
Gawain - kopyahin ang proyekto ng image classifier
-
Ikonekta ang iyong ArduCam sa iyong Wio Terminal, sundan ang mga hakbang mula sa aralin 2 ng manufacturing project.
Maaari mo ring ayusin ang camera sa isang posisyon, halimbawa, sa pamamagitan ng pagbitin ng cable sa ibabaw ng kahon o lata, o pagdikit ng camera sa kahon gamit ang double-sided tape.
-
Gumawa ng bagong proyekto para sa Wio Terminal gamit ang PlatformIO. Tawagin ang proyektong ito na
stock-counter
. -
Ulitin ang mga hakbang mula sa aralin 2 ng manufacturing project upang kumuha ng mga larawan mula sa camera.
-
Ulitin ang mga hakbang mula sa aralin 2 ng manufacturing project upang tawagin ang image classifier. Ang karamihan sa code na ito ay muling gagamitin upang mag-detect ng mga object.
Baguhin ang code mula sa classifier patungo sa image detector
Ang code na ginamit mo upang mag-classify ng mga larawan ay halos pareho sa code para mag-detect ng mga object. Ang pangunahing pagkakaiba ay ang URL na tinatawag na nakuha mo mula sa Custom Vision, at ang resulta ng tawag.
Gawain - baguhin ang code mula sa classifier patungo sa image detector
-
Idagdag ang sumusunod na include directive sa itaas ng file na
main.cpp
:#include <vector>
-
Palitan ang pangalan ng function na
classifyImage
sadetectStock
, parehong pangalan ng function at ang tawag sabuttonPressed
function. -
Sa itaas ng function na
detectStock
, magdeklara ng threshold upang i-filter ang anumang detections na may mababang probability:const float threshold = 0.3f;
Hindi tulad ng image classifier na nagbabalik lamang ng isang resulta bawat tag, ang object detector ay magbabalik ng maraming resulta, kaya ang anumang may mababang probability ay kailangang i-filter.
-
Sa itaas ng function na
detectStock
, magdeklara ng function upang iproseso ang mga predictions: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); } }
Kinukuha nito ang listahan ng mga predictions at ipinapakita ang mga ito sa serial monitor.
-
Sa function na
detectStock
, palitan ang nilalaman ngfor
loop na nag-loop sa mga predictions gamit ang sumusunod: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);
Ang loop na ito ay nagko-compare ng probability sa threshold. Lahat ng predictions na may probability na mas mataas sa threshold ay idinadagdag sa isang
list
at ipinapasa sa function naprocessPredictions
. -
I-upload at patakbuhin ang iyong code. Itutok ang camera sa mga object sa isang shelf at pindutin ang C button. Makikita mo ang output sa serial monitor:
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%
💁 Maaaring kailanganin mong ayusin ang
threshold
sa naaangkop na halaga para sa iyong mga larawan.Makikita mo ang larawan na kinuha, at ang mga value na ito sa Predictions tab sa Custom Vision.
💁 Makikita mo ang code na ito sa code-detect/wio-terminal folder.
😀 Tagumpay ang iyong stock counter program!
Paunawa:
Ang dokumentong ito ay isinalin gamit ang AI translation service na Co-op Translator. Bagama't sinisikap naming maging tumpak, tandaan na ang mga awtomatikong pagsasalin ay maaaring maglaman ng mga pagkakamali o hindi pagkakatugma. Ang orihinal na dokumento sa kanyang katutubong wika ang dapat ituring na opisyal na sanggunian. Para sa mahalagang impormasyon, inirerekomenda ang propesyonal na pagsasalin ng tao. Hindi kami mananagot sa anumang hindi pagkakaunawaan o maling interpretasyon na maaaring magmula sa paggamit ng pagsasaling ito.