์๊ท๋ชจ ํจ์ ์ผํ๋ชฐ์ ์ํ ์ธ์คํ๊ทธ๋จ ๊ด๊ณ ์๋ ์์ฑ AI ์๋น์ค
ํ๋ก์ ํธ ๊ฐ์ โข ๊ธฐ์ ์คํ โข ์ฃผ์ ๊ธฐ๋ฅ โข ์ค์น ๋ฐฉ๋ฒ โข ์ฌ์ฉ๋ฒ
AdGen_AI๋ ์๊ท๋ชจ ํจ์ ์ผํ๋ชฐ ์ฌ์ฅ๋๋ค์ด ํด๋ํฐ์ผ๋ก ์ํ์ ์ดฌ์ํ๊ณ ๊ฐ๋จํ ๋ช ๋ น์ผ๋ก 1๋ถ ๋ด์ ์ธ์คํ๊ทธ๋จ ๊ด๊ณ ๋ฅผ ์๋ ์์ฑํ ์ ์๋ AI ์๋น์ค์ ๋๋ค.
์ด ์ ์ฅ์๋ AdGen_AI ํ๋ก์ ํธ์์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ(Background Removal & Image Preprocessing) ๋ชจ๋์ ๋ด๋นํฉ๋๋ค.
- ํ์คํ ๊ฐ๋ฐ์: ํ๋ก ํธ์๋ + ๋ฐฑ์๋ + ํ ์คํธ AI
- ์ด๋ฏธ์ง ์ถ์ถ ๋ชจ๋ธ ๊ฐ๋ฐ์ โ ๋์ ๋ด๋น
- ์ด๋ฏธ์ง ์์ฑ ๋ชจ๋ธ ๊ฐ๋ฐ์: ๋ฐฐ๊ฒฝ ์์ฑ + ์คํ์ผ๋ง
- ์์์ผ: 2025-12-30
- ์ข ๋ฃ์ผ: 2026-01-28
- ์ด ๊ธฐ๊ฐ: 29์ผ
- Python 3.11+: ๋ฉ์ธ ๊ฐ๋ฐ ์ธ์ด
- RMBG-2.0: ์ต์ AI ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ชจ๋ธ (BiRefNet ๊ธฐ๋ฐ)
- U2-Net: ํด๋ฐฑ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ชจ๋ธ (rembg)
- FastAPI: REST API ์๋ฒ
- Celery + RabbitMQ: ๋น๋๊ธฐ ์์ ์ฒ๋ฆฌ
- OpenCV: ์ด๋ฏธ์ง ์ ์ฒ๋ฆฌ ๋ฐ ์กฐ์
- Pillow (PIL): ์ด๋ฏธ์ง ํฌ๋งท ๋ณํ
- NumPy: ๋ฐฐ์ด ์ฐ์ฐ ๋ฐ ์ด๋ฏธ์ง ์ฒ๋ฆฌ
- Docker: ์ปจํ ์ด๋ํ
- Google Cloud Storage: ์ด๋ฏธ์ง ์ ์ฅ์
- Redis: ์บ์ฑ ์์คํ
- PostgreSQL: ๋ฉํ๋ฐ์ดํฐ ๊ด๋ฆฌ
- RMBG-2.0 ๋ชจ๋ธ์ ํ์ฉํ ์๋ ๋๋ผ ์์ (BiRefNet ์ํคํ ์ฒ)
- ์ฒ๋ฆฌ ์๊ฐ: 3-5์ด
- ์ ํ๋: 90%+ (๋ณต์กํ ๋ฐฐ๊ฒฝ์์ 87-92%)
- ์ฃ์ง ํ์ง: 256๋จ๊ณ ํฌ๋ช ๋ ๋ง์คํฌ
- ํด๋ฐฑ: U2-Net ์๋ ์ ํ ์ง์
- ์๋ ๋ฆฌ์ฌ์ด์ง (1024x1024)
- ์๊ฐ ์๋ ๋ณด์
- ์๋ฅ ์ฃผ๋ฆ ์ ๋ฆฌ
- ํ์ง ํฅ์ ํํฐ๋ง
- ํ์ดํธ ๋ฐฐ๊ฒฝ
- ํ๋กํ์ ๋ ๊ทธ๋ฆผ์ ํจ๊ณผ
- ๊น๋ํ ์คํ๋์ค ๋๋
- ๋ฒ ์ด์ง/ํ์คํ ๋ฐฐ๊ฒฝ
- ๋นํฐ์ง ํํฐ
- ์์ฐ์ค๋ฌ์ด ์กฐ๋ช ํจ๊ณผ
- ๋์ฌ/๊ฑฐ๋ฆฌ ๋ฐฐ๊ฒฝ
- ์๋๊ฐ ์๋ ์๊ฐ
- ์ญ๋์ ์ธ ๋ถ์๊ธฐ
- ๋ฐฐ์น ์ฒ๋ฆฌ: ์ฌ๋ฌ ์ด๋ฏธ์ง ๋์ ์ฒ๋ฆฌ
- Redis ์บ์ฑ: ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒฐ๊ณผ ์บ์
- GPU ๊ฐ์: T4/A10 GPU ํ์ฉ
- INT8 ์์ํ: ์ถ๋ก ์๋ ํฅ์
โโโโโโโโโโโโโโโ
โ ์ฌ์ฉ์ โ
โ (ํด๋ํฐ์ดฌ์) โ
โโโโโโโโฌโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ Web/Mobile โ
โ Application โ
โโโโโโโโฌโโโโโโโโโโโ
โ HTTPS
โผ
โโโโโโโโโโโโโโโโโโโ
โ API Server โ
โ (FastAPI) โ
โโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ Task Queue โ
โ (Celery) โ
โโโโโโโโฌโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI Processing Pipeline โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. Image Preprocessing โ โ
โ โ - Resize (1024x1024) โ โ
โ โ - Quality Check โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ โ
โ โ 2. Background Removal โ โ
โ โ - RMBG-2.0 Model โ โ
โ โ - 256-level Transparencyโ โ
โ โ - U2-Net Fallback โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ โ
โ โ 3. Style Processing โ โ
โ โ - Minimal Style โ โ
โ โ - Mood Style โ โ
โ โ - Street Style โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ โ
โ โ 4. Background Generation โ โ
โ โ - Stable Diffusion XL โ โ
โ โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโ โ
โ โ 5. Post-processing โ โ
โ โ - Instagram Format โ โ
โ โ - Compression โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ Cloud Storage โ
โ & Database โ
โโโโโโโโโโโโโโโโโโโ
- Python 3.11 ์ด์
- CUDA ์ง์ GPU (๊ถ์ฅ)
- Docker & Docker Compose
- Git
git clone https://github.com/leejaeyoung-cpu/Codeit_final.git
cd Codeit_finalpython -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activatepip install -r requirements.txtcp .env.example .env
# .env ํ์ผ์ ์ด์ด ํ์ํ ์ค์ ์
๋ ฅdocker-compose up -d# ๊ฐ๋ฐ ๋ชจ๋
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# ํ๋ก๋์
๋ชจ๋
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorkercelery -A app.celery_worker worker --loglevel=infoimport requests
url = "http://localhost:8000/api/v1/remove-background"
files = {"file": open("product.jpg", "rb")}
response = requests.post(url, files=files)
result = response.json()
print(f"์ฒ๋ฆฌ ์๋ฃ: {result['image_url']}")url = "http://localhost:8000/api/v1/process-image"
files = {"file": open("product.jpg", "rb")}
data = {"style": "minimal"} # minimal, mood, street
response = requests.post(url, files=files, data=data)
result = response.json()
print(f"๋ฏธ๋๋ฉ ์คํ์ผ ์ด๋ฏธ์ง: {result['processed_url']}")url = "http://localhost:8000/api/v1/batch-process"
files = [
("files", open("product1.jpg", "rb")),
("files", open("product2.jpg", "rb")),
("files", open("product3.jpg", "rb")),
]
response = requests.post(url, files=files)
results = response.json()
for idx, result in enumerate(results):
print(f"์ด๋ฏธ์ง {idx+1}: {result['image_url']}")- โ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ์๊ฐ: 5์ด ์ดํ
- โ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ์ ํ๋: 90% ์ด์ (RMBG-2.0)
- โ ๋ณต์กํ ๋ฐฐ๊ฒฝ ์ ํ๋: 87-92% (๊ธฐ์กด U2-Net ๋๋น 3๋ฐฐ ํฅ์)
- โ ๋์ ์ฒ๋ฆฌ ์์ฒญ: 100๊ฐ ์ด์
- โ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ: ์์ฒญ๋น 2-4GB (GPU ์ฌ์ฉ ์)
| ์์ | RMBG-2.0 ํ๊ท | U2-Net ํ๊ท | ์ ํ๋ (RMBG-2.0) |
|---|---|---|---|
| ๋ฐฐ๊ฒฝ ์ ๊ฑฐ | 3.5์ด | 3.2์ด | 90.14% |
| ๋ณต์กํ ๋ฐฐ๊ฒฝ | 4.2์ด | 3.5์ด | 87-92% |
| ํฌํ ๋ฆฌ์ผ ์ด๋ฏธ์ง | 3.8์ด | 3.0์ด | 92% |
| ์ ์ฒด ํ์ดํ๋ผ์ธ | ~6์ด | ~5.5์ด | 90%+ |
Codeit_final/
โโโ app/
โ โโโ __init__.py
โ โโโ main.py # FastAPI ๋ฉ์ธ ์ฑ
โ โโโ config.py # ์ค์ ํ์ผ
โ โโโ celery_worker.py # Celery ์์ปค
โ โ
โ โโโ api/ # API ๋ผ์ฐํฐ
โ โ โโโ __init__.py
โ โ โโโ v1/
โ โ โ โโโ __init__.py
โ โ โ โโโ image.py # ์ด๋ฏธ์ง ์ฒ๋ฆฌ API
โ โ โ โโโ health.py # ํฌ์ค์ฒดํฌ API
โ โ
โ โโโ core/ # ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง
โ โ โโโ __init__.py
โ โ โโโ background_removal.py # ๋ฐฐ๊ฒฝ ์ ๊ฑฐ
โ โ โโโ preprocessing.py # ์ ์ฒ๋ฆฌ
โ โ โโโ style_processor.py # ์คํ์ผ๋ณ ์ฒ๋ฆฌ
โ โ โโโ postprocessing.py # ํ์ฒ๋ฆฌ
โ โ
โ โโโ services/ # ์๋น์ค ๋ ์ด์ด
โ โ โโโ __init__.py
โ โ โโโ image_service.py
โ โ โโโ cache_service.py
โ โ
โ โโโ models/ # ๋ฐ์ดํฐ ๋ชจ๋ธ
โ โ โโโ __init__.py
โ โ โโโ schemas.py
โ โ
โ โโโ utils/ # ์ ํธ๋ฆฌํฐ
โ โโโ __init__.py
โ โโโ image_utils.py
โ โโโ storage.py
โ
โโโ tests/ # ํ
์คํธ ์ฝ๋
โ โโโ __init__.py
โ โโโ test_background_removal.py
โ โโโ test_preprocessing.py
โ โโโ test_api.py
โ
โโโ docs/ # ๋ฌธ์
โ โโโ api_specification.md
โ โโโ development_guide.md
โ โโโ deployment.md
โ
โโโ scripts/ # ์ ํธ๋ฆฌํฐ ์คํฌ๋ฆฝํธ
โ โโโ setup.sh
โ โโโ benchmark.py
โ
โโโ docker/ # Docker ์ค์
โ โโโ Dockerfile
โ โโโ docker-compose.yml
โ
โโโ .env.example # ํ๊ฒฝ ๋ณ์ ์์
โโโ .gitignore
โโโ requirements.txt # Python ์์กด์ฑ
โโโ README.md
โโโ LICENSE
- ํ๋ก์ ํธ ์ ์ ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
-
RMBG-2.0rembg ๋ชจ๋ธ ์ฐ๋ (๋ฐฐ๊ฒฝ ์ ๊ฑฐ) - ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- FastAPI ๊ธฐ๋ณธ API ๊ตฌํ
- 4:5 ๋น์จ ์ธ์คํ๊ทธ๋จ ํฌ๋งท ์ง์
- ์น UI ๊ตฌํ (๋๋๊ทธ ์ค ๋๋กญ)
- API ๊ฒ์ฆ ๋ฐ ํ ์คํธ ์๋ฃ
- RMBG-2.0 ํตํฉ ๋ฐ ์ฑ๋ฅ ๊ฐ์ (2026-01-08)
- Cloud Storage ์ฐ๋ (์์ )
- ์๊ฐ ๋ณด์ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ (์๋ ํ์ดํธ๋ฐธ๋ฐ์ค, CLAHE)
- ์๋ฅ ์ฃผ๋ฆ ์ ๋ฆฌ ๋ก์ง (Bilateral/Guided Filter)
- 3๊ฐ์ง ์คํ์ผ๋ณ ์ ์ฒ๋ฆฌ ๋ถ๊ธฐ (Minimal, Mood, Street)
- Next.js + TypeScript ํ๋ก ํธ์๋ ํตํฉ
- ์ฒ๋ฆฌ ์๋ ์ต์ ํ (๋ชฉํ: 5์ด ์ด๋ด ๋ฌ์ฑ)
- ์๋ ํ์ดํธ ๋ฐธ๋ฐ์ค: Gray World ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํํ ์์จ๋ ๋ณด์
- CLAHE: ์ ์ํ ํ์คํ ๊ทธ๋จ ํํํ๋ก ๋ํ ์ผ๊ณผ ๋๋น ํฅ์
- ์ฑ๋/์ ๋ช ๋: ์คํ์ผ๋ณ ์ต์ ํ๋ ํ๋ผ๋ฏธํฐ ์ ์ฉ
- ์ค๋งํธ ์ค๋ฌด๋ฉ: ์ท๊ฐ์ ์ง๊ฐ์ ์ ์งํ๋ฉด์ ๋ถํ์ํ ์ฃผ๋ฆ๋ง ์ ๊ฑฐ
- ์๊ณ ๋ฆฌ์ฆ: Bilateral Filter ๋ฐ Guided Filter ์กฐํฉ ์ฌ์ฉ
- ๊ฐ๋ ์กฐ์ : Light, Medium, Strong ์ต์ ์ ๊ณต
| ์คํ์ผ | ํน์ง | ์ฉ๋ |
|---|---|---|
| Minimal | ํ์ดํธ ๋ฐฐ๊ฒฝ, ๊ณ ๋๋น, ํ๋กํ์ ๋ ์๋์ฐ | ๊น๋ํ ์ ํ ์์ธ ํ์ด์ง |
| Mood | ๋ฐ๋ปํ ์๊ฐ, ๋นํฐ์ง ํํฐ, ํ์คํ ๋ฐฐ๊ฒฝ | ๊ฐ์ฑ์ ์ธ ์ธ์คํ๊ทธ๋จ ํผ๋ |
| Street | ๋์ ์ฑ๋, ๊ฐํ ๋๋น, ์ฟจํค, ๋น๋น๋ | ํธ๋ ๋ํ ์คํธ๋ฆฟ ํจ์ ๊ด๊ณ |
๋ฐฑ์๋ API์ ์๋ฒฝํ๊ฒ ์ฐ๋๋๋ Next.js ํ๋ก ํธ์๋ ์ฝ๋๊ฐ ์ค๋น๋์์ต๋๋ค.
- TypeScript: ์์ ํ ํ์
์์ ์ฑ ๋ณด์ฅ (
types/api.ts) - Custom Hooks:
useImageProcessingํ ์ผ๋ก ์ํ ๊ด๋ฆฌ ๋จ์ํ - UI ์ปดํฌ๋ํธ:
ImageUploader: ๋๋๊ทธ ์ค ๋๋กญ ์ง์StyleSelector: 3๊ฐ์ง ์คํ์ผ ์ง๊ด์ ์ ํResultDisplay: ์๋ณธ/๊ฒฐ๊ณผ ๋น๊ต ๋ฐ ๋ค์ด๋ก๋
์์ธํ ํตํฉ ๋ฐฉ๋ฒ์ nextjs_frontend_guide.md ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ๋ฐฐ์น ์ฒ๋ฆฌ ๊ธฐ๋ฅ ๊ตฌํ
- Redis ์บ์ฑ ์์คํ ๊ตฌํ
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ
- ์๋ฌ ํธ๋ค๋ง ๊ฐํ
- ํ ๋ชจ๋๊ณผ ํตํฉ ํ ์คํธ
- ์ฑ๋ฅ ๋ฒค์น๋งํฌ ๋ฐ ์ต์ ํ
- GPU ์ต์ ํ (T4/A10)
- ๋ฌธ์ํ ์๋ฃ
- ๋ฒ ํ ๋ฐ์นญ ์ค๋น
pytest tests/ -vpytest --cov=app tests/python scripts/benchmark.py์ฆ์: Access to model briaai/RMBG-2.0 is restricted ๋๋ ๋ค์ด๋ก๋ ์คํจ
ํด๊ฒฐ:
- ์ธํฐ๋ท ์ฐ๊ฒฐ ํ์ธ
- Hugging Face ์๋ฒ ์ํ ํ์ธ ๋ฐ ์ฌ์๋
- ์์๋ก U2-Net ์ฌ์ฉ:
.env์์BG_REMOVAL_MODEL=u2net์ค์ - ์๋ ํด๋ฐฑ ํ์ฑํ:
BG_REMOVAL_FALLBACK=true
ํด๊ฒฐ:
- GPU ์ฌ์ฉ ํ์ธ:
BG_REMOVAL_DEVICE=cuda - ์ด๋ฏธ์ง ํฌ๊ธฐ ์ ํ ์ ์ฉ (์ต๋ 2048x2048)
- U2-Net์ผ๋ก ์ ํ (๋ ๋น ๋ฆ):
BG_REMOVAL_MODEL=u2net - GPU ๋ฐฐ์น ์ฌ์ด์ฆ ์กฐ์
RMBG-2.0 ์ฌ์ฉ ์:
- GPU ๋ฉ๋ชจ๋ฆฌ ํ์ธ (์ต์ 2-4GB ํ์)
- CPU ๋ชจ๋๋ก ์ ํ:
BG_REMOVAL_DEVICE=cpu - U2-Net์ผ๋ก ์ ํ (๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฎ์)
์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ :
- ์ด๋ฏธ์ง ์คํธ๋ฆฌ๋ฐ ์ฒ๋ฆฌ
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฃผ๊ธฐ ์กฐ์
- Worker ํ๋ก์ธ์ค ์ ๊ฐ์
ํด๊ฒฐ:
- RMBG-2.0 ์ฌ์ฉ ํ์ธ: API ์๋ต ํค๋์
X-Model-Usedํ์ธ - GPU ๋ชจ๋ ์ฌ์ฉ ํ์ธ (ํ์ง ํฅ์)
- ์ ๋ ฅ ์ด๋ฏธ์ง ํ์ง ํ์ธ (์ต์ 512x512 ๊ถ์ฅ)
- ๋ค๋ฅธ ์คํ์ผ ์๋ (minimal, mood, street)
ํด๊ฒฐ:
.envํ์ผ ์ ๋ฐ์ดํธ ํ ์๋ฒ ์ฌ์์- ์ค์ ํ์ธ:
http://localhost:8000/api/v1/health - ๋ก๊ทธ ํ์ธํ์ฌ ์ด๋ค ๋ชจ๋ธ์ด ๋ก๋๋์๋์ง ํ์ธ
- RMBG-2.0 Model (Hugging Face)
- RMBG-2.0 Migration Guide - Setup and troubleshooting
- rembg GitHub
- FastAPI ๊ณต์ ๋ฌธ์
- Celery ๊ณต์ ๋ฌธ์
- DeepFashion Dataset
- BiRefNet: Bilateral Reference Network - RMBG-2.0 architecture
- Uยฒ-Net: Going Deeper with Nested U-Structure
- Deep Image Matting
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
์ด์ฌ์ - ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ชจ๋ ๊ฐ๋ฐ์
- GitHub: @leejaeyoung-cpu
- ํ๋ก์ ํธ ๋งํฌ: https://github.com/leejaeyoung-cpu/Codeit_final
- ์๋ณธ ํ๋ก์ ํธ: AdGen_AI
- ํ์๋ค: ํจ๊ป ๊ฐ๋ฐํ๋ ํ์คํ ๊ฐ๋ฐ์, ์ด๋ฏธ์ง ์์ฑ ๋ชจ๋ธ ๊ฐ๋ฐ์
- BRIA AI: RMBG-2.0 ์คํ์์ค ๋ชจ๋ธ ์ ๊ณต
- rembg ํ: ํ๋ฅญํ U2-Net ๊ธฐ๋ฐ ๋ฐฐ๊ฒฝ ์ ๊ฑฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- DeepFashion: ํจ์ ๋ฐ์ดํฐ์ ์ ๊ณต
โญ ์ด ํ๋ก์ ํธ๊ฐ ๋์์ด ๋์๋ค๋ฉด Star๋ฅผ ๋๋ฌ์ฃผ์ธ์! โญ
Made with โค๏ธ by Image Processing Team