Tutorial: Menggunakan Custom Vision dengan perangkat IoT untuk melaporkan status visual

Aplikasi sampel ini menggambarkan cara menggunakan Custom Vision untuk melatih perangkat dengan kamera untuk mendeteksi status visual. Anda dapat menjalankan skenario deteksi ini pada perangkat IoT menggunakan model ONNX yang diekspor.

Status visual menjelaskan konten gambar: ruang kosong atau ruangan dengan orang, jalan masuk kosong atau jalan masuk dengan truk, dan sebagainya. Pada gambar di bawah ini, Anda dapat melihat aplikasi mendeteksi saat pisang atau apel ditempatkan di depan kamera.

Animation of a UI labeling fruit in front of the camera

Tutorial ini akan menunjukkan kepada Anda cara:

  • Mengonfigurasi aplikasi sampel untuk menggunakan sumber daya Custom Vision dan IoT Hub Anda sendiri.
  • Menggunakan aplikasi untuk melatih proyek Custom Vision Anda.
  • Menggunakan aplikasi untuk menilai gambar baru secara real time dan mengirim hasilnya ke Azure.

Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Prasyarat

  • Untuk menggunakan Layanan Tampilan Kustom, Anda harus membuat sumber daya Pelatihan dan Prediksi Tampilan Kustom di Azure. Untuk melakukannya di portal Microsoft Azure, isi jendela dialog di halaman Buat Visi Kustom untuk membuat sumber daya Pelatihan dan Prediksi.

    Penting

    Proyek ini perlu menjadi proyek klasifikasi gambar Ringkas, karena kita akan mengekspor model ke ONNX nantinya.

  • Anda juga harus membuat sumber daya IoT Hub di Azure.
  • Visual Studio 2015 atau yang lebih baru
  • Secara opsional, perangkat IoT yang menjalankan Windows 10 IoT Core versi 17763 atau lebih tinggi. Anda juga dapat menjalankan aplikasi langsung dari PC Anda.
    • Untuk Raspberry Pi 2 dan 3, Anda dapat menyiapkan Windows 10 langsung dari aplikasi Dasbor IoT. Untuk perangkat lain seperti DrangonBoard, Anda harus mem-flashnya menggunakan metode eMMC. Jika Anda memerlukan bantuan dalam menyiapkan perangkat baru, lihat Menyiapkan perangkat Anda di dokumentasi Windows IoT.

Tentang aplikasi Pemberitahuan Visual

Aplikasi Pemberitahuan Visual IoT berjalan dalam perulangan berkelanjutan, beralih di antara empat status berbeda yang sesuai:

  • Tanpa Model: Status no-op. Aplikasi ini akan terus tidur selama satu detik lalu memeriksa kamera.
  • Mengambil Gambar Pelatihan: Dalam status ini, aplikasi mengambil gambar dan mengunggahnya sebagai gambar pelatihan ke proyek Custom Vision target. Aplikasi kemudian tidur selama 500 md dan mengulangi operasi sampai jumlah target gambar yang ditetapkan telah diambil. Aplikasi kemudian memicu pelatihan model Custom Vision.
  • Menunggu Model Terlatih: Dalam status ini, aplikasi memanggil Custom Vision API setiap detik untuk memeriksa apakah proyek target berisi perulangan terlatih. Ketika menemukan perulangan terlatih, aplikasi mengunduh model ONNX yang sesuai ke file lokal dan beralih ke status Penilaian.
  • Penilaian: Dalam status ini, aplikasi ini menggunakan ML Windows untuk mengevaluasi satu bingkai dari kamera terhadap model ONNX lokal. Klasifikasi gambar yang dihasilkan ditampilkan di layar dan dikirim sebagai pesan ke IoT Hub. Aplikasi ini kemudian tidur selama satu detik sebelum menilai gambar baru.

Memeriksa struktur kode

File berikut menangani fungsionalitas utama aplikasi.

File Deskripsi
MainPage.xaml File ini menentukan antarmuka pengguna XAML. File ini menghosting kontrol kamera web dan berisi label yang digunakan untuk pembaruan status.
MainPage.xaml.cs Kode ini mengontrol perilaku antarmuka pengguna XAML. Ini berisi kode pemrosesan mesin status.
CustomVision\CustomVisionServiceWrapper.cs Kelas ini adalah wrapper yang menangani integrasi dengan Layanan Custom Vision.
CustomVision\CustomVisionONNXModel.cs Kelas ini adalah wrapper yang menangani integrasi dengan ML Windows untuk memuat model ONNX dan menilai gambar terhadapnya.
IoTHub\IotHubWrapper.cs Kelas ini adalah wrapper yang menangani integrasi dengan IoT Hub untuk mengunggah hasil penilaian ke Azure.

