imgtools-ai / README.md
ilhamdev's picture
feat(ai): configure Gradio SDK with ZeroGPU support and REST API mounting
824ac86
|
Raw History Blame Contribute Delete
4.08 kB
---
title: ImgTools AI
emoji: 🖼️
colorFrom: indigo
colorTo: pink
sdk: gradio
app_file: app.py
app_port: 7860
hardware: zero-a10g
license: mit
---
# ImgTools AI — Backend Service
Layanan REST API bertenaga AI untuk pemrosesan gambar tingkat lanjut pada **ImgTools**, dibangun dengan FastAPI dan dioptimalkan untuk deployment pada **Hugging Face Spaces** (Docker CPU).
---
## Fitur Utama
- **Hapus Latar Belakang (Remove Background)**: Segmentasi gambar akurat berbasis model `briaai/RMBG-1.4`.
- **Tingkatkan Resolusi (Upscale)**: Super-resolution 2x & 4x berbasis `caidas/swin2SR-realworld-sr-x4-64-bsrl`.
- **Tingkatkan Kualitas (Enhance)**: Peningkatan ketajaman dan detail berbasis `caidas/swin2SR-classical-sr-x2-64` + UnsharpMask.
- **Buramkan Wajah & Sensor (Face Blur)**: Deteksi wajah otomatis dengan `Bingsu/yolov8n-face` (Ultralytics YOLO) + dukungan area manual (*bounding boxes* JSON) dengan filter Gaussian Blur atau Pixelate.
- **Konversi RAW ke JPG**: Ekstraksi dan post-processing citra kamera RAW profesional via LibRaw (`rawpy`).
- **Lazy-Load & Semaphore Caching**: Model ML hanya dimuat ke memori saat pertama kali dibutuhkan, dengan `asyncio.Semaphore` menjaga batas concurrency.
- **Normalisasi EXIF & Kontrol Memori**: Menormalkan orientasi EXIF secara otomatis dan membatasi ukuran memori dengan aman.
---
## Daftar Endpoint REST API
### 1. Health & Status
- **`GET /health`**: Status pemeriksaan kesehatan sistem (`{"status": "ok"}`).
- **`GET /`**: Info root dan ringkasan daftar endpoint yang aktif.
---
### 2. Hapus Latar Belakang
- **`POST /api/remove-bg`**
- **Body (`multipart/form-data`)**: `file` (File biner citra)
- **Respons**: Aliran biner citra `image/png` transparan (RGBA).
---
### 3. Upscale (Super-Resolution)
- **`POST /api/upscale`**
- **Body / Params**:
- `file` (File biner citra)
- `scale` (`int`, default: `2`): Faktor perbesaran (`2` atau `4`). Validasi mengembalikan `422` jika tidak valid.
- `max_side` (`int`, default: `2048`): Batas dimensi sisi terpanjang sebelum inferensi.
- **Respons**: Aliran biner citra `image/png` beresolusi tinggi.
---
### 4. Enhance (Peningkatan Kualitas)
- **`POST /api/enhance`**
- **Body / Params**:
- `file` (File biner citra)
- `strength` (`float`, default: `1.0`): Kekuatan penajaman (diterapkan pada filter UnsharpMask).
- **Respons**: Aliran biner citra `image/png` tajam dan jernih.
---
### 5. Buramkan Wajah / Sensor Area
- **`POST /api/face-blur`**
- **Body / Params**:
- `file` (File biner citra)
- `blur` (`int`, default: `25`): Radius blur atau ukuran pikselasi.
- `mode` (`string`, default: `"gaussian"`): Mode sensor (`"gaussian"` atau `"pixelate"`).
- `conf` (`float`, default: `0.35`): Ambang batas confidence deteksi wajah YOLO.
- `boxes` (`string` JSON, opsional): List area manual `[x, y, w, h]` atau `[[x, y, w, h], ...]`.
- **Respons**: Aliran biner citra `image/png` dengan area wajah/sensor yang diburamkan.
---
### 6. Konversi RAW ke JPG
- **`POST /api/raw-to-jpg`**
- **Body**: `file` (File citra kamera RAW, misal: CR2, NEF, ARW, DNG, dsb.)
- **Respons**: Aliran biner citra `image/jpeg` dengan kualitas 92.
- **Error**: `422 Unprocessable Entity` jika berkas RAW tidak valid atau korup.
---
## Konfigurasi Lingkungan (*Environment Variables*)
| Variabel | Tipe | Default | Deskripsi |
| :--- | :--- | :--- | :--- |
| `ALLOWED_ORIGINS` | string | `http://localhost:3000` | Domain CORS yang diizinkan (pisahkan dengan koma). |
| `MAX_PIXELS` | integer | `24000000` | Batas piksel maksimal (24 MP). Gambar di-downscale proporsional jika melampaui. |
| `MAX_BYTES` | integer | `26214400` | Batas ukuran berkas (25 MB, HTTP 413 jika melebihi). |
| `MAX_CONCURRENCY` | integer | `2` | Jumlah maksimum inferensi paralel. |
---
## Menjalankan Layanan
### Menggunakan Docker
```bash
docker build -t imgtools-ai .
docker run -p 7860:7860 -e ALLOWED_ORIGINS="http://localhost:3000" imgtools-ai
```
Dokumentasi interaktif OpenAPI / Swagger dapat diakses di `http://localhost:7860/docs`.