Skip to content

leejaeyoung-cpu/Codeit_final

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

9 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

AdGen_AI - Image Processing Module

Python FastAPI License Status

์†Œ๊ทœ๋ชจ ํŒจ์…˜ ์‡ผํ•‘๋ชฐ์„ ์œ„ํ•œ ์ธ์Šคํƒ€๊ทธ๋žจ ๊ด‘๊ณ  ์ž๋™ ์ƒ์„ฑ AI ์„œ๋น„์Šค

ํ”„๋กœ์ ํŠธ ๊ฐœ์š” โ€ข ๊ธฐ์ˆ  ์Šคํƒ โ€ข ์ฃผ์š” ๊ธฐ๋Šฅ โ€ข ์„ค์น˜ ๋ฐฉ๋ฒ• โ€ข ์‚ฌ์šฉ๋ฒ•


๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

AdGen_AI๋Š” ์†Œ๊ทœ๋ชจ ํŒจ์…˜ ์‡ผํ•‘๋ชฐ ์‚ฌ์žฅ๋‹˜๋“ค์ด ํœด๋Œ€ํฐ์œผ๋กœ ์ƒํ’ˆ์„ ์ดฌ์˜ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๋ช…๋ น์œผ๋กœ 1๋ถ„ ๋‚ด์— ์ธ์Šคํƒ€๊ทธ๋žจ ๊ด‘๊ณ ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” AI ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

๐ŸŽฏ ๋‚ด ์—ญํ• : ์ด๋ฏธ์ง€ ์ถ”์ถœ ๋ชจ๋ธ ๊ฐœ๋ฐœ์ž

์ด ์ €์žฅ์†Œ๋Š” AdGen_AI ํ”„๋กœ์ ํŠธ์—์„œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ(Background Removal & Image Preprocessing) ๋ชจ๋“ˆ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘ฅ ํŒ€ ๊ตฌ์„ฑ

  • ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž: ํ”„๋ก ํŠธ์—”๋“œ + ๋ฐฑ์—”๋“œ + ํ…์ŠคํŠธ AI
  • ์ด๋ฏธ์ง€ ์ถ”์ถœ ๋ชจ๋ธ ๊ฐœ๋ฐœ์ž โ† ๋‚˜์˜ ๋‹ด๋‹น
  • ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ชจ๋ธ ๊ฐœ๋ฐœ์ž: ๋ฐฐ๊ฒฝ ์ƒ์„ฑ + ์Šคํƒ€์ผ๋ง

๐Ÿ“… ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

  • ์‹œ์ž‘์ผ: 2025-12-30
  • ์ข…๋ฃŒ์ผ: 2026-01-28
  • ์ด ๊ธฐ๊ฐ„: 29์ผ

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Core Technologies

  • Python 3.11+: ๋ฉ”์ธ ๊ฐœ๋ฐœ ์–ธ์–ด
  • RMBG-2.0: ์ตœ์‹  AI ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ๋ชจ๋ธ (BiRefNet ๊ธฐ๋ฐ˜)
  • U2-Net: ํด๋ฐฑ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ๋ชจ๋ธ (rembg)
  • FastAPI: REST API ์„œ๋ฒ„
  • Celery + RabbitMQ: ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ

Image Processing Libraries

  • OpenCV: ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ ๋ฐ ์กฐ์ž‘
  • Pillow (PIL): ์ด๋ฏธ์ง€ ํฌ๋งท ๋ณ€ํ™˜
  • NumPy: ๋ฐฐ์—ด ์—ฐ์‚ฐ ๋ฐ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ

Infrastructure

  • Docker: ์ปจํ…Œ์ด๋„ˆํ™”
  • Google Cloud Storage: ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ
  • Redis: ์บ์‹ฑ ์‹œ์Šคํ…œ
  • PostgreSQL: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŽจ 1. AI ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ (Background Removal)

  • RMBG-2.0 ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ์ž๋™ ๋ˆ„๋ผ ์ž‘์—… (BiRefNet ์•„ํ‚คํ…์ฒ˜)
  • ์ฒ˜๋ฆฌ ์‹œ๊ฐ„: 3-5์ดˆ
  • ์ •ํ™•๋„: 90%+ (๋ณต์žกํ•œ ๋ฐฐ๊ฒฝ์—์„œ 87-92%)
  • ์—ฃ์ง€ ํ’ˆ์งˆ: 256๋‹จ๊ณ„ ํˆฌ๋ช…๋„ ๋งˆ์Šคํฌ
  • ํด๋ฐฑ: U2-Net ์ž๋™ ์ „ํ™˜ ์ง€์›

