86 lines
1.9 KiB
Markdown
86 lines
1.9 KiB
Markdown
# CARA SETUP FOTO DETEKSI REALTIME
|
|
# ============================================================
|
|
|
|
## Yang perlu dilakukan (3 langkah saja):
|
|
|
|
---
|
|
|
|
## LANGKAH 1 — Aktifkan Firebase Storage
|
|
|
|
1. Buka https://console.firebase.google.com
|
|
2. Pilih project: smart-donation-adff1
|
|
3. Di menu kiri klik: **Storage** → klik **Get Started**
|
|
4. Pilih region: **asia-southeast1** → klik Next → Done
|
|
5. Setelah Storage aktif, klik tab **Rules** dan ganti dengan:
|
|
|
|
```
|
|
rules_version = '2';
|
|
service firebase.storage {
|
|
match /b/{bucket}/o {
|
|
match /{allPaths=**} {
|
|
allow read, write: if true;
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
6. Klik **Publish**
|
|
|
|
---
|
|
|
|
## LANGKAH 2 — Install library baru di Python
|
|
|
|
Jalankan perintah ini di terminal:
|
|
|
|
```bash
|
|
pip install firebase-admin opencv-python ultralytics
|
|
```
|
|
|
|
Kalau pakai conda/Anaconda:
|
|
```bash
|
|
pip install firebase-admin --break-system-packages
|
|
```
|
|
|
|
Library `firebase-admin` sudah include Storage, tidak perlu install tambahan.
|
|
|
|
---
|
|
|
|
## LANGKAH 3 — Ganti file
|
|
|
|
Ganti file lama dengan file baru dari folder ini:
|
|
- `main.py` → ganti main.py yang lama
|
|
- `index.html` → ganti web/index.html yang lama
|
|
|
|
ESP32 **tidak perlu diubah** sama sekali.
|
|
|
|
---
|
|
|
|
## Cara Kerja Setelah Setup
|
|
|
|
```
|
|
ESP32-CAM kirim foto
|
|
↓
|
|
Flask terima + YOLO deteksi
|
|
↓
|
|
Flask upload foto (overwrite 1 file) ke Firebase Storage
|
|
↓
|
|
Flask simpan URL foto ke Realtime DB: smart_donation_box/last_detection
|
|
↓
|
|
Dashboard baca URL dari Realtime DB → tampilkan foto otomatis
|
|
```
|
|
|
|
Hanya 1 file foto yang tersimpan di Storage (last_detection.jpg),
|
|
selalu di-overwrite → Storage tidak penuh.
|
|
|
|
---
|
|
|
|
## Struktur Firebase Realtime DB (tambahan baru)
|
|
|
|
```
|
|
smart_donation_box/
|
|
└── last_detection/ ← NODE BARU
|
|
├── foto_url : string → URL publik foto di Firebase Storage
|
|
├── label : string → Hasil deteksi (misal: "Rp 2000, Rp 5000")
|
|
└── timestamp : number → Waktu deteksi (Unix ms)
|
|
```
|