Bikin Aplikasi AI Deteksi Kualitas Buah Pakai Kamera Real-Time! (PyTorch + Streamlit)

streamlit (st): Pustaka utama untuk membangun dasbor berbasis web interaktif. torch & torchvision: Kerangka kerja (framework) Kecerdasan Buatan (AI) PyTorch yang bertugas menyusun, melatih, dan menjalankan model Deep Learning. cv2 (OpenCV) & av: Digunakan untuk memanipulasi struktur piksel gambar dan video streaming. webrtc_streamer: Komponen khusus untuk menangkap video dari webcam langsung ke dalam web browser. datasets.ImageFolder: Mengotomatiskan pembacaan data. Jika kamu membuat subfolder di dalam folder dataset bernama Apel_Bagus dan Apel_Busuk, sistem otomatis mendaftarkannya sebagai target klasifikasi buah. epochs: Menentukan berapa kali model membaca seluruh isi dataset gambar untuk belajar. DataLoader: Memotong kumpulan gambar menjadi grup-grup kecil (batch) berisi 4 gambar untuk dimasukkan ke memori prosesor secara bertahap agar tidak mengalami crash. pretrained=True: Menggunakan teknik Transfer Learning. Kita mengunduh arsitektur MobileNetV2 yang sudah terlatih mengenali objek-objek umum di dunia, lalu memotong lapisan output paling ujungnya (model.classifier[1]) dan menggantinya dengan jumlah kelas buah yang kamu miliki. Loss & Optimizer: Penghitung tingkat kesalahan berpikir AI (CrossEntropyLoss) dan algoritma perbaikan kesalahan (Adam) dengan kecepatan belajar (learning rate) sebesar 0.001. torch.save: Membekukan seluruh parameter bobot matriks yang sudah pintar, lalu menyimpannya ke dalam file harddisk bernama fruit_model.pth. net.load_state_dict: Membangun kerangka kosong MobileNetV2 dan menyuntikkan memori kepintaran dari file .pth. net.eval(): Mengunci model ke dalam mode "Ujian/Evaluasi". Fungsi ini mematikan fungsi pelatihan internal seperti Dropout dan Batch Normalization agar hasil prediksi bernilai konsisten dan cepat saat mendeteksi objek. FruitVideoProcessor: Kelas khusus yang berjalan di latar belakang (background thread). Kelas ini memiliki variabel memori internal bernama self.result_data untuk menampung data tebakan teks sementara. def recv(self, frame): Fungsi inti yang dipanggil otomatis oleh perangkat keras kamera sebanyak 30 kali per detik (30 FPS). Setiap bingkai gambar mentah (frame) diubah menjadi array angka OpenCV menggunakan format warna BGR. Mengubah skema warna gambar dari format OpenCV (BGR) ke format gambar umum (RGB), dikonversi menjadi objek gambar PIL, lalu diproses menggunakan normalisasi ukuran yang dibuat di Part 1. Fungsi unsqueeze(0) menambahkan dimensi baru berupa informasi batch size (menjadi: 1 gambar, 3 channel warna, 224 lebar, 224 tinggi). torch.no_grad(): Mematikan pencatatan kalkulasi kalkulus/gradien matematika agar konsumsi memori RAM sangat hemat dan proses eksekusi menjadi sangat cepat. softmax: Mengubah skor mentah output AI menjadi nilai probabilitas persentase kepastian (skala 0% sampai 100%). cv2.putText: Menggambar teks melayang (hijau untuk buah bagus, merah untuk buah busuk) langsung di atas bingkai video. Gambar akhir dikemas ulang menggunakan av.VideoFrame untuk ditempelkan ke layar monitor. while ctx.state.playing: Selama kamera aktif, kode ini terus berputar. output_placeholder.container(): Menghapus tampilan analisis lama dan menggantinya dengan bar grafik persentase akurasi yang baru secara dinamis setiap 0.5 detik tanpa mengganggu jalannya video kamera. st.file_uploader: Menyediakan komponen tombol drag-and-drop file gambar komputer ke dalam sistem web browser. Karena gambar bersifat statis (tidak bergerak), kode ini tidak memerlukan fungsi kelas khusus, tidak menggunakan perulangan while, dan tidak membutuhkan jeda waktu time.sleep. Gambar langsung diproses satu kali eksekusi, menghitung probabilitas akurasi kelas, lalu seketika mencetak grafik persentase di layar komputer.