๐Ÿ–ผ๏ธ 2. ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ (Preprocessing)

  • ์ž๋™ ๋ฆฌ์‚ฌ์ด์ง• (1024x1024)
  • ์ƒ‰๊ฐ ์ž๋™ ๋ณด์ •
  • ์˜๋ฅ˜ ์ฃผ๋ฆ„ ์ •๋ฆฌ
  • ํ’ˆ์งˆ ํ–ฅ์ƒ ํ•„ํ„ฐ๋ง

๐ŸŽญ 3. ์Šคํƒ€์ผ๋ณ„ ์ด๋ฏธ์ง€ ์ƒ์„ฑ (3๊ฐ€์ง€ ์Šคํƒ€์ผ)

๋ฏธ๋‹ˆ๋ฉ€ ์Šคํƒ€์ผ

  • ํ™”์ดํŠธ ๋ฐฐ๊ฒฝ
  • ํ”„๋กœํŽ˜์…”๋„ ๊ทธ๋ฆผ์ž ํšจ๊ณผ
  • ๊น”๋”ํ•œ ์ŠคํŠœ๋””์˜ค ๋А๋‚Œ

๊ฐ์„ฑ ์Šคํƒ€์ผ

  • ๋ฒ ์ด์ง€/ํŒŒ์Šคํ…” ๋ฐฐ๊ฒฝ
  • ๋นˆํ‹ฐ์ง€ ํ•„ํ„ฐ
  • ์ž์—ฐ์Šค๋Ÿฌ์šด ์กฐ๋ช… ํšจ๊ณผ

์ŠคํŠธ๋ฆฟ ์Šคํƒ€์ผ

  • ๋„์‹ฌ/๊ฑฐ๋ฆฌ ๋ฐฐ๊ฒฝ
  • ์ƒ๋™๊ฐ ์žˆ๋Š” ์ƒ‰๊ฐ
  • ์—ญ๋™์ ์ธ ๋ถ„์œ„๊ธฐ

โšก 4. ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ: ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€ ๋™์‹œ ์ฒ˜๋ฆฌ
  • 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

1. ์ €์žฅ์†Œ ํด๋ก 

git clone https://github.com/leejaeyoung-cpu/Codeit_final.git
cd Codeit_final

2. ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ

python -m venv venv

# Windows
venv\Scripts\activate

# Linux/Mac
source venv/bin/activate

3. ์˜์กด์„ฑ ์„ค์น˜

pip install -r requirements.txt

4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

cp .env.example .env
# .env ํŒŒ์ผ์„ ์—ด์–ด ํ•„์š”ํ•œ ์„ค์ • ์ž…๋ ฅ

5. Docker๋กœ ์‹คํ–‰ (๊ถŒ์žฅ)

docker-compose up -d

๐Ÿš€ ์‚ฌ์šฉ๋ฒ•

API ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐœ๋ฐœ ๋ชจ๋“œ
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ
gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker

Celery Worker ์‹คํ–‰

celery -A app.celery_worker worker --loglevel=info

์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ API ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ

import 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']}")

2. ์Šคํƒ€์ผ๋ณ„ ์ฒ˜๋ฆฌ

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']}")

3. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ

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

๐Ÿ“… ๊ฐœ๋ฐœ ์ผ์ •

โœ… Week 1 (2025-12-30 ~ 2026-01-05)

  • ํ”„๋กœ์ ํŠธ ์…‹์—… ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•
  • RMBG-2.0 rembg ๋ชจ๋ธ ์—ฐ๋™ (๋ฐฐ๊ฒฝ ์ œ๊ฑฐ)
  • ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
  • FastAPI ๊ธฐ๋ณธ API ๊ตฌํ˜„
  • 4:5 ๋น„์œจ ์ธ์Šคํƒ€๊ทธ๋žจ ํฌ๋งท ์ง€์›
  • ์›น UI ๊ตฌํ˜„ (๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ)
  • API ๊ฒ€์ฆ ๋ฐ ํ…Œ์ŠคํŠธ ์™„๋ฃŒ
  • RMBG-2.0 ํ†ตํ•ฉ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„  (2026-01-08)
  • Cloud Storage ์—ฐ๋™ (์˜ˆ์ •)