Menyiapkan aplikasi Pemberitahuan Visual

Ikuti langkah-langkah ini untuk menjalankan aplikasi Pemberitahuan Visual IoT di PC atau perangkat IoT Anda.

  1. Klon atau unduh sampel IoTVisualAlerts di GitHub.
  2. Buka solusi IoTVisualAlerts.sln di Visual Studio
  3. Integrasikan proyek Custom Vision Anda:
    1. Dalam skrip CustomVision\CustomVisionServiceWrapper.cs, perbarui variabel ApiKey dengan kunci pelatihan Anda.
    2. Kemudian perbarui variabel Endpoint dengan URL titik akhir yang terkait dengan kunci Anda.
    3. Perbarui variabel targetCVSProjectGuid dengan ID terkait dari proyek Custom Vision yang ingin Anda gunakan.
  4. Siapkan sumber daya IoT Hub:
    1. Dalam skrip IoTHub\IotHubWrapper.cs, perbarui variabel s_connectionString dengan string koneksi yang tepat untuk perangkat Anda.
    2. Pada portal Azure, muat instans IoT Hub Anda, pilih perangkat IoT di bawah Penjelajah, pilih pada perangkat target Anda (atau buat jika diperlukan), dan temukan string koneksi di bawah String Koneksi ion Utama. String akan berisi nama IoT Hub, ID perangkat, dan kunci akses bersama; ini memiliki format berikut: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

Menjalankan aplikasi

Jika Anda menjalankan aplikasi di PC, pilih Komputer Lokal untuk perangkat target di Visual Studio, dan pilih x64 atau x86 untuk platform target. Kemudian tekan F5 untuk menjalankan program. Aplikasi akan dimulai dan menampilkan umpan langsung dari kamera dan pesan status.

Jika Anda menyebarkan ke perangkat IoT dengan prosesor ARM, Anda harus memilih ARM sebagai platform target dan Komputer Jarak Jauh sebagai perangkat target. Berikan alamat IP perangkat Anda ketika diminta (harus berada di jaringan yang sama dengan PC Anda). Anda bisa mendapatkan Alamat IP dari aplikasi default Windows IoT setelah Anda mem-boot perangkat dan menyambungkannya ke jaringan. Tekan F5 untuk menjalankan program.

Saat Anda menjalankan aplikasi untuk pertama kalinya, aplikasi ini tidak akan memiliki pengetahuan tentang status visual. Aplikasi akan menampilkan pesan status bahwa tidak ada model yang tersedia.

Mengambil gambar pelatihan

Untuk menyiapkan model, Anda perlu meletakkan aplikasi dalam status Mengambil Gambar Pelatihan. Ikuti salah satu langkah berikut ini:

  • Jika Anda menjalankan aplikasi di PC, gunakan tombol di sudut kanan atas antarmuka pengguna.
  • Jika Anda menjalankan aplikasi di perangkat IoT, panggil metode EnterLearningMode pada perangkat melalui IoT Hub. Anda dapat memanggilnya melalui entri perangkat di menu IoT Hub di portal Azure, atau dengan alat seperti IoT Hub Device Explorer.

Ketika aplikasi berada di status Mengambil Gambar Pelatihan, aplikasi akan mengambil sekitar dua gambar setiap detik sampai mencapai jumlah target gambar. Secara default, targetnya adalah 30 gambar, tetapi Anda dapat mengatur parameter ini dengan meneruskan angka yang diinginkan sebagai argumen ke metode IoT Hub EnterLearningMode.

Saat aplikasi mengambil gambar, Anda harus mengekspos kamera ke jenis status visual yang ingin Anda deteksi (misalnya, ruang kosong, ruangan dengan orang, meja kosong, meja dengan truk mainan, dan sebagainya).

Melatih model Custom Vision

Setelah aplikasi selesai mengambil gambar, aplikasi akan mengunggahnya dan kemudian beralih ke status Menunggu Model Terlatih. Pada titik ini, Anda harus pergi ke situs web Custom Vision dan membangun model berdasarkan gambar pelatihan baru. Animasi berikut ini memperlihatkan contoh proses ini.

Animation: tagging multiple images of bananas

