5.3 KiB
Panggil detektor objek Anda dari perangkat IoT - Wio Terminal
Setelah detektor objek Anda dipublikasikan, Anda dapat menggunakannya dari perangkat IoT Anda.
Salin proyek pengklasifikasi gambar
Sebagian besar detektor stok Anda sama dengan pengklasifikasi gambar yang Anda buat di pelajaran sebelumnya.
Tugas - salin proyek pengklasifikasi gambar
-
Hubungkan ArduCam Anda ke Wio Terminal, mengikuti langkah-langkah dari pelajaran 2 dari proyek manufaktur.
Anda mungkin juga ingin memperbaiki posisi kamera, misalnya, dengan menggantung kabel di atas kotak atau kaleng, atau menempelkan kamera ke kotak menggunakan selotip dua sisi.
-
Buat proyek Wio Terminal baru menggunakan PlatformIO. Beri nama proyek ini
stock-counter
. -
Ikuti langkah-langkah dari pelajaran 2 dari proyek manufaktur untuk menangkap gambar dari kamera.
-
Ikuti langkah-langkah dari pelajaran 2 dari proyek manufaktur untuk memanggil pengklasifikasi gambar. Sebagian besar kode ini akan digunakan kembali untuk mendeteksi objek.
Ubah kode dari pengklasifikasi menjadi detektor gambar
Kode yang Anda gunakan untuk mengklasifikasi gambar sangat mirip dengan kode untuk mendeteksi objek. Perbedaan utamanya adalah URL yang dipanggil yang Anda dapatkan dari Custom Vision, dan hasil dari panggilan tersebut.
Tugas - ubah kode dari pengklasifikasi menjadi detektor gambar
-
Tambahkan directive include berikut ke bagian atas file
main.cpp
:#include <vector>
-
Ubah nama fungsi
classifyImage
menjadidetectStock
, baik nama fungsi maupun panggilan dalam fungsibuttonPressed
. -
Di atas fungsi
detectStock
, deklarasikan ambang batas untuk menyaring deteksi dengan probabilitas rendah:const float threshold = 0.3f;
Berbeda dengan pengklasifikasi gambar yang hanya mengembalikan satu hasil per tag, detektor objek akan mengembalikan beberapa hasil, sehingga deteksi dengan probabilitas rendah perlu disaring.
-
Di atas fungsi
detectStock
, deklarasikan fungsi untuk memproses prediksi: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); } }
Fungsi ini mengambil daftar prediksi dan mencetaknya ke monitor serial.
-
Dalam fungsi
detectStock
, ganti isi darifor
loop yang melintasi prediksi dengan berikut ini: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);
Loop ini melintasi prediksi, membandingkan probabilitas dengan ambang batas. Semua prediksi dengan probabilitas lebih tinggi dari ambang batas ditambahkan ke
list
dan diteruskan ke fungsiprocessPredictions
. -
Unggah dan jalankan kode Anda. Arahkan kamera ke objek di rak dan tekan tombol C. Anda akan melihat output di monitor serial:
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%
💁 Anda mungkin perlu menyesuaikan
threshold
ke nilai yang sesuai untuk gambar Anda.Anda akan dapat melihat gambar yang diambil, dan nilai-nilai ini di tab Predictions di Custom Vision.
💁 Anda dapat menemukan kode ini di folder code-detect/wio-terminal.
😀 Program penghitung stok Anda berhasil!
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan hasil yang akurat, harap diingat bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang bersifat kritis, disarankan menggunakan jasa penerjemahan profesional oleh manusia. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang keliru yang timbul dari penggunaan terjemahan ini.