4. ESP32-CAM & Edge Impulse

Edge Impulse menarik untuk dipelajari, karena gratis dan menawarkan bantuan untuk mempermudah pengembangan dan penerapan machine learning di perangkat Edge (perangkat tepi jaringan, seperti ESP32-CAM). Berikut ini beberapa hal yang bisa dibuat dengan Edge Impulse:

  1. Pendeteksi Objek Jarak Jauh dengan Edge Impulse, ESP32-CAM & Adafruit IO.
  2. Penyortir Objek dengan Edge Impulse, ESP32-CAM & Adafruit IO

Berikut ini uraian masing-masing:

========================================================================================

Pendeteksi Objek Jarak Jauh dengan Edge Impulse, ESP32-CAM & Adafruit IO

Berikut ini langkah-langkahnya:

1. Siapkan beberapa objek benda dan sebuah ESP32-CAM.
2. Lakukan pengambilan gambar objek dengan ESP32-CAM, kumpulkan minimal 20 gambar untuk setiap objek benda. Di samping gambar objek, pastikan juga mengambil gambar Background, untuk memudahkan identifikasi ketika tidak ada objek (ambil minimal 5 gambar). Untuk pengambilan gambar objek dan background ini, silahkan menggunakan program CameraWebServer, yang ada di Examples, di kategori ESP32, di Camera. Lebih jelasnya, ikuti langkah-langkah pada gambar berikut ini:

Gambar 1. Atur Board di pilihan AI Thinker ESP32-CAM

Catatan: apabila pilihan Board AI Thinker ESP32-CAM tidak muncul, maka lakukan instalasi board dengan mengikuti langkah-langkah di artikel ini: https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/

Gambar 2. Setelah Board AI Thinker ESP32-CAM dapat dipilih, berikutnya buka Examples, pilih ESP32, pilih Camera, pilih CameraWebServer

Gambar 3. Beri tanda Comment pada #define CAMERA_MODEL_ESP_EYE dan hilangkan tanda Comment pada #define CAMERA_MODEL_AI_THINKER

Gambar 4. Isi nama dan password Wi-Fi yang digunakan

Gambar 5. Pastikan memilih Port COM yang benar (lihat di Device Manager), kemudian upload program CameraWebServer tersebut ke ESP32-CAM 

Gambar 6. Setelah upload berhasil, buka Serial Monitor, tunggu hingga muncul alamat IP yang digunakan ESP32-CAM

Gambar 7. Buka alamat IP tersebut dengan mengetikkannya di browser, setelah terbuka, tekan tombol Start Stream, yang ada di bagian bawah

Gambar 8. Muncul tangkapan gambar ESP-32 CAM, arahkan ke objek yang akan diidentifikasi, tekan tombol Save hingga 20 kali untuk menyimpannya (pastikan objek tersebut diubah-ubah posisinya agar Edge Impulse bisa menghasilkan pengenalan pola yang lebih bervariasi)

Gambar 9. Setelah terkumpul 20 gambar, pindahkan gambar-gambar tersebut ke dalam sebuah folder dengan memberi nama folder sesuai nama objek tersebut (contoh di sini folder snoopy)

Gambar 10. Lanjutkan untuk objek yang berikutnya (dalam contoh di sini: olaf), ambil gambar sebanyak 20 gambar (lebih banyak lebih baik)

Gambar 11. Setelah terkumpul 20 gambar, pindahkan gambar-gambar tersebut ke dalam sebuah folder dengan memberi nama folder sesuai nama objek tersebut (contoh di sini folder olaf)

Gambar 12. Lanjutkan untuk objek yang berikutnya (dalam contoh di sini: kura-kura ninja), ambil gambar sebanyak 20 gambar (lebih banyak lebih baik)

Gambar 13. Setelah terkumpul 20 gambar, pindahkan gambar-gambar tersebut ke dalam sebuah folder dengan memberi nama sesuai nama objek tersebut (folder kura-kura ninja)

Gambar 14. Lanjutkan untuk objek yang berikutnya (dalam contoh di sini: bajak laut), ambil gambar sebanyak 20 gambar (lebih banyak lebih baik)

Gambar 15. Setelah terkumpul 20 gambar, pindahkan gambar-gambar tersebut ke dalam sebuah folder dengan memberi nama folder sesuai nama objek tersebut (folder bajak laut)

Gambar 16. Terakhir, ambil gambar background (tanpa ada objek benda), sebanyak minimal 10 gambar, kemudian pindahkan ke folder dengan nama Background)