โœ… Week 2 (2026-01-06 ~ 2026-01-12) - ์กฐ๊ธฐ ๋‹ฌ์„ฑ!

  • ์ƒ‰๊ฐ ๋ณด์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ (์ž๋™ ํ™”์ดํŠธ๋ฐธ๋Ÿฐ์Šค, CLAHE)
  • ์˜๋ฅ˜ ์ฃผ๋ฆ„ ์ •๋ฆฌ ๋กœ์ง (Bilateral/Guided Filter)
  • 3๊ฐ€์ง€ ์Šคํƒ€์ผ๋ณ„ ์ „์ฒ˜๋ฆฌ ๋ถ„๊ธฐ (Minimal, Mood, Street)
  • Next.js + TypeScript ํ”„๋ก ํŠธ์—”๋“œ ํ†ตํ•ฉ
  • ์ฒ˜๋ฆฌ ์†๋„ ์ตœ์ ํ™” (๋ชฉํ‘œ: 5์ดˆ ์ด๋‚ด ๋‹ฌ์„ฑ)

๐ŸŽจ ๊ณ ๊ธ‰ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ (Week 2)

1. ์ƒ‰๊ฐ ๋ณด์ • (Color Correction)

  • ์ž๋™ ํ™”์ดํŠธ ๋ฐธ๋Ÿฐ์Šค: Gray World ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •ํ™•ํ•œ ์ƒ‰์˜จ๋„ ๋ณด์ •
  • CLAHE: ์ ์‘ํ˜• ํžˆ์Šคํ† ๊ทธ๋žจ ํ‰ํ™œํ™”๋กœ ๋””ํ…Œ์ผ๊ณผ ๋Œ€๋น„ ํ–ฅ์ƒ
  • ์ฑ„๋„/์„ ๋ช…๋„: ์Šคํƒ€์ผ๋ณ„ ์ตœ์ ํ™”๋œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ ์šฉ

2. ์˜๋ฅ˜ ์ฃผ๋ฆ„ ์ •๋ฆฌ (Wrinkle Removal)

  • ์Šค๋งˆํŠธ ์Šค๋ฌด๋”ฉ: ์˜ท๊ฐ์˜ ์งˆ๊ฐ์€ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ์ฃผ๋ฆ„๋งŒ ์ œ๊ฑฐ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜: Bilateral Filter ๋ฐ Guided Filter ์กฐํ•ฉ ์‚ฌ์šฉ
  • ๊ฐ•๋„ ์กฐ์ ˆ: Light, Medium, Strong ์˜ต์…˜ ์ œ๊ณต

3. ์Šคํƒ€์ผ ํ”„๋กœ์„ธ์‹ฑ (Style Processing)

์Šคํƒ€์ผ ํŠน์ง• ์šฉ๋„
Minimal ํ™”์ดํŠธ ๋ฐฐ๊ฒฝ, ๊ณ ๋Œ€๋น„, ํ”„๋กœํŽ˜์…”๋„ ์„€๋„์šฐ ๊น”๋”ํ•œ ์ œํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€
Mood ๋”ฐ๋œปํ•œ ์ƒ‰๊ฐ, ๋นˆํ‹ฐ์ง€ ํ•„ํ„ฐ, ํŒŒ์Šคํ…” ๋ฐฐ๊ฒฝ ๊ฐ์„ฑ์ ์ธ ์ธ์Šคํƒ€๊ทธ๋žจ ํ”ผ๋“œ
Street ๋†’์€ ์ฑ„๋„, ๊ฐ•ํ•œ ๋Œ€๋น„, ์ฟจํ†ค, ๋น„๋น„๋“œ ํŠธ๋ Œ๋””ํ•œ ์ŠคํŠธ๋ฆฟ ํŒจ์…˜ ๊ด‘๊ณ 

๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ ํ†ตํ•ฉ (Next.js + TypeScript)

๋ฐฑ์—”๋“œ API์™€ ์™„๋ฒฝํ•˜๊ฒŒ ์—ฐ๋™๋˜๋Š” Next.js ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • TypeScript: ์™„์ „ํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ (types/api.ts)
  • Custom Hooks: useImageProcessing ํ›…์œผ๋กœ ์ƒํƒœ ๊ด€๋ฆฌ ๋‹จ์ˆœํ™”
  • UI ์ปดํฌ๋„ŒํŠธ:
    • ImageUploader: ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์ง€์›
    • StyleSelector: 3๊ฐ€์ง€ ์Šคํƒ€์ผ ์ง๊ด€์  ์„ ํƒ
    • ResultDisplay: ์›๋ณธ/๊ฒฐ๊ณผ ๋น„๊ต ๋ฐ ๋‹ค์šด๋กœ๋“œ

