# Setup Guide - Rice Leaf Disease Classification API Panduan lengkap untuk mengintegrasikan model CNN klasifikasi penyakit daun padi ke aplikasi web Laravel. --- ## 📋 Persyaratan ### Backend (Python Flask API) - Python 3.8 atau lebih baru - TensorFlow/Keras 2.10+ - OpenCV - Flask ### Frontend (Laravel Web) - Laravel 10+ - PHP 8.0+ - Composer --- ## 🚀 Setup Langkah demi Langkah ### **Bagian 1: Setup Python API Server** #### 1.1 Install Dependencies Python Buka terminal/PowerShell di folder `rice leaf diseases dataset/`: ```bash # Navigasi ke folder dataset cd "d:\PROJECT TA\rice leaf diseases dataset" # Buat virtual environment (opsional tapi recommended) python -m venv venv # Aktifkan virtual environment # Windows: venv\Scripts\activate # Install dependencies pip install -r requirements_api.txt ``` #### 1.2 Pastikan Model File Ada Pastikan salah satu dari file model ini ada di folder `rice leaf diseases dataset/`: - `rice_leaf_disease_model.keras` ✅ (Preferred) - `rice_leaf_disease_model.h5` - `rice_leaf_disease_model.json` (+ weights file) File-file ini seharusnya sudah ada dari training notebook. #### 1.3 Jalankan API Server ```bash # Letakkan di folder yang sama dengan model file python api_server.py ``` **Output yang diharapkan:** ``` ============================================================ Rice Leaf Disease Classification API Server ============================================================ Working directory: d:\PROJECT TA\rice leaf diseases dataset Loading model... ✓ Model ditemukan: rice_leaf_disease_model.keras ✓ Model berhasil dimuat! Model input shape: (None, 224, 224, 3) Number of layers: 25 ============================================================ Starting Flask API Server... ============================================================ Server berjalan di http://127.0.0.1:5000/ Tekan CTRL+C untuk menghentikan. ``` > 🔴 **PENTING:** Server Python harus tetap berjalan saat menggunakan API dari Laravel! --- ### **Bagian 2: Setup Laravel Web API** #### 2.1 Register API Routes Edit file `web_TA/bootstrap/app.php` atau pastikan menggunakan API routes: ```php // Di dalam bootstrap/app.php atau di app structure Anda // Pastikan routes/api.php dimuat: // Jika menggunakan Laravel 11, routes sudah auto-loaded // Jika menggunakan Laravel 10, tambahkan di RouteServiceProvider ``` File `routes/api.php` sudah dibuat dan berisi endpoint classification. #### 2.2 Konfigurasi Laravel Pastikan file `.env` sudah dikonfigurasi: ```env APP_NAME="Padi Disease Classification" APP_ENV=local APP_DEBUG=true APP_KEY=base64:... # Jalankan php artisan key:generate jika belum # Database configuration DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=padi_db DB_USERNAME=root DB_PASSWORD= ``` #### 2.3 Run Laravel ```bash cd "d:\PROJECT TA\web_TA" # Install dependencies jika belum composer install # Generate key php artisan key:generate # Run development server php artisan serve ``` Laravel akan berjalan di `http://127.0.0.1:8000` --- ## 🔌 API Endpoints ### Test Koneksi ```bash curl -X GET http://127.0.0.1:8000/api/classification/test ``` **Response:** ```json { "success": true, "message": "Koneksi ke model API berhasil", "model_info": { "status": "ok", "model_loaded": true, "classes": ["Bacterialblight", "Brownspot", "Leafsmut"] } } ``` ### Klasifikasi Gambar (Analyze Only) **Endpoint:** `POST /api/classification/classify` ```bash curl -X POST http://127.0.0.1:8000/api/classification/classify \ -F "image=@path/to/image.jpg" ``` **Response:** ```json { "success": true, "message": "Klasifikasi berhasil", "data": { "predicted_class": "Bacterialblight", "confidence": "95.23%", "confidence_value": 0.9523, "all_predictions": { "Bacterialblight": 0.9523, "Brownspot": 0.0380, "Leafsmut": 0.0097 }, "disease_info": { "name": "Bercak Bakteri (Bacterial Blight)", "description": "...", "symptoms": [...], "treatment": [...], "severity": "Sedang hingga Tinggi" }, "timestamp": "2024-03-09T10:30:45Z" } } ``` ### Klasifikasi & Simpan Gambar **Endpoint:** `POST /api/classification/classify-and-save` ```bash curl -X POST http://127.0.0.1:8000/api/classification/classify-and-save \ -F "image=@path/to/image.jpg" \ -F "notes=Dari lapangan area A" ``` **Response:** Sama seperti di atas + `image_path` untuk akses gambar yang disimpan --- ## 💻 Contoh Penggunaan di Frontend ### HTML Form Upload ```html
``` ### JavaScript Fetch (Modern) ```javascript async function classifyImage(imageFile) { const formData = new FormData(); formData.append('image', imageFile); formData.append('notes', 'Upload manual'); const response = await fetch('/api/classification/classify-and-save', { method: 'POST', body: formData, headers: { 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content } }); return await response.json(); } // Penggunaan const fileInput = document.getElementById('imageInput'); fileInput.addEventListener('change', async (e) => { const file = e.target.files[0]; const result = await classifyImage(file); console.log(result); }); ``` --- ## 🔧 Troubleshooting ### Problem: "Tidak dapat menghubungi model API" **Solusi:** 1. Pastikan Python API server berjalan ```bash # Cek apakah port 5000 aktif netstat -ano | findstr :5000 # Windows ``` 2. Test API Python secara langsung: ```bash curl http://127.0.0.1:5000/health ``` 3. Jika perlu ganti port, edit di: - `api_server.py`: ubah `port=5000` - `ClassificationController.php`: ubah `$pythonApiUrl` ### Problem: "Model tidak ditemukan" **Solusi:** 1. Pastikan file model ada di folder `rice leaf diseases dataset/` 2. Nama file harus tepat: - `rice_leaf_disease_model.keras` ✅ - `rice_leaf_disease_model.h5` - `rice_leaf_disease_model.json` 3. Cek output API server: ```bash # Lihat log saat startup untuk tahu file mana yang digunakan python api_server.py ``` ### Problem: "Memory Error" saat prediksi **Solusi:** - Model cukup besar, pastikan sistem memiliki cukup RAM - Jika Windows, tutup aplikasi lain yang menggunakan banyak memory - Atau gunakan `model.quantize()` untuk kompresi model ### Problem: CORS Error di Frontend **Solusi:** - Python API sudah dikonfigurasi dengan CORS - Pastikan request header benar dari Laravel --- ## 📊 Database (Opsional) Jika ingin menyimpan riwayat klasifikasi: ```bash cd "d:\PROJECT TA\web_TA" # Create migration php artisan make:migration create_classifications_table # Run migrations php artisan migrate ``` **Migration File** (`database/migrations/XXXX_create_classifications_table.php`): ```php Schema::create('classifications', function (Blueprint $table) { $table->id(); $table->string('image_path'); $table->string('predicted_class'); $table->float('confidence'); $table->json('all_predictions'); $table->text('notes')->nullable(); $table->timestamps(); }); ``` --- ## 📝 Catatan Penting 1. **API Server Harus Berjalan**: Pastikan `api_server.py` tetap berjalan saat menggunakan API 2. **CSRF Token**: Jika ada error CSRF, pastikan `X-CSRF-TOKEN` dikirim di request header 3. **File Upload Size**: Default batas 5MB, bisa diubah di `ClassificationController.php` 4. **Model Update**: Jika model diupdate, hanya perlu restart API server --- ## 🎯 Next Steps 1. ✅ Setup Python API 2. ✅ Setup Laravel 3. ✅ Test endpoints 4. **Create UI** - Buat halaman upload gambar 5. **Add Database** - Simpan riwayat klasifikasi 6. **Mobile App** - Integrasi dengan Flutter app --- **Created**: March 9, 2026 **Author**: AI Assistant **Version**: 1.0