Untuk mengulangi proses ini dengan skenario Anda sendiri:

  1. Masuk ke situs web Custom Vision.
  2. Temukan proyek target Anda, yang sekarang seharusnya sudah memiliki semua gambar pelatihan yang diunggah aplikasi.
  3. Untuk setiap status visual yang ingin Anda identifikasi, pilih gambar yang sesuai dan terapkan tag secara manual.
    • Misalnya, jika tujuan Anda adalah membedakan antara ruang kosong dan ruangan dengan orang di dalamnya, kami sarankan memberi tag lima atau lebih gambar dengan orang sebagai kelas baru, People, dan memberi tag lima atau lebih gambar yang tidak ada orangnya sebagai tag Negative. Ini akan membantu model membedakan antara kedua status.
    • Sebagai contoh lain, jika tujuan Anda adalah untuk memperkirakan seberapa penuh rak, maka Anda mungkin menggunakan tag seperti EmptyShelf, PartiallyFullShelf, dan FullShelf.
  4. Setelah selesai, pilih tombol Latih.
  5. Setelah pelatihan selesai, aplikasi akan mendeteksi bahwa perulangan terlatih tersedia. Aplikasi akan memulai proses ekspor model terlatih ke ONNX dan mengunduhnya ke perangkat.

Menggunakan model terlatih

Setelah aplikasi mengunduh model terlatih, aplikasi akan beralih ke status Penilaian dan mulai menilai gambar dari kamera dalam perulangan berkelanjutan.

Untuk setiap gambar yang diambil, aplikasi akan menampilkan tag atas di layar. Jika tidak mengenali status visual, aplikasi akan menampilkan Tidak Ada Kecocokan. Aplikasi juga mengirim pesan-pesan ini ke IoT Hub, dan jika ada kelas yang terdeteksi, pesan akan menyertakan label, skor keyakinan, dan properti yang disebut detectedClassAlert, yang dapat digunakan oleh klien IoT Hub yang tertarik untuk melakukan perutean pesan cepat berdasarkan properti.

Selain itu, sampel menggunakan pustaka Sense HAT untuk mendeteksi kapan aplikasi berjalan pada Raspberry Pi dengan unit Sense HAT, sehingga dapat menggunakannya sebagai tampilan output dengan mengatur semua lampu tampilan menjadi merah setiap kali aplikasi mendeteksi kelas dan kosong ketika tidak mendeteksi apa pun.

Menggunakan kembali aplikasi

Jika Anda ingin me-reset aplikasi kembali ke keadaan semula, Anda dapat melakukannya dengan mengklik tombol di sudut kanan atas antarmuka pengguna, atau dengan memanggil metode DeleteCurrentModel melalui IoT Hub.

Anda dapat mengulangi langkah mengunggah gambar pelatihan kapan pun dengan mengklik tombol antarmuka pengguna di kanan atas atau memanggil metode EnterLearningMode lagi.

Jika Anda menjalankan aplikasi di perangkat dan perlu mengambil alamat IP lagi (untuk membuat koneksi jarak jauh melalui Klien Jarak Jauh Windows IoT, misalnya), Anda dapat memanggil metode GetIpAddress melalui IoT Hub.

Membersihkan sumber daya

Hapus proyek Custom Vision Jika Anda tidak ingin lagi mempertahankannya. Pada situs web Custom Vision, navigasikan ke Proyek dan pilih ikon tempat sampah di bawah proyek baru Anda.

Screenshot of a panel labeled My New Project with a trash can icon

Langkah berikutnya

Dalam tutorial ini, Anda menyiapkan dan menjalankan aplikasi yang mendeteksi informasi status visual pada perangkat IoT dan mengirim hasilnya ke IoT Hub. Selanjutnya, jelajahi kode sumber lebih lanjut atau lakukan salah satu modifikasi yang disarankan di bawah ini.

  • Tambahkan metode IoT Hub untuk mengalihkan aplikasi langsung ke status Menunggu Model Terlatih. Dengan cara ini, Anda dapat melatih model dengan gambar yang tidak diambil oleh perangkat itu sendiri, kemudian mendorong model baru ke perangkat sesuai perintah.
  • Ikuti tutorial Memvisualisasikan data sensor secara real time untuk membuat Dasbor Power BI untuk memvisualisasikan pemberitahuan IoT Hub yang dikirim oleh sampel.
  • Ikuti tutorial pemantauan jarak jauh IoT untuk membuat Aplikasi Logika yang merespons pemberitahuan IoT Hub ketika status visual terdeteksi.