ํ†ตํ•ฉ ๊ฐ€์ด๋“œ

์ƒ์„ธํ•œ ํ†ตํ•ฉ ๋ฐฉ๋ฒ•์€ nextjs_frontend_guide.md ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

โณ Week 3 (2026-01-13 ~ 2026-01-19)

  • ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • Redis ์บ์‹ฑ ์‹œ์Šคํ…œ ๊ตฌํ˜„
  • ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”
  • ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ฐ•ํ™”

โณ Week 4 (2026-01-20 ~ 2026-01-28)

  • ํƒ€ ๋ชจ๋“ˆ๊ณผ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
  • ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๋ฐ ์ตœ์ ํ™”
  • GPU ์ตœ์ ํ™” (T4/A10)
  • ๋ฌธ์„œํ™” ์™„๋ฃŒ
  • ๋ฒ ํƒ€ ๋Ÿฐ์นญ ์ค€๋น„

๐Ÿงช ํ…Œ์ŠคํŠธ

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹คํ–‰

pytest tests/ -v

์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ

pytest --cov=app tests/

์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ

python scripts/benchmark.py

๐Ÿ”ง ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋ฌธ์ œ: RMBG-2.0 ๋ชจ๋ธ ๋กœ๋”ฉ ์‹คํŒจ

์ฆ์ƒ: Access to model briaai/RMBG-2.0 is restricted ๋˜๋Š” ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ

ํ•ด๊ฒฐ:

  • ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ํ™•์ธ
  • Hugging Face ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ ๋ฐ ์žฌ์‹œ๋„
  • ์ž„์‹œ๋กœ U2-Net ์‚ฌ์šฉ: .env์—์„œ BG_REMOVAL_MODEL=u2net ์„ค์ •
  • ์ž๋™ ํด๋ฐฑ ํ™œ์„ฑํ™”: BG_REMOVAL_FALLBACK=true

๋ฌธ์ œ: ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ 5์ดˆ ์ดˆ๊ณผ

ํ•ด๊ฒฐ:

  • GPU ์‚ฌ์šฉ ํ™•์ธ: BG_REMOVAL_DEVICE=cuda
  • ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ œํ•œ ์ ์šฉ (์ตœ๋Œ€ 2048x2048)
  • U2-Net์œผ๋กœ ์ „ํ™˜ (๋” ๋น ๋ฆ„): BG_REMOVAL_MODEL=u2net
  • GPU ๋ฐฐ์น˜ ์‚ฌ์ด์ฆˆ ์กฐ์ •

๋ฌธ์ œ: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ (OOM)

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
  • ๋กœ๊ทธ ํ™•์ธํ•˜์—ฌ ์–ด๋–ค ๋ชจ๋ธ์ด ๋กœ๋“œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

ํ•ต์‹ฌ ๋ฌธ์„œ

๊ด€๋ จ ๋…ผ๋ฌธ


๐Ÿค ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.


๐Ÿ“ž ์—ฐ๋ฝ์ฒ˜

์ด์žฌ์˜ - ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ชจ๋“ˆ ๊ฐœ๋ฐœ์ž


๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

  • ํŒ€์›๋“ค: ํ•จ๊ป˜ ๊ฐœ๋ฐœํ•˜๋Š” ํ’€์Šคํƒ ๊ฐœ๋ฐœ์ž, ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋ชจ๋ธ ๊ฐœ๋ฐœ์ž
  • BRIA AI: RMBG-2.0 ์˜คํ”ˆ์†Œ์Šค ๋ชจ๋ธ ์ œ๊ณต
  • rembg ํŒ€: ํ›Œ๋ฅญํ•œ U2-Net ๊ธฐ๋ฐ˜ ๋ฐฐ๊ฒฝ ์ œ๊ฑฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • DeepFashion: ํŒจ์…˜ ๋ฐ์ดํ„ฐ์…‹ ์ œ๊ณต

โญ ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด Star๋ฅผ ๋ˆŒ๋Ÿฌ์ฃผ์„ธ์š”! โญ

Made with โค๏ธ by Image Processing Team

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages