Dinda Rahma Juwita
Aplikasi Pendeteksi Kesehatan Tanaman: WAIA (Wellbeing Plants With AI) adalah sebuah aplikasi yang menggabungkan teknologi kecerdasan buatan (AI) dengan pemantauan tanaman secara visual untuk mendiagnosis dan memantau kesehatan tanaman secara efisien. Melalui penggunaan teknologi AI, aplikasi ini dapat menganalisis gambar-gambar tanaman dan mengidentifikasi kondisi tanaman. Aplikasi ini menggabungkan teknologi pengenalan objek untuk mengidentifikasi jenis tanaman secara akurat melalui kamera perangkat pengguna, serta machine learning untuk mengolah data pertumbuhan tanaman. Setelah tanaman teridentifikasi, sistem kemudian akan menganalisis data tersebut dan menyajikan informasi yang bermanfaat tentang kondisi tumbuhan yang akan menentukan apakah tanaman dalam kondisi baik atau tidak berdasarkan data yang dimasukkan oleh pengguna.
Aplikasi Pendeteksi Kesehatan Tanaman:
WAIA (Wellbeing Plants With AI)
Kelompok Project Capstone 4 - Data Science
Kerangka Pemikiran
Detail Rancangan Aplikasi
Fitur Utama
Implementasi Machine Learning (Deep Learning)
Image Recognition Jenis Tumbuhan
Image Recognition Jenis Tumbuhan
[PENJELASAN DETAIL/CODING IMAGE RECOGNITION JENIS TUMBUHAN]
Import Libraries:
cv2 untuk pengolahan gambar.
os untuk operasi sistem file.
numpy untuk manipulasi array.
pandas untuk pengolahan data dalam format DataFrame.
Kode ini digunakan untuk membaca gambar dari direktori, mengubah ukuran gambar menjadi 70x70 piksel, dan menyimpan gambar serta labelnya dalam format array NumPy dan DataFrame Pandas.
trainImg: Array NumPy yang berisi gambar yang telah diubah ukurannya.
trainLabel: DataFrame Pandas yang berisi label numerik yang sesuai dengan kategori tanaman.
Setiap folder dalam direktori mewakili kategori tanaman yang berbeda, dan setiap gambar di dalamnya diberi label sesuai dengan kategori tersebut, sehingga data siap untuk digunakan dalam pelatihan model machine learning.
Kode ini digunakan untuk menghitung dan menampilkan jumlah gambar di setiap kategori atau label. Pertama, jumlah gambar untuk setiap label dihitung dan diurutkan berdasarkan indeks label. Kemudian, nama kelas (kategori) diambil dari nama folder. Terakhir, jumlah gambar untuk setiap label ditampilkan dengan mencetak nama kategori yang sesuai dan jumlah gambar yang ada dalam kategori tersebut.
Hasil :
Menampilkan beberapa contoh gambar dari dataset beserta labelnya menggunakan matplotlib. Pertama, impor pustaka matplotlib. Kemudian, jumlah contoh yang akan ditampilkan ditetapkan menjadi 8. Grafik dengan ukuran 12x6 inci dibuat, dan dalam loop, setiap gambar ditampilkan dalam subplot grid 2x4. Gambar dikonversi dari BGR ke RGB untuk tampilan yang benar, dan judul subplot diatur sesuai dengan label tanaman.
Hasil :
Kode ini digunakan untuk membersihkan latar belakang dari gambar-gambar dalam trainImg dengan menggunakan Gaussian blur dan konversi ke ruang warna HSV untuk membuat masker berdasarkan rentang warna hijau. Setiap gambar yang telah dibersihkan ditambahkan ke dalam clearTrainImg. Setelah proses selesai, clearTrainImg dikonversi ke array NumPy untuk digunakan lebih lanjut.
Mengonversi label gambar menjadi format yang sesuai untuk pelatihan model deep learning. Pertama, label dikodekan ke bentuk numerik menggunakan LabelEncoder dari scikit-learn. Kemudian, label yang telah dikodekan ini diubah menjadi format kategorikal (one-hot encoding) menggunakan to_categorical dari Keras, berdasarkan jumlah total kelas (kategori) yang ada.
Membagi data gambar dan label menjadi dua bagian: data pelatihan (trainX, trainY) dan data pengujian (testX, testY).
Membuat dan mengkonfigurasi model Convolutional Neural Network (CNN) menggunakan Keras untuk klasifikasi gambar. Model ini terdiri dari beberapa lapisan konvolusi, normalisasi batch, pooling, dropout, dan lapisan dense. Dimulai dengan menetapkan seed untuk memastikan hasil yang konsisten, model Sequential kemudian dibangun dengan tiga blok konvolusi, masing-masing terdiri dari dua lapisan Conv2D diikuti oleh BatchNormalization, MaxPooling2D, dan Dropout. Setelah itu, data di-flatten untuk dihubungkan ke lapisan dense dengan neuron dan aktivasi ReLU. Model diakhiri dengan dua lapisan dense tambahan dengan dropout dan batch normalization, serta lapisan output dengan aktivasi softmax yang sesuai dengan jumlah kelas. Model ini kemudian dirangkum dan dikompilasi menggunakan loss categorical cross entropy dan optimizer Adam.
Melatih (fit) model dengan data pelatihan (trainX dan trainY) menggunakan batch size 32 dan 35 epoch, serta memvalidasi model dengan data pengujian (testX dan testY). Setelah pelatihan, model dievaluasi pada data pengujian untuk menghitung kehilangan (loss) dan akurasi. Hasil evaluasi menunjukkan nilai kehilangan (test loss) sebesar 0.857 dan akurasi (test accuracy) sebesar 77.89%.
Hasil :
Plant Disease Pathology Classification
Plant Disease Pathology Classification
Flowchart diatas adalah workflow pada pengerjaan untuk pembuatan model klasifikasi penyakit tanaman untuk diterapkan pada project WAIA, disini terdapat 5 tahap utama yaitu Import & install Library, Load/Fetching Dataset from Kaggle, Explore Dataset, Image Processing, dan terakhir Modeling and Inference.
[PENJELASAN DETAIL/CODING PLANT DISEASE PATHOLOGY CLASSIFICATION]
Kode yang Anda bagikan adalah impor modul dan pustaka yang umumnya digunakan dalam pengembangan dan pelatihan model jaringan saraf tiruan (JST) untuk tugas penglihatan komputer. Ini termasuk modul untuk pengolahan citra (OpenCV), manipulasi dan analisis data (NumPy, Pandas), pembelajaran mesin (TensorFlow, Keras, scikit-learn), serta pembuatan visualisasi (Matplotlib, Plotly Express). Penggunaan alias seperti `np`, `pd`, dan `tf` adalah praktik umum untuk mempersingkat kode. Selain itu, modul seperti TQDM digunakan untuk memantau kemajuan iterasi dalam loop, sementara fungsi seperti `train_test_split` dan `shuffle` dari scikit-learn berguna untuk membagi dataset dan mengacaknya. Semua ini merupakan langkah awal yang penting dalam proses pengembangan dan pelatihan model JST untuk tugas penglihatan komputer.
Kode di atas mengatur jalur utama dan beberapa jalur spesifik untuk dataset, serta mendefinisikan parameter pelatihan seperti jumlah epoch dan panjang sampel. Kode ini memuat dataset dari file CSV untuk pelatihan, pengujian, dan pengiriman contoh. Fungsi load_image digunakan untuk memuat gambar berdasarkan ID gambar dari direktori yang ditentukan, mengonversi warna gambar dari BGR ke RGB menggunakan OpenCV. Kemudian, sejumlah gambar sampel ditentukan oleh SAMPLE_LEN diambil dari data pelatihan dan dimuat menggunakan fungsi progress_apply dari Pandas yang menampilkan progress bar saat iterasi.
Fungsi visualize_leaves digunakan untuk menampilkan gambar daun berdasarkan kondisi tertentu atau secara acak. Jika is_cond adalah False, fungsi akan menampilkan sembarang gambar dari train_images dalam grid berukuran 3xN (dengan N maksimal 3 baris). Jika is_cond adalah True, fungsi menyaring data pelatihan berdasarkan kondisi penyakit yang diberikan dalam parameter cond, seperti "healthy", "scab", "rust", atau "multiple_diseases". Gambar yang sesuai dengan kondisi ini kemudian ditampilkan dalam grid berukuran 3 kolom dan 1 baris. Pengecekan kondisi dilakukan melalui query pada data pelatihan, dan gambar yang dipilih diambil dari indeks hasil penyaringan tersebut.
Fungsi `edge_and_cut` digunakan untuk mendeteksi tepi pada gambar menggunakan algoritma Canny Edge Detection, kemudian menemukan batas persegi panjang yang mengelilingi tepi gambar tersebut. Proses ini menghasilkan gambar dengan tepi yang dipertahankan, sementara bagian tidak relevan di sekitarnya dipotong. Tepi gambar awal dan hasil deteksi tepi ditampilkan secara berdampingan, bersama dengan persegi panjang yang mengelilingi tepi dalam gambar terakhir. Metode ini digunakan untuk mempersiapkan gambar daun sebelum digunakan dalam pelatihan model jaringan saraf tiruan.
Fungsi `invert` digunakan untuk memvisualisasikan operasi pembalikan (flipping) gambar secara vertikal dan horizontal. Dalam visualisasi, gambar asli ditampilkan di sebelah kiri, sementara di tengah menampilkan hasil pembalikan vertikal dan di sebelah kanan menampilkan hasil pembalikan horizontal. Proses ini berguna dalam proses augmentasi data, yang menghasilkan variasi data pelatihan dengan memanipulasi gambar asli, membantu meningkatkan keberagaman data dan kinerja model jaringan saraf tiruan dalam mendeteksi pola.
Kode di atas membuat tiga dataset: `train_dataset`, `valid_dataset`, dan `test_dataset`, menggunakan objek TensorFlow `tf.data.Dataset`. Dataset pelatihan (`train_dataset`) dibuat dari jalur file gambar pelatihan (`train_paths`) dan label yang sesuai (`train_labels`). Proses ini mencakup pembacaan, dekode, dan augmentasi data, seperti pemotongan, pembalikan, dan pergeseran gambar untuk meningkatkan variasi data. Dataset ini diulang tak terbatas, diacak, dan dibagi menjadi batch-batch kecil. Dataset validasi (`valid_dataset`) dan dataset pengujian (`test_dataset`) dibuat dengan cara yang serupa, namun tidak melibatkan proses augmentasi data. Selain itu, dataset validasi disimpan di cache untuk meningkatkan kecepatan akses data selama pelatihan, dan semua dataset menggunakan mekanisme prefetch untuk meningkatkan efisiensi pemrosesan data.
Kode di atas mendefinisikan sebuah callback kustom (myCallback) yang digunakan untuk menghentikan proses pelatihan jika akurasi validasi dan akurasi pelatihan telah mencapai ambang batas tertentu (treshold_acc). Callback ini diimplementasikan dengan mengecek akurasi pada setiap akhir epoch. Jika kedua akurasi (pelatihan dan validasi) melebihi nilai ambang batas, maka proses pelatihan dihentikan. Selain itu, fungsi build_lrfn digunakan untuk mengonfigurasi learning rate scheduler dengan fungsi jadwal pelatihan (lrfn) yang sesuai dengan kebutuhan, seperti peningkatan linier awal, pemeliharaan, dan penurunan eksponensial.
Pada kode di atas, sebuah model jaringan saraf tiruan (JST) dibangun menggunakan arsitektur DenseNet121 yang telah ditraining sebelumnya pada dataset ImageNet. Model ini terdiri dari lapisan-lapisan konvolusi dari DenseNet121, diikuti oleh lapisan global average pooling untuk meratakan fitur-fitur yang dihasilkan, dan lapisan dense terakhir dengan fungsi aktivasi softmax untuk klasifikasi. Model tersebut dikompilasi dengan pengoptimal Adam, menggunakan fungsi kerugian categorical crossentropy, dan mengukur akurasi kategori. Pada akhirnya, rangkuman model ditampilkan untuk melihat strukturnya.
Pada kode di atas, pelatihan model dilakukan menggunakan metode fit dari TensorFlow. Kondisi EarlyStopping digunakan untuk menghentikan proses pelatihan jika tidak ada peningkatan dalam akurasi pada data validasi selama jumlah epochnya melebihi patience, sambil memastikan untuk mengembalikan bobot terbaik setelah pelatihan berhenti. Waktu eksekusi pelatihan dihitung dengan merekam waktu sebelum dan setelah pelatihan, lalu menampilkan waktu eksekusi dalam menit dan jam. Proses pelatihan kemudian dimulai dengan memanggil fit dengan parameter yang sesuai seperti dataset pelatihan, jumlah epochnya, callback yang telah ditentukan, dan data validasi. Setelah pelatihan selesai, model disimpan dalam file "Plant_Pathology_Classification.h5".
Pada pembuatan web app leaf Classification ini
Pembuatan ini merupakan flow program bagaimana cara mengaplikasikan model yang kita buat dapat diterapkan pada web app.
Gambar 1.
Pertama kita install dan load module tersebut pada gambar 1,dimana pada gambar tersebut membutuhkan tensorflow untuk load_model tersebut.
Lalu untuk melakukan json file yang berfungsi sebagai menyimpan nilai-nilai label yang
Gambar 2.
Lalu untuk meload model kita simpan dapat dilakukan dengan bahwa ini
Gambar 3.
Pada gambar 3 ini bagaimana kita membuat load data dan juga bisa melakukan predict tersebut.
Untuk memastikan bahwa program tersebut berjalan,membuat source code testing tersebut seperti gambar 4.
Gambar 4.
Pada gambar 4 ini dimana kita melakukan testing,testing ini bertujuan agar dapat melakukan pengujian terlebih dahulu sebelum diterapkan pada web nantinya
Membuat runner pada kita perlukan config seperti ini
Gambar 5.
Gambar 5 ini merupakan bagaimana cara menjalankan flask model tersebut.
Lalu untuk membuat controller tersebut terdapat pada gambar 6
Gambar 6.
Pada gambar 6 tersebut langkah awal seperti ini
Gambar 7
Gambar 7 tersebut kita meng load modul dan file python external kita,pada gambar ini