Spinach Detector
Sistem deteksi objek real-time untuk mengenali bayam menggunakan model YOLO
Bagikan proyek ini:
Tentang Proyek
🥬 Spinach Detector AI
Sistem deteksi objek real-time untuk mengenali bayam menggunakan model deep learning YOLO (You Only Look Once). Dibangun dengan React (Frontend) dan Flask (Backend) untuk menghadirkan proses deteksi secara langsung dengan visual bounding box dan confidence score.
👨💻 Developer
| Nama |
|---|
| Daffa |
🧠 Deskripsi
Spinach Detector AI adalah aplikasi computer vision yang memanfaatkan model YOLO modern untuk mendeteksi bayam secara real-time melalui webcam. Sistem ini menyediakan:
- Deteksi real-time dengan live camera feed
- Visual bounding box bergaya YOLO (corner brackets)
- Confidence score pada setiap hasil deteksi
- Dukungan multi-model (YOLO 9 dan YOLO 11)
- UI modern dan responsif dengan efek glassmorphism
Cocok untuk kebutuhan demonstrasi object detection maupun sebagai fondasi sistem pengenalan objek berbasis AI.
⚙️ Teknologi yang Digunakan
Backend
- Python 3.x
- Flask – Web framework
- Flask-CORS – Cross-origin resource sharing
- Ultralytics YOLO – Model deteksi objek
- Pillow (PIL) – Pemrosesan gambar
Frontend
- React – Framework UI
- Vite – Build tool & dev server
- Axios – HTTP client
- CSS3 – Styling modern (gradient & glassmorphism)
- Canvas API – Visualisasi bounding box real-time
🚀 Cara Menjalankan Project
Prasyarat
- Python 3.8+
- Node.js 16+ dan npm
- Akses webcam
1️⃣ Setup Backend (Flask)
cd backend
pip install flask flask-cors ultralytics pillow
python main.py
Backend akan berjalan di:
http://localhost:5000
2️⃣ Setup Frontend (React)
cd frontend
npm install
npm run dev
Frontend akan berjalan di:
http://localhost:5173
🧩 Struktur Project
spinach-detector/
├── backend/
│ ├── main.py # Server API Flask
│ ├── models/
│ │ ├── yolo9.pt # Bobot model YOLO 9
│ │ └── yolo11.pt # Bobot model YOLO 11
│ └── requirements.txt
│
├── frontend/
│ ├── src/
│ │ ├── App.js # Komponen utama React
│ │ ├── index.js # Entry point
│ │ └── index.css # Style global
│ ├── public/
│ └── package.json
│
└── README.md
🧠 Cara Kerja Sistem
- User membuka aplikasi web dan memberikan izin kamera
- User memilih model YOLO (YOLO 9 atau YOLO 11)
- Sistem mulai menangkap frame kamera setiap 500ms
- Backend memproses frame menggunakan model YOLO
- Backend mengembalikan data deteksi:
- Koordinat bounding box (0–1, ternormalisasi)
- Confidence score
- Status deteksi bayam
- Frontend menggambar bounding box secara real-time:
- Warna hijau dengan corner brackets
- Label “bayam” + persentase confidence
- Overlay langsung di atas video
🔌 API Endpoint
POST /predict
Menganalisis gambar dan mendeteksi objek bayam.
Request:
- Method:
POST - Content-Type:
multipart/form-data - Body:
image: [file gambar]
model: "yolo11" | "yolo9"
Response:
{
"is_bayam": true,
"confidence": 95.67,
"detections": [
{
"x": 0.245,
"y": 0.312,
"width": 0.189,
"height": 0.234,
"confidence": 95.67
}
]
}
Keterangan Field:
is_bayam→ Apakah bayam terdeteksiconfidence→ Confidence tertinggi (0–100)detections→ Daftar objek terdeteksi
✨ Fitur Utama
🎨 Desain UI Modern
- Efek glassmorphism
- Background gradient
- Dark mode
- Responsif (desktop & mobile)
- Animasi halus
📦 Bounding Box Real-time
- Gaya YOLO (corner brackets)
- Warna hijau terang
- Label confidence
- Multi-detection
📊 Dashboard Statistik
- Confidence maksimum
- Jumlah objek terdeteksi
- Model YOLO aktif
🎯 Kontrol Deteksi
- Ganti model YOLO
- Start / Stop deteksi
- Status indikator
- Error handling
🎮 Cara Menggunakan
- Buka
http://localhost:5173 - Izinkan akses kamera
- Pilih model YOLO:
- YOLO 11 (disarankan, lebih akurat)
- YOLO 9 (lebih ringan & cepat)
- Klik Start Detection
- Arahkan bayam ke kamera
- Bounding box dan confidence akan muncul
- Klik Stop untuk menghentikan
🔧 Kustomisasi
Mengganti Objek Deteksi
Di main.py:
if model.names[cls].lower() == "nama_objek":
Mengatur Kecepatan Deteksi
Di App.js:
intervalRef.current = setInterval(captureAndDetect, 500);
Mengubah Warna Bounding Box
const boxColor = "#10b981";
Menambahkan Model Baru
- Tambahkan file
.ptkebackend/models/ - Update
main.py - Tambahkan opsi di
App.js
🐛 Troubleshooting
Kamera tidak aktif
- Cek permission browser
- Gunakan localhost / HTTPS
Backend error
- Pastikan model ada
- Pastikan Flask berjalan
Deteksi tidak muncul
- Pencahayaan kurang
- Model belum dilatih untuk bayam
Performa lambat
- Kurangi FPS
- Gunakan YOLO 9
- Turunkan resolusi video
📝 Lisensi
Open source untuk keperluan edukasi.
🤝 Kontribusi
Pull request dan issue sangat diterima.
🙏 Apresiasi
- Ultralytics YOLO
- React
- Flask
- Google Fonts (Inter)
Built with ❤️ menggunakan YOLO AI