Gambar 17. Terlihat  ada 4 buah folder dengan nama objek (dalam contoh di sini: snoopy, olaf, kura-kura ninja dan bajak laut) dan sebuah folder Background

3 Setelah pengumpulan objek gambar berhasil dilakukan, langkah berikutnya adalah penerapan machine learning dengan Edge Impulse untuk deteksi objek, yang nantinya, kode program yang dihasilkan, bisa ditanamkan ke ESP32-CAM. Untuk itu buka Edge Impulse, dan lakukan langkah-langkah seusai gambar berikut ini:

Gambar 18. Buka edgeimpulse.com, klik Login

Gambar 19. Isi Username dan Password, apabila belum mempunyai akun, klik Sign Up

Gambar 20. Klik Create new project 

Gambar 21. Beri nama project, klik tombol Create new project

Gambar 22. Di halaman Dashboard (Project Info), klik tombol Add existing data

Gambar 23. Pilih Upload data

Gambar 24. Di jendela Upload data, pilih Select a folder, kemudian klik Choose Files

Gambar 25. Arahkan pencarian folder pada folder tempat gambar, kemudian klik tombol Upload

Gambar 26. Muncul pertanyaan apakah membangun projek deteksi objek, pilih Yes

Gambar 27. Terlihat file gambar pada folder snoopy berhasil diupload

Gambar 28. Lanjutkan upload file gambar yang lainnya, hingga semua gambar yang diambil dengan ESP32-CAM berhasil diupload

Gambar 29. Setelah semua gambar berhasil di-upload, langkah berikutnya, klik Labeling queue, kemudian gerakkan mouse mengelilingi objek hingga muncul kotak batas objek

Gambar 30. Isi label sesuai nama objek, kemudian tekan tombol Set label, dilanjutkan Save labels

Gambar 31. Ulangi langkah di atas sehingga semua objek mendapat label, kecuali untuk gambar Background, silahkan tidak diberi label. Untuk mengubah label, klik pada tulisan label di atas kotak batas, dan ganti dengan label yang benar, dalam contoh di sini, nama label diubah menjadi olaf

Gambar 32. Label diubah sesuai nama objeknya, dalam contoh di sini: label diisi kura-kura ninja

Gambar 33. Label diubah sesuai nama objeknya, dalam contoh di sini: label diisi bajak laut

Gambar 34. Setelah semua gambar diberi label (kecuali gambar background, silahkan tidak usah diberi label), langkah berikutnya adalah klik menu Create impulse, klik Add a processing block

Gambar 35. Di jendela Add a processing block, klik Add pada blok Image

Gambar 36. Berikutnya klik Add a learning block

Gambar 37. Di jendela Add a learning block, klik Add pada blok Object Detection (Images)

Gambar 38. Klik tombol Save Impulse, perhatikan ada 4 objek di Output features

Gambar 39. Berikutnya klik pada menu Image, klik Save parameters

Gambar 40. Berikutnya klik Generate features untuk membangkitkan model 4 buah objek

Gambar 41. Maka akan muncul peta fitur keempat objek, yang dibedakan berdasarkan warna, dari peta ini, semakin jauh posisi keempat fitur terpisah, semakin baik model yang dibangkitkan 

Gambar 42. Klik pada menu Objek Detection, klik Target Device, pilih Espressif ESP-EYE (ESP32 240MHz), klik Set Target Device

Gambar 43. Setelah Target berisi Espressif ESP-EYE (ESP32 240MHz), berikutnya klik tombol Start training

Gambar 44. Tunggu hingga training selesai, apabila skor training mendekati 100%, berarti pembelajaran deteksi objek berhasil, namun apabila skor training kurang dari 70%, maka pembelajaran sebaiknya diulang. 

Catatan: Skor training Edge Impulse ini dapat ditingkatkan dengan menambah data gambar. Semakin banyak data gambar, semakin meningkat skor trainingnya.

Gambar 45. Setelah memperoleh skor training baik (mendekati 100%), berikutnya klik pada Deployment, pilih opsi Arduino library

Gambar 46. Berikutnya klik Build, tunggu hingga muncul kotak informasi "Built Arduino Library" dengan tanda centang

Gambar 47. Buka File Explorer, perhatikan di folder Download, terdapat file library (*.zip) hasil machine learning Edge Impulse untuk ditanamkan ke ESP32-CAM  

