5.6 KiB
Nesne algılayıcınızı IoT cihazınızdan çağırın - Wio Terminal
Nesne algılayıcınız yayınlandıktan sonra, IoT cihazınızdan kullanılabilir.
Görüntü sınıflandırıcı projesini kopyalayın
Stok algılayıcınızın büyük bir kısmı, önceki bir derste oluşturduğunuz görüntü sınıflandırıcı ile aynıdır.
Görev - görüntü sınıflandırıcı projesini kopyalayın
-
ArduCam'i Wio Terminal'inize bağlayın, üretim projesinin 2. dersindeki adımları takip ederek.
Kamerayı sabit bir pozisyonda tutmak isteyebilirsiniz, örneğin kabloyu bir kutunun veya tenekenin üzerine asarak ya da kamerayı çift taraflı bantla bir kutuya sabitleyerek.
-
PlatformIO kullanarak yepyeni bir Wio Terminal projesi oluşturun. Bu projeye
stock-counter
adını verin. -
Kameradan görüntü yakalamak için üretim projesinin 2. dersindeki adımları tekrarlayın.
-
Görüntü sınıflandırıcıyı çağırmak için üretim projesinin 2. dersindeki adımları tekrarlayın. Bu kodun büyük bir kısmı nesneleri algılamak için yeniden kullanılacaktır.
Kodunuzu sınıflandırıcıdan görüntü algılayıcıya dönüştürün
Görüntüleri sınıflandırmak için kullandığınız kod, nesneleri algılamak için kullanılan koda oldukça benzerdir. Ana fark, Custom Vision'dan aldığınız çağrılan URL ve çağrının sonuçlarıdır.
Görev - kodu sınıflandırıcıdan görüntü algılayıcıya dönüştürün
-
main.cpp
dosyasının üst kısmına aşağıdaki include direktifini ekleyin:#include <vector>
-
classifyImage
fonksiyonunun adınıdetectStock
olarak değiştirin, hem fonksiyonun adını hem debuttonPressed
fonksiyonundaki çağrıyı. -
detectStock
fonksiyonunun üstünde, düşük olasılığa sahip algılamaları filtrelemek için bir eşik değeri tanımlayın:const float threshold = 0.3f;
Görüntü sınıflandırıcı yalnızca her etiket için bir sonuç döndürürken, nesne algılayıcı birden fazla sonuç döndürecektir. Bu nedenle, düşük olasılığa sahip olanlar filtrelenmelidir.
-
detectStock
fonksiyonunun üstünde, tahminleri işlemek için bir fonksiyon tanımlayın: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); } }
Bu, bir tahmin listesini alır ve seri monitöre yazdırır.
-
detectStock
fonksiyonunda, tahminler arasında döngü yapanfor
döngüsünün içeriğini aşağıdakiyle değiştirin: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);
Bu, tahminler arasında döngü yapar ve olasılığı eşik değeriyle karşılaştırır. Eşik değerinden yüksek olasılığa sahip tüm tahminler bir
list
içine eklenir veprocessPredictions
fonksiyonuna iletilir. -
Kodunuzu yükleyin ve çalıştırın. Kamerayı bir raftaki nesnelere doğrultun ve C düğmesine basın. Seri monitörde çıktıyı göreceksiniz:
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%
💁 Görüntüleriniz için uygun bir değer belirlemek amacıyla
threshold
değerini ayarlamanız gerekebilir.Çekilen görüntüyü ve bu değerleri Custom Vision'daki Predictions sekmesinde görebileceksiniz.
💁 Bu kodu code-detect/wio-terminal klasöründe bulabilirsiniz.
😀 Stok sayacı programınız başarıyla tamamlandı!
Feragatname:
Bu belge, Co-op Translator adlı yapay zeka çeviri hizmeti kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Orijinal belgenin kendi dilindeki hali, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.