2026-06-16 00:25:47 +07:00
<p align="center">
<br>
<img src=".github/assets/zeavis-logo.svg" alt="ZeaVis Edu" width="128"><br>
<h1 align="center">ZeaVis Edu</h1>
<p align="center">
<strong>Asisten Edukasi Interaktif untuk Deteksi Penyakit Daun Jagung</strong><br>
2026-06-16 02:58:40 +07:00
<em>Computer Vision • EfficientNetV2B0 • Rust ONNX Runtime • Tauri 2 Android</em>
2026-06-16 00:25:47 +07:00
</p>
</p>
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
<p align="center">
<a href="#-tentang"><b>Tentang</b></a> •
<a href="#-tim"><b>Tim</b></a> •
<a href="#-ringkasan-eksekutif"><b>Ringkasan</b></a> •
<a href="#-cakupan--deliverables"><b>Cakupan</b></a> •
<a href="#-jadwal"><b>Jadwal</b></a> •
<a href="#-tech-stack"><b>Tech Stack</b></a> •
<a href="#-memulai"><b>Memulai</b></a> •
2026-06-16 02:58:40 +07:00
<a href="#-platform"><b>Platform</b></a> •
2026-06-16 00:25:47 +07:00
<a href="#-dokumentasi"><b>Dokumentasi</b></a>
</p>
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
<br>
2026-05-22 21:40:42 +00:00
2026-06-16 00:23:18 +07:00
---
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
## 🌽 Tentang
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
**ZeaVis Edu** adalah aplikasi edukasi berbasis **Computer Vision** yang membantu petani, mahasiswa pertanian, dan penyuluh lapangan mengidentifikasi penyakit daun jagung secara mandiri — cukup dengan mengunggah foto daun jagung.
Proyek ini merupakan **Capstone Project** dalam program **Pijak × IBM SkillsBuild** dengan tema ** "AI for Smart Education"**, dirancang untuk menjembatani kesenjangan antara pengetahuan teori pertanian dan kebutuhan praktis di lapangan.
2026-06-16 00:23:18 +07:00
---
2026-06-16 00:25:47 +07:00
## 👥 Tim
2026-06-16 00:23:18 +07:00
2026-06-16 00:25:47 +07:00
| NPM | Nama | Learning Path | Peran |
|---|---|---|---|
2026-08-02 16:49:11 +07:00
| APC246D6Y0028 | **Asep Haryana Saputra** | Back-End | Arsitektur sistem, RESTful API, deployment Nix/Cloud, keamanan upload stream |
2026-06-16 00:25:47 +07:00
| APC013D6X0081 | **Selly Supriyatin** | Front-End | UI/UX responsif, mekanisme unggah gambar, modul edukasi (rekomendasi obat & penanganan) |
| APC013D6Y0091 | **Taufik Pathurrohman** | Machine Learning | Data Engineering — ekstraksi dataset, cleaning, augmentasi gambar |
| APC414D6Y0138 | **Luhung Pandyaska Suyi** | Machine Learning | Model Architecture & Training — CNN, hyperparameter tuning |
| APC013D6Y0269 | **Ardian** | Machine Learning | Model Evaluation & Deployment Prep — confusion matrix, konversi ke production-ready |
2026-06-16 00:23:18 +07:00
---
2026-06-16 00:25:47 +07:00
## 📋 Ringkasan Eksekutif
2026-06-16 00:23:18 +07:00
2026-06-16 00:25:47 +07:00
### Masalah
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
Data BPS menunjukkan penurunan luas panen jagung dari **2.764.366 Ha (2022)** menjadi **2.487.191 Ha (2023)** . Salah satu penyebab utamanya adalah penyakit daun seperti **Hawar Daun** , **Karat Daun** , dan **Bercak Daun Abu-abu** yang menyebabkan nekrosis dan menghambat fotosintesis.
Petani sering kesulitan mengidentifikasi penyakit secara kasat mata dan memiliki **ketergantungan tinggi pada POPT** (Petugas Pengendali Organisme Pengganggu Tumbuhan) akibat minimnya media pembelajaran interaktif.
### Solusi
ZeaVis Edu menggunakan **Computer Vision** sebagai asisten edukasi interaktif:
1. 📸 **Unggah** foto daun jagung yang diduga terinfeksi
2. 🤖 **Deteksi otomatis** penyakit oleh model AI (EfficientNetV2B0)
3. 📚 **Dapatkan** informasi detail penyakit, panduan pencegahan, dan rekomendasi obat secara mandiri
### Metode Teknis
| Komponen | Pilihan |
2026-05-22 21:53:01 +00:00
|---|---|
2026-06-16 00:25:47 +07:00
| Arsitektur Model | **EfficientNetV2B0** — keseimbangan optimal antara akurasi dan efisiensi parameter |
| Metode Pelatihan | **Transfer Learning** pada Google Colab (GPU T4) |
2026-06-18 21:27:14 +07:00
| Sumber Dataset 1 | Kaggle — [Corn Leaf Disease ](https://www.kaggle.com/datasets/ndisan/corn-leaf-disease ) |
| Sumber Dataset 2 | Kaggle — [Corn or Maize Leaf Disease Dataset ](https://www.kaggle.com/datasets/smaranjitghose/corn-or-maize-leaf-disease-dataset ) |
| Sumber Dataset 3 | scidb — [Dataset of Corn Leaf Diseases based on Manual Annotation and Contrast Generation Model ](https://www.scidb.cn/en/detail?dataSetId=19536c73f6d74946a212719a94f53ab3 ) |
2026-08-02 16:49:11 +07:00
| Deployment | VPS dengan Nix + systemd + Caddy, ONNX Runtime untuk inferensi real-time |
2026-05-22 21:40:42 +00:00
2026-06-16 00:23:18 +07:00
---
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
## 🎯 Cakupan & Deliverables
### Cakupan
| ✅ Dalam Cakupan | ❌ Di Luar Cakupan |
|---|---|
| Klasifikasi 3 penyakit + 1 daun sehat | Penyakit pada batang atau buah jagung |
| Deteksi berbasis unggah gambar daun | Prediksi tanpa input gambar |
| Rekomendasi obat & penanganan | Diagnosis pengganti ahli/POPT |
2026-06-16 02:58:40 +07:00
| Aplikasi Web + Android (Tauri 2) | Aplikasi iOS |
2026-06-16 00:25:47 +07:00
### 4 Kelas yang Diklasifikasikan
| Label | Nama Ilmiah | Gejala |
|---|---|---|
| **Hawar Daun** | *Northern/Southern Leaf Blight* | Hawar coklat memanjang pada daun |
| **Karat Daun** | *Common Rust* | Bintik coklat kemerahan berbentuk pustula |
| **Bercak Daun** | *Gray Leaf Spot* | Bercak abu-abu memanjang |
| **Daun Sehat** | — | Tanpa gejala penyakit |
### Deliverables Proyek
| No | Tahapan | Deskripsi |
|---|---|---|
| 1 | **Pengumpulan Data** | Dataset gambar 3 penyakit + 1 daun sehat dari Kaggle beserta pelabelan |
| 2 | **Model ML** | Model Computer Vision terlatih di Google Colab, siap produksi |
| 3 | **UI Antarmuka** | Front-End berbasis React + Vite dengan fitur unggah gambar |
2026-08-02 16:49:11 +07:00
| 4 | **Back-End Integration** | API + ML Service untuk inferensi real-time via Nix + systemd |
2026-06-16 02:58:40 +07:00
| 5 | **Prototipe Akhir** | Aplikasi Web + Android (Tauri 2) dengan klasifikasi & modul edukasi (rekomendasi obat & penanganan) |
2026-06-16 00:25:47 +07:00
---
## 📅 Jadwal
| Minggu | Tanggal | Fase | Aktivitas |
|---|---|---|---|
| **1** | 11– 17 Mei 2026 | Inisiasi & Data | Spesifikasi teknis (Asep) • Dataset dari Kaggle + preprocessing (Taufik) • Wireframe UI/UX (Selly) |
| **2** | 18– 24 Mei 2026 | Training & Dev Awal | Implementasi EfficientNetV2B0 di Colab (Luhung) • Slicing UI ke React (Selly) • Setup server, database, routing API (Asep) |
| **3** | 25– 31 Mei 2026 | Evaluasi & Modul Edukasi | Evaluasi akurasi + konversi model ke ONNX/TFLite (Ardian) • Halaman edukasi obat & penanganan (Selly) • RESTful API untuk image upload & inferensi (Asep) |
| **4** | 1– 7 Juni 2026 | Integrasi & Testing | Integrasi penuh Front-End ↔ API ↔ Model ML • Pengujian end-to-end • Stress testing & error handling (Semua) |
| **5** | 8– 14 Juni 2026 | Deployment & Finalisasi | Deployment ke VPS (Asep) • Bug fixing & optimalisasi UI/UX (Selly) • Dokumentasi teknis & materi presentasi (Semua) |
---
## ⚠️ Manajemen Risiko
| Risiko | Solusi |
|---|---|
| **Overfitting akibat imbalanced data** | Augmentasi tingkat lanjut (kecerahan, noise, rotasi) + confidence threshold < 75% → minta user foto ulang |
2026-08-02 16:49:11 +07:00
| **Server downtime / latensi tinggi** | Batasan upload ≤ 5 MB + kompresi server-side + rate limiting + isolasi resource per-service (systemd) |
2026-06-16 00:25:47 +07:00
| **Foto blur / objek bukan daun jagung** | Panduan visual (overlay) pada UI + validasi anomali + disclaimer "alat bantu edukasi, bukan pengganti POPT" |
| **Bottleneck integrasi ML ↔ API ↔ UI** | API Contract ketat di minggu ke-1 + integrasi bertahap (CI) mulai minggu ke-3 |
---
## 🏗️ Arsitektur Proyek
2026-06-16 00:23:18 +07:00
```
2026-05-22 21:53:01 +00:00
.
2026-05-22 21:40:42 +00:00
├── apps/
2026-06-16 00:25:47 +07:00
│ ├── api/ # Backend Elysia/Bun + Drizzle ORM + PostgreSQL
2026-06-16 02:58:40 +07:00
│ ├── ml-service/ # Rust/Axum + ONNX Runtime inference engine
│ ├── tauri/ # Tauri 2 mobile wrapper → Android APK
2026-06-16 00:25:47 +07:00
│ └── web/ # Frontend React + Vite + Tailwind CSS
├── Machine_Learning/ # Pipeline dataset, training Colab, ekspor model
│ └── README.md # ⤷ Panduan lengkap pipeline ML
2026-06-16 00:23:18 +07:00
├── infra/
2026-06-16 00:25:47 +07:00
│ └── README.md # ⤷ Panduan deployment multi-VPS
├── packages/shared/ # Tipe & utilitas TypeScript bersama
├── telemetry/ # Submodule — Prometheus → ClickHouse pipeline
2026-08-02 16:49:11 +07:00
├── flake.nix # Konfigurasi deployment Nix (systemd services)
2026-06-16 00:25:47 +07:00
├── package.json # Root workspace Bun + Moon
└── README.md # ⤷ Anda di sini
2026-05-22 21:40:42 +00:00
```
2026-06-16 00:23:18 +07:00
| Komponen | Teknologi | Dokumentasi |
|---|---|---|
2026-06-16 00:25:47 +07:00
| Web Frontend | React, Vite, Tailwind, Zustand, TanStack Query | `apps/web/` |
2026-06-16 02:58:40 +07:00
| Android App | Tauri 2, Rust, WebView, Deep Link OAuth | `apps/tauri/` |
2026-06-16 00:23:18 +07:00
| API Backend | Bun, Elysia, Drizzle ORM, PostgreSQL | `apps/api/` |
2026-06-16 02:58:40 +07:00
| ML Inference Engine | Rust, Axum, ONNX Runtime | [`apps/ml-service/README.md` ](apps/ml-service/README.md ) |
2026-06-16 00:23:18 +07:00
| ML Pipeline | Python, TensorFlow/Keras, EfficientNetV2B0 | [`Machine_Learning/README.md` ](Machine_Learning/README.md ) |
2026-08-02 16:49:11 +07:00
| Infrastruktur | Nix, systemd, Caddy, Tailscale | [`infra/README.md` ](infra/README.md ) |
2026-06-16 00:23:18 +07:00
| Telemetry | Prometheus, ClickHouse, Vector, Vue 3 | `telemetry/` |
---
2026-06-16 00:25:47 +07:00
## 🛠️ Tech Stack
2026-05-22 21:40:42 +00:00
2026-06-16 02:58:40 +07:00
### Frontend & Mobile
2026-06-16 00:23:18 +07:00
React • Vite • TypeScript • React Router • TanStack Query • Zustand • Tailwind CSS
2026-06-16 02:58:40 +07:00
**Tauri 2** (Android) • Rust • WebView • Deep Link OAuth
2026-05-22 21:40:42 +00:00
2026-05-22 21:53:01 +00:00
### Backend API
2026-06-16 00:25:47 +07:00
Bun • Elysia • Drizzle ORM • PostgreSQL • prom-client
2026-05-22 21:40:42 +00:00
2026-05-22 21:53:01 +00:00
### Machine Learning
2026-06-16 00:25:47 +07:00
Python • TensorFlow/Keras • EfficientNetV2B0 • Google Colab (GPU T4)
2026-06-16 02:58:40 +07:00
### Inference Engine
**Rust** • **Axum** • **ONNX Runtime** • TFLite • TensorFlow.js
2026-05-22 21:53:01 +00:00
2026-06-16 00:25:47 +07:00
### DevOps & Infrastruktur
2026-08-02 16:49:11 +07:00
Nix • systemd • Caddy • Tailscale • GitHub Actions (CI/CD)
2026-05-22 21:53:01 +00:00
2026-06-16 00:25:47 +07:00
### Observabilitas
2026-06-16 00:23:18 +07:00
Prometheus • Metric Ingester (Go) • Vector • ClickHouse • Query Proxy (Go) • Telemetry UI (Vue 3)
2026-05-22 21:40:42 +00:00
2026-06-16 00:23:18 +07:00
---
2026-06-07 21:00:22 +07:00
2026-06-16 00:25:47 +07:00
## 🚀 Memulai
2026-06-07 21:00:22 +07:00
2026-06-16 00:23:18 +07:00
### Prasyarat
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
- **Bun** — runtime & package manager
- **Python 3.9– 3.11** — pipeline ML
2026-06-16 02:58:40 +07:00
- **Rust & Cargo** — `apps/ml-service` (inference) & `apps/tauri` (Android)
- **Java 21 + Android SDK** — build Android APK
2026-08-02 16:49:11 +07:00
- **Nix** — build & deployment produksi (flake.nix, systemd services)
- **PostgreSQL (Neon)** — backend API (via pgbouncer pool imrnes `100.121.180.82:6432` )
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
### Instalasi
2026-05-22 21:40:42 +00:00
```bash
2026-06-16 00:25:47 +07:00
git clone https://github.com/ATLAS-PJK-GM007/ZeaVis-Edu.git
cd ZeaVis-Edu
2026-05-22 21:40:42 +00:00
bun install
```
2026-06-16 00:25:47 +07:00
### Menjalankan Development
2026-05-22 21:53:01 +00:00
2026-05-22 21:40:42 +00:00
```bash
2026-06-16 00:25:47 +07:00
bun run dev # Semua service (web + api)
cd apps/web && bun run dev # Hanya frontend
cd apps/api && bun run start # Hanya backend API
2026-08-02 16:14:12 +07:00
cd apps/ml-service && cargo run # ML inference engine (port 4012)
2026-06-16 02:58:40 +07:00
cd apps/tauri && bun run tauri dev # Tauri desktop dev
cd apps/tauri && bun run tauri android dev # Tauri Android dev
2026-05-22 21:40:42 +00:00
```
2026-06-16 00:25:47 +07:00
### Environment Variables
Salin `.env.example` ke `.env` dan isi:
2026-05-22 21:53:01 +00:00
2026-06-16 00:23:18 +07:00
| Variable | Keterangan |
|---|---|
| `DATABASE_URL` | URL koneksi PostgreSQL |
| `SESSION_SECRET` | Secret untuk session auth |
| `WEB_APP_URL` | URL frontend (untuk CORS) |
| `ML_SERVICE_URL` | URL layanan inferensi ML |
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
### Pipeline ML (Ringkasan)
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
1. Unduh 3 dataset ZIP → letakkan di `Machine_Learning/`
2. `python preprocessing.py` — gabungkan & bersihkan dataset
3. Upload `dataset.zip` ke Google Drive
4. Jalankan `notebook.ipynb` di Google Colab (GPU T4)
5. Download `best_model.keras`
6. `python save_model.py` → TFLite + SavedModel
7. Konversi ke TFJS & ONNX
2026-05-22 21:53:01 +00:00
2026-06-16 00:23:18 +07:00
> 📖 **Panduan lengkap:** [`Machine_Learning/README.md`](Machine_Learning/README.md)
2026-05-22 21:53:01 +00:00
2026-06-16 00:25:47 +07:00
### Deployment
2026-05-22 21:53:01 +00:00
2026-08-02 16:49:11 +07:00
Produksi: **Nix + systemd + Caddy** (Docker sudah dihapus dari produksi 2026-08-02).
Deploy via GitHub Actions → `nix build .#<service>` → `nix copy ssh://imrnes` → `systemctl restart zeavis-<service>` .
Reverse proxy: Caddy 2.11.4 (`systemd caddy.service` , auto-TLS Let's Encrypt, HTTP/3).
2026-05-22 21:40:42 +00:00
```bash
2026-08-02 16:49:11 +07:00
# Port produksi: zeavis-api 4006, zeavis-web (nginx) 4011, zeavis-ml 4012
# Database: Neon via pgbouncer pool imrnes 100.121.180.82:6432
make telemetry-up # Telemetry stack (dev/local)
2026-05-22 21:40:42 +00:00
```
2026-06-16 00:25:47 +07:00
> 📖 **Panduan infrastruktur:** [`infra/README.md`](infra/README.md)
2026-06-16 00:23:18 +07:00
---
2026-06-16 02:58:40 +07:00
## 📱 Platform
ZeaVis Edu tersedia di **dua platform** dari satu codebase:
| Platform | Teknologi | Build |
|---|---|---|
| **Web** | React + Vite → Static SPA | `bun run build` |
| **Android** | Tauri 2 + Rust → WebView APK | `cd apps/tauri && bun run tauri android build --apk` |
### Tauri 2 Android
Aplikasi Android membungkus frontend web yang sama dalam **WebView native** menggunakan **Tauri 2** , memberikan akses ke API native Android tanpa menulis ulang UI.
**Fitur Android:**
- **Google OAuth** — Login via system browser + deep link `zeavisedu://` kembali ke app
- **Kamera** — Izin `CAMERA` untuk unggah foto daun jagung langsung dari kamera
- **Tauri Plugin Opener** — Buka URL eksternal di system browser
- **Tauri Plugin Deep Link** — Tangkap OAuth callback tanpa memerlukan server redirect
**CI/CD Android:**
- GitHub Actions workflow `.github/workflows/android.yml`
- Build otomatis di setiap push/PR ke `main`
- Patch `AndroidManifest.xml` untuk menambahkan izin kamera + intent filter deep link
- APK ditandatangani (signed) via `apksigner` + release ke GitHub Releases
```bash
# Development Android (butuh Android SDK + emulator/device)
cd apps/tauri
bun run tauri android init # Init project Android
bun run tauri android dev # Dev dengan hot reload
bun run tauri android build --apk # Build APK production
# CI/CD — dijalankan otomatis via GitHub Actions
.github/workflows/android.yml
```
> Konfigurasi: `apps/tauri/tauri.conf.json` • `apps/tauri/gen/android/`
---
2026-06-16 00:25:47 +07:00
## 📚 Dokumentasi
2026-06-16 00:23:18 +07:00
| Dokumen | Isi |
|---|---|
2026-06-16 00:25:47 +07:00
| [`Machine_Learning/README.md` ](Machine_Learning/README.md ) | Pipeline ML lengkap — preprocessing, training Colab, ekspor TFLite/TFJS/ONNX |
| [`apps/ml-service/README.md` ](apps/ml-service/README.md ) | ML Inference Service — setup, endpoint API, konfigurasi |
2026-06-16 00:23:18 +07:00
| [`infra/README.md` ](infra/README.md ) | Arsitektur multi-VPS — diagram, GitHub Secrets, port, metrics flow |
2026-06-16 00:25:47 +07:00
| [`METRICS.md` ](METRICS.md ) | Daftar lengkap metrik Prometheus |
2026-06-16 00:23:18 +07:00
| `telemetry/` (submodule) | Source code telemetry stack |
---
2026-06-16 00:25:47 +07:00
## 🔧 Troubleshooting
2026-06-16 00:23:18 +07:00
2026-06-16 00:25:47 +07:00
| Masalah | Solusi |
|---|---|
| `bun install` gagal | `bun --version` — pastikan ≥ 1.x |
| API perlu database | Isi `DATABASE_URL` di root `.env` |
| ML service gagal muat model | `ls Machine_Learning/model/model.onnx` — jalankan pipeline ML jika belum ada |
2026-08-02 16:49:11 +07:00
| Service tidak restart setelah deploy | `systemctl restart zeavis-api zeavis-web zeavis-ml` (Nix+systemd, bukan Docker) |
2026-06-16 00:25:47 +07:00
| Konversi TFJS gagal | `export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python` |
2026-05-22 21:40:42 +00:00
2026-06-16 00:23:18 +07:00
---
2026-06-16 00:25:47 +07:00
## 📖 Daftar Pustaka
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
1. Prayogi, A. et al. *"Klasifikasi Penyakit Daun Jagung Menggunakan CNN"* — [SISTEMATIS ](https://ejournal.rizaniamedia.com/index.php/sistematis/article/view/87/49 )
2. Nugroho, A. et al. *"Deteksi Penyakit Daun Jagung dengan Deep Learning"* — [MIND Journal ](https://ejurnal.itenas.ac.id/index.php/mindjournal/article/view/14032/4209 )
3. Ramadhan, F. et al. *"Identifikasi Penyakit Jagung Berbasis Citra Digital"* — [Informa ](https://www.informa.poltekindonusa.ac.id/index.php/informa/article/view/199/170 )
4. Corteva Agriscience. *"Kenali Ragam Jenis Penyakit Jagung dan Cara Mengatasinya"* — [corteva.com ](https://www.corteva.com/id/berita/Kenali-Ragam-Jenis-Penyakit-Jagung-dan-Cara-Mengatasinya.html )
2026-05-22 21:40:42 +00:00
2026-06-16 00:23:18 +07:00
---
2026-05-22 21:40:42 +00:00
2026-06-16 00:25:47 +07:00
<p align="center">
<sub>
Capstone Project • Pijak × IBM SkillsBuild • AI for Smart Education<br>
© 2026 ZeaVis Edu Team
</sub>
</p>