File size: 4,544 Bytes
60f63d9
734487f
 
60f63d9
 
 
 
 
 
734487f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
---
title: Freshly Universal API
colorFrom: green
colorTo: pink
sdk: docker
pinned: false
license: mit
---

# FRESHLY Universal API

Selamat datang di repositori backend resmi **FRESHLY API**! 

API ini dibangun menggunakan **FastAPI** dan ditenagai oleh model Deep Learning kustom (arsitektur *CNN dengan Spatial Attention*) yang dilatih dari nol (*Training from Scratch*). API ini berfungsi sebagai otak utama aplikasi FRESHLY untuk mengklasifikasikan jenis buah/sayur beserta tingkat kematangannya guna mengurangi *food waste*.

## 🧠 Spesifikasi Arsitektur Model
Berbeda dengan API pada umumnya yang menggunakan *Pre-trained Model* (Transfer Learning), model AI FRESHLY dibangun 100% dari awal. Keunggulan utama model kami terletak pada penggunaan **Spatial Attention Layer** buatan sendiri. 

Fitur ini memungkinkan "mata" AI kami untuk berfokus pada titik-titik krusial pada gambar (seperti bercak hitam pembusukan atau transisi warna mentah ke matang), mengabaikan *background* yang tidak penting, dan menghasilkan akurasi prediksi yang sangat tinggi.

## πŸ› οΈ Tech Stack & Teknologi
* **Framework Backend:** FastAPI, Uvicorn
* **Machine Learning:** TensorFlow, Keras
* **Arsitektur Utama:** Custom CNN Cascade System
* **Deployment:** Docker, Hugging Face Spaces

## πŸ“š Dokumentasi Interaktif & Uji Coba (Swagger UI)

Bagi tim Frontend atau penguji yang ingin langsung mencoba mengunggah gambar ke AI tanpa perlu menulis kode, silakan akses halaman Swagger UI kami di bawah ini:

πŸ‘‰ **[Buka Halaman Uji Coba API Interaktif (/docs)](https://freshlyteam-freshly-api.hf.space/docs)** ---

## πŸš€ Daftar Endpoint

### 1. Health Check
Endpoint ini digunakan untuk memastikan server dalam keadaan aktif (cocok dihubungkan dengan *UptimeRobot* untuk mencegah *cold start*).
* **URL:** `/health`
* **Method:** `GET`
* **Response:** JSON berisi status server.

### 2. Predict Freshness (Main AI)
Endpoint utama untuk mendeteksi tingkat kematangan buah/sayur. Untuk menjaga akurasi tertinggi, API ini membutuhkan jenis buah yang dipilih oleh pengguna sebagai parameter.
* **URL:** `/predict`
* **Method:** `POST`
* **Body:** `multipart/form-data` 
  * `fruit_type` (String): Tulis salah satu dari kelas yang didukung (contoh: banana, mango, chili).
  * `file` (File): File gambar buah/sayur.
* **Response Contoh:**
  ```json
  {
    "status": "success",
    "data": {
      "detected_fruit": "banana",
      "condition": "ripe",
      "condition_confidence": 98.5
    }
  }

## πŸ’» Panduan Integrasi (Untuk Tim Frontend)

Berikut adalah contoh implementasi pemanggilan API `/predict` menggunakan **JavaScript (Fetch API)** di sisi *client*:

```javascript
// 1. Ambil elemen dari HTML
const fileInput = document.getElementById('imageInput');
const file = fileInput.files[0];
const selectedFruit = "banana"; // Sesuai pilihan user di UI (dropdown/icon)

// 2. Siapkan form data
const formData = new FormData();
formData.append("fruit_type", selectedFruit); // Wajib dikirimkan!
formData.append("file", file);

// 3. Panggil API Freshly
fetch("https://freshlyteam-freshly-api.hf.space/predict", {
    method: "POST",
    body: formData
})
.then(response => response.json())
.then(result => {
    console.log("Status:", result.status);
    console.log("Kondisi Buah:", result.data.condition);
})
.catch(error => {
    console.error("Terjadi kesalahan:", error);
});
```
***(Catatan: Ganti URL freshlyteam-freshly-api.hf.space dengan URL Direct Space kalian jika ada perubahan).***

## 🍎 Parameter `fruit_type` yang Valid

Sangat penting bagi tim Frontend atau Penguji untuk mengirimkan **`fruit_type`** dengan ejaan huruf kecil yang tepat. **Saat ini, model kami mendukung 6 kelas berikut:**

* **`banana` (Pisang)**
* **`mango` (Mangga)**
* **`orange` (Jeruk)**
* **`chili` (Cabai)**
* **`paprika` (Paprika)**
* **`tomato` (Tomat)**

*Sistem akan mengembalikan error 400 (Bad Request) atau 422 (Validation Error) jika memasukkan jenis buah selain daftar di atas.*

## βš™οΈ Cara Menjalankan Server di Local (Local Development)

Jika tim Frontend ingin menguji API ini secara offline di komputer masing-masing:
```bash
# 1. Clone repository
git clone https://huggingface.co/spaces/freshlyTeam/freshly-api

# 2. Install library yang dibutuhkan
pip install -r requirements.txt

# 3. Jalankan server lokal
uvicorn main:app --reload
```
*Server akan berjalan di `http://127.0.0.0:8000`. Akses `http://127.0.0.0:8000/docs` untuk Swagger UI lokal.*

**Developed with πŸ”₯πŸ’ͺ by Tim AI FRESHLY - Coding Camp powered by DBS Foundation 2026**