4. Setelah Edge Impulse menghasilkan kode program untuk deteksi objek, langkah berikutnya adalah menyiapkan Dashboard untuk menampilkan gambar objek dan label hasil deteksi objek. Agar bisa dipantau dari jarak jauh, dalam contoh di sini digunakan Adafruit IO. Untuk menampung data gambar dan label, digunakan 2 buah feed, yang diberi nama camera dan label. Kemudian untuk menampilkan nilai kedua feed tersebut, digunakan Dashboard yang berisi blok Image dan blok Text. Blok Image akan menampilkan nilai dari feed camera, sedangkan blok Text akan menampilkan nilai dari feed label. Gambar-gambar berikut ini menunjukkan langkah-langkah pembuatannya: 

Gambar 48. Buka Adafruit IO, klik Sign In. Apabila sudah memiliki akun, isi email atau username dan password, apabila belum memiliki akun, klik Create an Adafruit Account

Gambar 49. Isi nama, email, username dan password, kemudian klik Create Account

Gambar 50. Akun Adafruit sudah berhasil dibuat

Gambar 51. Setelah akun berhasil dibuat, berikutnya buat feed. Klik IO, klik Feeds, klik New Feed

Gambar 52. Di jendela Create a new Feed, isi Name = camera, klik Create

Gambar 53. Muncul nama camera di daftar Feed, klik 2 kali untuk membuka halamannya

Gambar 54. Karena feed camera menampung data gambar yang berukuran lebih besar dari 1KB, maka buat Feed History dari ON menjadi OFF

Gambar 55. Buat lagi sebuah feed, beri nama label

Gambar 56. Setelah feed camera dan feed label berhasil dibuat, langkah berikutnya buat Dashboard dengan meng-klik Dashboards, pilih New Dashboard

Gambar 57. Di jendela Create a new Dashboard, beri nama Dashboard, kemudian klik Save 

Gambar 58. Klik Dashboard Settings, pilih Create New Block

Gambar 59. Di jendela Create a New Block, pilih blok Image (bergambar kamera)

Gambar 60. Muncul jendela Connect a Feed, pilih feed camera, klik Next Step

Gambar 61. Di jendela Block settings, klik Create Block

Gambar 62. Terlihat blok Image muncul di halaman Dashboard, perbesar ukuran dengan Edit Layout 

Gambar 63. Tarik garis tepi blok sehingga ukuran blok menjadi lebih besar, klik Save Layout

Gambar 64. Berikutnya tambahkan blok Text, dengan meng-klik Create a New Block, pilih Text

Gambar 65. Muncul jendela Connect a Feed, pilih label

Gambar 66. Agar label terlihat jelas, buat ukuran Font Size = Big

Gambar 67. Agar Dashboard terlihat jelas, buat Dark Mode dari ON menjadi OFF

5. Setelah feed dan Dashboard untuk menampilkan gambar objek dan hasil deteksinya berhasil dibuat, langkah berikutnya adalah memprogram ESP32-CAM dengan library yang dibangkitkan Edge Impulse, yang diberi tambahan instruksi untuk mengirimkan data ke Adafruit IO. Berikut ini  langkah-langkahnya: 

5.1. Buka Arduino IoT Cloud di cloud.arduino.cc (di sini digunakan Arduino Editor Online untuk meng-upload kode program yang dibangkitkan oleh Edge Impulse, karena dari pengalaman penulis, upload dengan software Arduino IDE di komputer secara offline selalu muncul error).

Gambar 68. Buka Arduino IoT Cloud di cloud.arduino.cc

5.2.  Isi email atau username dan password apabila sudah memiliki akun. Apabila belum memiliki akun, buat akun dengan meng-klik Create your account.

 
Gambar 69. Isi email atau username dan password, klik Sign In

5.3. Di halaman Home, klik Create New, pilih Sketch.

Gambar 70. Di halaman awal, pilih Create New, pilih Sketch

5.4. Di halaman Sketch, muncul pilihan Device, pilih AI Thinker ESP32-CAM 

Gambar 71. Muncul daftar Device, pilih AI Thinker ESP32-CAM

Catatan: Apabila pilihan Device ini tidak muncul, ada kemungkinan masalah koneksi dengan Port COM di komputer. Untuk itu pastikan ESP32-CAM telah dihubungkan ke Port USB Komputer. Kemudian pastikan Arduino Create Agent telah terinstal. Arduino Create Agent ini berfungsi untuk menghubungkan Arduino Editor Online dengan Port COM di komputer. Apabila Arduino Create Agent belum terinstal, ikuti langkah-langkah instalasi di sini: https://support.arduino.cc/hc/en-us/articles/360014869820-Install-the-Arduino-Create-Agent

