markus / README.md
mrbhaqee's picture
Update README.md
2f8cafc verified
|
Raw
History Blame Contribute Delete
3.81 kB
---
title: BrainScan AI
emoji: 🧠
colorFrom: red
colorTo: blue
sdk: gradio
app_file: app.py
pinned: false
license: mit
---
# BrainScan AI β€” Hybrid EfficientNet-ViT
Klasifikasi CT-Scan/MRI otak (Alzheimer, Intracranial Hemorrhage, Normal,
Ischemic Stroke, Brain Tumor) menggunakan model hybrid EfficientNet-B3 +
custom Vision Transformer dengan Cross-Modal Attention Fusion.
Model checkpoint diambil otomatis dari:
https://huggingface.co/Marksnb/brain-hybrid-efficientnet-vit
## Cara Pakai lewat Endpoint (API)
Space ini otomatis punya REST API bawaan Gradio di endpoint `/analyze`
(nama ini diatur lewat `api_name="analyze"` di `app.py`). Ganti `SPACE_URL`
di bawah dengan URL Space kamu, contoh: `https://username-brainscan-ai.hf.space`.
### Opsi 1 β€” Pakai `gradio_client` (Python, paling mudah)
```bash
pip install gradio_client
```
```python
from gradio_client import Client, handle_file
client = Client("SPACE_URL") # atau "username/brainscan-ai" kalau Space public
result = client.predict(
handle_file("path/ke/gambar_otak.jpg"),
api_name="/analyze"
)
label_scores, heatmap_path, summary = result
print(label_scores) # dict probabilitas tiap kelas
print(summary) # ringkasan teks prediksi
print(heatmap_path) # path lokal file heatmap hasil download otomatis
```
Kalau Space kamu private, tambahkan token:
```python
client = Client("SPACE_URL", hf_token="hf_xxxxxxxxxxxxxxxxxxxx")
```
### Opsi 2 β€” REST API langsung (curl / bahasa apa pun)
Gradio (versi 5+) memakai pola *submit lalu poll*: POST dulu untuk submit job,
lalu GET untuk stream hasilnya pakai `event_id` yang didapat.
**Langkah 1 β€” Submit gambar (base64):**
```bash
curl -X POST "SPACE_URL/gradio_api/call/analyze" \
-H "Content-Type: application/json" \
-d '{
"data": [
{
"path": null,
"url": "data:image/jpeg;base64,'"$(base64 -w0 gambar_otak.jpg)"'",
"meta": {"_type": "gradio.FileData"}
}
]
}'
```
Response berisi `event_id`, contoh:
```json
{"event_id": "abc123..."}
```
**Langkah 2 β€” Ambil hasil pakai event_id:**
```bash
curl -N "SPACE_URL/gradio_api/call/analyze/abc123..."
```
Response berupa Server-Sent Events (SSE), baris terakhir bertipe `event: complete`
berisi array JSON hasil: `[label_scores, heatmap_fileinfo, summary_markdown]`.
### Opsi 3 β€” Upload file lewat endpoint upload bawaan Gradio
Kalau gambar berupa file (bukan base64), upload dulu ke endpoint `/gradio_api/upload`,
lalu pakai path hasil upload itu di payload `data` pada langkah submit di atas:
```bash
curl -X POST "SPACE_URL/gradio_api/upload" \
-F "files=@gambar_otak.jpg"
# -> mengembalikan array path, misal: ["/tmp/xxx/gambar_otak.jpg"]
curl -X POST "SPACE_URL/gradio_api/call/analyze" \
-H "Content-Type: application/json" \
-d '{
"data": [
{"path": "/tmp/xxx/gambar_otak.jpg", "meta": {"_type": "gradio.FileData"}}
]
}'
```
### Format Output
Endpoint `/analyze` mengembalikan 3 nilai (urut sesuai `outputs=` di `app.py`):
| # | Nilai | Tipe | Keterangan |
|---|-------------------|--------------------------------|-----------------------------------------------|
| 1 | `label_scores` | `dict[str, float]` | Probabilitas tiap kelas (0–1) |
| 2 | `heatmap` | file gambar (FileData) | Overlay peta atensi ViT |
| 3 | `summary` | `string` (markdown) | Ringkasan prediksi + confidence + disclaimer |
### Cara paling praktis melihat contoh payload persis
Buka `SPACE_URL/?view=api` di browser (halaman "Use via API" bawaan Gradio) β€”
di situ tersedia contoh kode Python, JavaScript, dan cURL yang sudah otomatis
disesuaikan dengan skema input/output Space ini.