Spaces:
Paused
Paused
File size: 4,077 Bytes
0db733a 824ac86 0db733a 824ac86 0db733a 851dd4a 0db733a 851dd4a d40a73b 851dd4a 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b 0db733a d40a73b | 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 | ---
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`.
|