5.5. Buka menu Library dengan meng-klik icon bergambar buku di pojok kiri. Kemudian tekan tombol upload file library (panah ke atas), dan arahkan ke file library yang dihasilkan oleh Edge Impulse. Klik Open, tunggu beberapa saat, apabila berhasil di-upload akan muncul pesan "Library uploaded successfully".

Gambar 72. Klik Library, klik Upload, arahkan ke file *.zip dari Edge Impulse, klik Open

Gambar 73. Ternyata format library tidak sesuai

Catatan: Untuk mengatasi masalah format library yang tidak sesuai ini, berikut ini solusinya:
    1. Ekstrak file *.zip Edge Impulse, akan ada 2 folder dan sebuah file library (lihat Gambar 74).
    2. Klik kanan pada file library, pilih Open with, pilih Notepad (lihat Gambar 75).
    3. Di halaman Notepad, tambahkan tulisan includes= diikuti nama library diakhiri titik dan huruf h (lihat Gambar 76).
    4. Setelah itu, pada folder yang telah ter-ekstrak, klik kanan, pilih Add to archive, pilih Zip (lihat Gambar 77).
    5. Ulangi lagi meng-upload library di Arduino Editor Online, dengan file library yang barus saja dibuat ini, maka seharusnya library tersebut akan dapat diupload (lihat Gambar 78).
Gambar 74. Ekstraks file library yang dihasilkan Edge Impulse

Gambar 75. Buka file library dengan Open with Notepad

Gambar 76. Tambahkan tulisan includes= diikuti nama library dan diakhiri titik dan huruf h

Gambar 77. Setelah itu, Compress lagi folder hasil ekstraks sebelumnya, pilih format Zip
 
Gambar 78. Terlihat sekarang library hasil Edge Impulse telah dapat di-upload, yang ditempatkan di bagian Custom, di Library

5.6. Setelah library dari Edge Impulse berhasil di-upload, langkah berikutnya adalah menggunakan Example program dari library Edge Impulse tersebut. Untuk mempermudah rekan-rekan, berhubung ada penambahan program untuk dikirimkan ke Adafruit IO, maka silahkan rekan-rekan bisa menggunakan program ini. Silahkan dicopy, dan ditempelkan di Arduino Editor Online. Jangan lupa mengganti nama dan password Wi-Fi yang digunakan, serta kode AIO username dan AIO Key Adafruit IO, yang dapat diperoleh dengan menekan tombol kunci dalam lingkaran kuning, di halaman Adafruit IO.

Berikut ini kode programnya:

5.7 Instruksi pada baris pertama silahkan diganti dengan nama library yang benar dari Edge Impulse. Caranya yang paling mudah adalah dengan menempatkan kursor di baris pertama, kemudian tekan tombol Include yang ada di library Edge Impulse, seperti ditunjukkan gambar berikut ini.

Gambar 79. Tempatkan kursor di baris pertama, tekan tombol Include di library

5.8.  Setelah kode program disesuaikan dengan nama library yang benar, nama dan password Wi-Fi serta  username dan password AIO Key, maka langkah berikutnya adalah Upload program ke ESP32-CAM. Namun sebelum meng-upload, berhubung library Adafruit_MQTT.h memiliki default ukuran buffer hanya 512, yang tidak memadai untuk memuat gambar, maka lakukan modifikasi nilai MAXBUFFERSIZE dari 512 menjadi 36000. Untuk itu di menu Library, di kolom pencarian, ketik adafruit_mqtt. Pada library Adafruit_MQTT yang muncul, klik pada 3 buah titik vertikal, pilih Modify. 

Gambar 80. Di menu Library, cari Adafruit_MQTT library, setelah muncul, pilih Modify

Gambar 81. Buka Tab Adafruit_MQTT.h

Gambar 82. Di baris 114 di Adafruit_MQTT.h, ganti angka 512 menjadi 36000

5.9.  Setelah MAXBUFFERSIZE diubah dari 512 menjadi 36000, langkah berikutnya tekan tombol Upload (tanda panah ke kanan), tunggu hingga muncul tulisan Done Uploading.

Gambar 83. Upload program ke ESP32-CAM, tunggu hingga muncul Done Uploading

6.  Setelah program berhasil di-upload ke ESP32-CAM, lakukan pemeriksaan dengan membuka Serial Monitor. Tunggu hingga muncul tulisan "MQTT Connected!". Apabila tulisan tersebut tidak muncul, lepas kabel USB dari ESP32-CAM ke komputer, setelah itu hubungkan kembali, kemudian tekan tombol Reset ESP32-CAM, maka seharusnya di Serial Monitor akan muncul tulisan seperti gambar berikut ini. Apabila masih belum muncul tulisan, lepas dan hubungkan kabel serta reset berulang kali.

Gambar 84. Setelah program berhasil di-upload ke ESP32-CAM, dan koneksi ke MQTT Adafruit IO berhasil (MQTT Connected!), akan muncul hasil deteksi objek di Serial Monitor

7.  Seharusnya Dashboard di Adafruit IO akan menampilkan gambar objek dan label hasil deteksi objeknya, seperti gambar berikut ini.

Gambar 85. ESP32-CAM diarahkan pada objek benda "bajak laut"

Gambar 86. Dashboard di Adafruit IO menampilkan gambar dan label hasil deteksi objek

Agar lebih jelas, berikut ini video langkah pembuatannya:

Video pembuatan Deteksi Objek dan Monitoring Jarak Jauh dengan ESP32-CAM, Edge Impulse dan Adafruit IO


========================================================================================

Penyortir Objek dengan Edge Impulse, ESP32-CAM & Adafruit IO

Berikut ini langkah-langkahnya:

1. Siapkan beberapa objek benda dan sebuah ESP32-CAM, dalam contoh di sini digunakan 4 buah koin 100, 200, 500 dan 1000 rupiah.
2. Sama seperti di bagian pertama, pendeteksian objek, lakukan pengambilan gambar objek dengan ESP32-CAM, kumpulkan minimal 20 gambar untuk setiap objek benda. Di samping gambar objek, pastikan juga mengambil gambar Background, untuk memudahkan identifikasi ketika tidak ada objek (ambil minimal 5 gambar). Untuk pengambilan gambar objek dan background ini, silahkan menggunakan program CameraWebServer, yang ada di Examples, di kategori ESP32, di Camera. Gunakan ukuran resolusi 240x240 pixel.
3. Sama seperti di bagian pertama, setelah pengumpulan objek gambar berhasil dilakukan, langkah berikutnya adalah penerapan machine learning dengan Edge Impulse untuk deteksi objek, yang nantinya, kode program yang dihasilkan, bisa ditanamkan ke ESP32-CAM. Pastikan untuk memberi label yang sesuai pada setiap objek, dalam contoh di sini dilabeli dengan c100, c200, c500 dan c1000.
4. Sama seperti di bagian pertama, setelah Edge Impulse menghasilkan kode program untuk deteksi objek, langkah berikutnya adalah menyiapkan Dashboard di Adafruit IO untuk menampilkan gambar objek dan label hasil deteksi objek. Berikutnya, tambahkan 2 buah feed lagi, beri nama servo dan pwm. Feed servo digunakan untuk merepresentasikan feed label dalam bentuk angka 1 sampai 4, sedangkan feed pwm digunakan untuk mengatur intensitas cahaya LED ESP32-CAM.
5. Setelah feed dan Dashboard untuk menampilkan gambar objek dan hasil deteksinya berhasil dibuat, langkah berikutnya adalah memprogram ESP32-CAM dengan library yang dibangkitkan Edge Impulse, yang diberi tambahan instruksi untuk mengirimkan data ke Adafruit IO. Berikut ini kode programnya:


6.  Setelah program berhasil di-upload ke ESP32-CAM, lakukan pemeriksaan dengan membuka Serial Monitor. Tunggu hingga muncul tulisan "MQTT Connected!". Setelah tulisan tersebut muncul, seharusnya Dashboard Adafruit IO menampilkan tangkapan gambar ESP32-CAM. Tempatkan sebuah koin di depan ESP32-CAM dan perhatikan apakah label di Dashboard Adafruit IO menampilkan nilai yang sesuai dengan coin tersebut. Apabila antara gambar dan label sudah benar, buka rangkaian Wokwi ini: https://wokwi.com/projects/402417694549066753, dan perhatikan setiap kali ada coin yang terdeteksi, servo yang sesuai dengan nilai coin tersebut akan berputar 180°. Ketika tidak ada coin yang terdeteksi, servo tersebut kembali ke posisi awal (0°).

Untuk lebih jelasnya, silahkan melihat video berikut ini:

Video pembuatan penyortir koin menggunakan ESP32-CAM, Edge Impulse dan Adafruit IO





No comments:

Post a Comment