Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

24 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Gangajikimi FastAPI Server

๊ฐ•์•„์ง€ ๊ด€๋ จ AI ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ†ตํ•ฉ FastAPI ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๊ฐ•์•„์ง€ ํ’ˆ์ข… ๋ถ„๋ฅ˜, ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ, ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๐Ÿ• ๊ฐ•์•„์ง€ ํ’ˆ์ข… ๋ถ„๋ฅ˜: YOLO + EfficientNet์„ ์‚ฌ์šฉํ•œ 120๊ฐœ ํ’ˆ์ข… ๋ถ„๋ฅ˜
  • ๐Ÿ” ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ: CLIP + YOLO๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ฏธ์ง€/ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ
  • ๐Ÿ“Š ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ: ๋‘ ์ž„๋ฒ ๋”ฉ ๊ฐ„์˜ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ (์œ ์‹ค๊ฒฌ/๋ฐœ๊ฒฌ๊ฒฌ ๋งค์นญ์šฉ)
  • ๐ŸŒ ํ•œ๊ธ€ ์ง€์›: ํ•œ๊ตญ์–ด ๊ฒฌ์ข…๋ช… ๋งคํ•‘

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Gangajikimi-FastAPI-Server/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ main.py                     # FastAPI ์•ฑ ์ง„์ž…์ 
โ”‚   โ”œโ”€โ”€ domain/                     # ๋„๋ฉ”์ธ๋ณ„ ๊ธฐ๋Šฅ ๋ชจ๋“ˆ
โ”‚   โ”‚   โ”œโ”€โ”€ config.py              # ๊ณตํ†ต ์„ค์ • (LLM, YOLO, CLIP ๋“ฑ)
โ”‚   โ”‚   โ”œโ”€โ”€ dogbreed/              # ๊ฐ•์•„์ง€ ํ’ˆ์ข… ๋ถ„๋ฅ˜ ๋„๋ฉ”์ธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ router.py          # API ๋ผ์šฐํ„ฐ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ schema.py          # Pydantic ๋ชจ๋ธ๋“ค
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ service.py         # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ assets/            # AI ๋ชจ๋ธ ๊ฐ€์ค‘์น˜
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ models/            # AI ๋ชจ๋ธ ์ฝ”๋“œ๋“ค
โ”‚   โ”‚   โ”œโ”€โ”€ embed/                 # ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ ๋„๋ฉ”์ธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ router.py          # API ๋ผ์šฐํ„ฐ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ schema.py          # Pydantic ๋ชจ๋ธ๋“ค
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ pipeline_embed.py  # ๋ฉ”์ธ ์ž„๋ฒ ๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ llm_client.py      # LLM ํ…์ŠคํŠธ ์ •์ œ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ yolo_crop.py       # YOLO ์ด๋ฏธ์ง€ ํฌ๋กญ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ clipper.py         # CLIP ์ž„๋ฒ ๋”ฉ
โ”‚   โ”‚   โ””โ”€โ”€ similarity/            # ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ๋„๋ฉ”์ธ
โ”‚   โ”‚       โ”œโ”€โ”€ router.py          # API ๋ผ์šฐํ„ฐ
โ”‚   โ”‚       โ”œโ”€โ”€ schema.py          # Pydantic ๋ชจ๋ธ๋“ค
โ”‚   โ”‚       โ”œโ”€โ”€ pipeline_similarity.py # ๋ฉ”์ธ ์œ ์‚ฌ๋„ ํŒŒ์ดํ”„๋ผ์ธ
โ”‚   โ”‚       โ””โ”€โ”€ similarity.py      # ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ ํ•จ์ˆ˜๋“ค
โ”‚   โ””โ”€โ”€ response/                  # ์‘๋‹ต ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”œโ”€โ”€ requirements/                  # ์˜์กด์„ฑ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ requirements-base.txt      # ๊ธฐ๋ณธ ํŒจํ‚ค์ง€
โ”‚   โ”œโ”€โ”€ requirements-cpu.txt       # CPU ๋ฒ„์ „ PyTorch
โ”‚   โ””โ”€โ”€ requirements-gpu-cu128.txt # GPU ๋ฒ„์ „ PyTorch
โ”œโ”€โ”€ Dockerfile                     # Docker ์ปจํ…Œ์ด๋„ˆ ์„ค์ •
โ””โ”€โ”€ yolov8s.pt                     # YOLO ๋ชจ๋ธ ๊ฐ€์ค‘์น˜

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ์‹คํ–‰

1. ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.8 ์ด์ƒ
  • ์ตœ์†Œ 4GB RAM (๋ชจ๋ธ ๋กœ๋”ฉ์šฉ)
  • ๋””์Šคํฌ ๊ณต๊ฐ„ 2GB ์ด์ƒ

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

# ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
cd Gangajikimi-FastAPI-Server

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ
python -m venv fastapi_env

# ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
source fastapi_env/bin/activate  # Linux/Mac
# ๋˜๋Š”
fastapi_env\Scripts\activate     # Windows

3. ํŒจํ‚ค์ง€ ์„ค์น˜

# ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -r requirements/requirements-base.txt

# PyTorch ์„ค์น˜ (CPU ๋ฒ„์ „)
pip install -r requirements/requirements-cpu.txt

# ๋˜๋Š” GPU ๋ฒ„์ „ (CUDA 12.8)
pip install -r requirements/requirements-gpu-cu128.txt

4. ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ:

# config.py.example์„ ๋ณต์‚ฌํ•˜์—ฌ config.py ์ƒ์„ฑ
cp app/domain/config.py.example app/domain/config.py

# config.py๋ฅผ ์—ด์–ด์„œ GEMINI_API_KEY ์ˆ˜์ •
# GEMINI_API_KEY = "YOUR_ACTUAL_API_KEY_HERE"

Gemini API ํ‚ค ๋ฐœ๊ธ‰ ๋ฐฉ๋ฒ•:

  1. Google AI Studio์— ์ ‘์†
  2. "Create API Key" ํด๋ฆญํ•˜์—ฌ API ํ‚ค ์ƒ์„ฑ
  3. app/domain/config.py ํŒŒ์ผ์—์„œ GEMINI_API_KEY ๊ฐ’์„ ์ˆ˜์ •

์ฃผ์˜์‚ฌํ•ญ:

  • โš ๏ธ config.py๋Š” .gitignore์— ํฌํ•จ๋˜์–ด ์žˆ์–ด GitHub์— ์—…๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์šด์˜/๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” GitHub Actions๊ฐ€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ž๋™ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ๋„ ์„ค์ • ๊ฐ€๋Šฅ: export GEMINI_API_KEY="your_key"

5. ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐœ๋ฐœ ๋ชจ๋“œ ์‹คํ–‰
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload

# ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ ์‹คํ–‰
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 4

6. API ๋ฌธ์„œ ํ™•์ธ

์„œ๋ฒ„ ์‹คํ–‰ ํ›„ ๋‹ค์Œ URL์—์„œ API ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๐Ÿ“š API ์‚ฌ์šฉ ๊ฐ€์ด๋“œ

๐Ÿ• DogBreed ๋„๋ฉ”์ธ (/api/v1/dogbreed)

๊ฐ•์•„์ง€ ํ’ˆ์ข… ๋ถ„๋ฅ˜

์—”๋“œํฌ์ธํŠธ: POST /api/v1/dogbreed/

์š”์ฒญ:

  • Content-Type: multipart/form-data
  • image: ๊ฐ•์•„์ง€ ์ด๋ฏธ์ง€ ํŒŒ์ผ (JPG, PNG ๋“ฑ)

์š”์ฒญ ์˜ˆ์‹œ:

curl -X POST "http://localhost:8000/api/v1/dogbreed/" \
     -H "accept: application/json" \
     -F "image=@/path/to/dog_image.jpg"

์‘๋‹ต:

{
  "result": "๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„"
}

๐Ÿ” Embed ๋„๋ฉ”์ธ (/api/v1/embed)

1. ํ…์ŠคํŠธ ์ •์ œ

์—”๋“œํฌ์ธํŠธ: POST /api/v1/embed/normalize

์š”์ฒญ:

{
  "breed": "๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„",
  "colors": "๊ณจ๋“œ, ํฐ์ƒ‰",
  "features": "ํฐ ๊ท€, ๊ธด ํ„ธ"
}

์‘๋‹ต:

{
  "sentences": [
    "๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„ ๊ฒฌ์ข…์ž…๋‹ˆ๋‹ค.",
    "๊ณจ๋“œ์™€ ํฐ์ƒ‰ ์ƒ‰์ƒ์˜ ๊ฐ•์•„์ง€์ž…๋‹ˆ๋‹ค.",
    "ํฐ ๊ท€์™€ ๊ธด ํ„ธ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค."
  ]
}

2. ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ

์—”๋“œํฌ์ธํŠธ: POST /api/v1/embed/embed

์š”์ฒญ:

  • Content-Type: multipart/form-data
  • image: ๊ฐ•์•„์ง€ ์ด๋ฏธ์ง€ ํŒŒ์ผ
  • breed: ํ’ˆ์ข… (์„ ํƒ์‚ฌํ•ญ)
  • colors: ์ƒ‰์ƒ (์„ ํƒ์‚ฌํ•ญ)
  • features: ํŠน์ง• (์„ ํƒ์‚ฌํ•ญ)

์š”์ฒญ ์˜ˆ์‹œ:

curl -X POST "http://localhost:8000/api/v1/embed/embed" \
     -H "accept: application/json" \
     -F "image=@/path/to/dog_image.jpg" \
     -F "breed=๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„" \
     -F "colors=๊ณจ๋“œ, ํฐ์ƒ‰" \
     -F "features=ํฐ ๊ท€, ๊ธด ํ„ธ"

์‘๋‹ต:

{
  "sentences": [
    "๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„ ๊ฒฌ์ข…์ž…๋‹ˆ๋‹ค.",
    "๊ณจ๋“œ์™€ ํฐ์ƒ‰ ์ƒ‰์ƒ์˜ ๊ฐ•์•„์ง€์ž…๋‹ˆ๋‹ค.",
    "ํฐ ๊ท€์™€ ๊ธด ํ„ธ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค."
  ],
  "image": [0.1, -0.2, 0.3, ...],  // 512์ฐจ์› ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ
  "text": [0.2, -0.1, 0.4, ...]    // 512์ฐจ์› ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
}

๐Ÿ“Š Similarity ๋„๋ฉ”์ธ (/api/v1/similarity)

์œ ์‚ฌ๋„ ๊ณ„์‚ฐ

์—”๋“œํฌ์ธํŠธ: POST /api/v1/similarity/score

์š”์ฒญ:

{
  "emb_a_image": [0.1, -0.2, 0.3, ...],  // ๊ฒŒ์‹œ๋ฌผ A์˜ ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ
  "emb_a_text": [0.2, -0.1, 0.4, ...],   // ๊ฒŒ์‹œ๋ฌผ A์˜ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
  "emb_b_image": [0.3, -0.3, 0.2, ...],  // ๊ฒŒ์‹œ๋ฌผ B์˜ ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ
  "emb_b_text": [0.1, -0.2, 0.3, ...],   // ๊ฒŒ์‹œ๋ฌผ B์˜ ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ
  "weights": [0.2, 0.0, 0.0, 0.8]        // ๊ฐ€์ค‘์น˜ (์„ ํƒ์‚ฌํ•ญ)
}

์‘๋‹ต:

{
  "s_ii": 0.85,      // ์ด๋ฏธ์ง€-์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„
  "s_it": 0.72,      // ์ด๋ฏธ์ง€-ํ…์ŠคํŠธ ์œ ์‚ฌ๋„
  "s_ti": 0.68,      // ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์œ ์‚ฌ๋„
  "s_tt": 0.91,      // ํ…์ŠคํŠธ-ํ…์ŠคํŠธ ์œ ์‚ฌ๋„
  "score": 0.88,     // ์ตœ์ข… ๊ฐ€์ค‘ ํ‰๊ท  ์œ ์‚ฌ๋„
  "threshold": 0.35, // ์ž„๊ณ„๊ฐ’
  "pass": true       // ์ž„๊ณ„๊ฐ’ ๊ธฐ์ค€ ๋งค์นญ ์—ฌ๋ถ€
}

๐Ÿ”ง ์„ค์ •

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

# Gemini API ์„ค์ • (LLM ํ…์ŠคํŠธ ์ •์ œ์šฉ)
GEMINI_API_URL=https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent
GEMINI_API_KEY=your_gemini_api_key_here  # Gemini API ํ‚ค๋ฅผ ์—ฌ๊ธฐ์— ์ž…๋ ฅ
GEMINI_TEMPERATURE=0.1
LLM_TIMEOUT=20
LLM_MAX_RETRIES=3

# YOLO ์„ค์ •
YOLO_WEIGHTS=yolov8s.pt
YOLO_CONF=0.30
YOLO_MARGIN=0.18
YOLO_IMGSZ=512
DOG_CLASS_ID=16

# CLIP ์„ค์ •
CLIP_MODEL=ViT-B-32
CLIP_PRETRAINED=laion2b_s34b_b79k
TEXT_POOLING=avg

# ์œ ์‚ฌ๋„ ๊ฐ€์ค‘์น˜
W_II=0.20  # ์ด๋ฏธ์ง€-์ด๋ฏธ์ง€ ๊ฐ€์ค‘์น˜
W_IT=0.00  # ์ด๋ฏธ์ง€-ํ…์ŠคํŠธ ๊ฐ€์ค‘์น˜
W_TI=0.00  # ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ๊ฐ€์ค‘์น˜
W_TT=0.80  # ํ…์ŠคํŠธ-ํ…์ŠคํŠธ ๊ฐ€์ค‘์น˜

# ์œ ์‚ฌ๋„ ์ž„๊ณ„๊ฐ’
SIM_THRESHOLD=0.35

๐Ÿณ Docker ์‹คํ–‰

๊ธฐ๋ณธ ์‹คํ–‰

# Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t gangajikimi-api .

# Docker ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ (ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํฌํ•จ)
docker run -p 8000:8000 \
  -e GEMINI_API_KEY="your_gemini_api_key_here" \
  gangajikimi-api

# ๋˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰
docker run -d -p 8000:8000 \
  -e GEMINI_API_KEY="your_gemini_api_key_here" \
  --name gangajikimi-server \
  gangajikimi-api

๋ณผ๋ฅจ ๋งˆ์šดํŠธ (์„ ํƒ์‚ฌํ•ญ)

๋ชจ๋ธ ์บ์‹œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

docker run -d -p 8000:8000 \
  -e GEMINI_API_KEY="your_gemini_api_key_here" \
  -v $(pwd)/.cache:/app/.cache \
  --name gangajikimi-server \
  gangajikimi-api

์ฐธ๊ณ :

  • Hugging Face ๋ชจ๋ธ์€ /app/.cache/huggingface์— ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค
  • ๋น„๋ฃจํŠธ ์‚ฌ์šฉ์ž(appuser, UID 10001)๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ถŒํ•œ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค

โ˜๏ธ GCP VM ์ž๋™ ๋ฐฐํฌ

์ด ํ”„๋กœ์ ํŠธ๋Š” GitHub Actions๋ฅผ ํ†ตํ•ด GCP VM์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์„ค์ •

  1. Docker Hub ๊ณ„์ • ์ค€๋น„: Docker Hub ๊ณ„์ • ๋ฐ Access Token ์ƒ์„ฑ

  2. GCP VM ์ƒ์„ฑ: GCP Compute Engine์—์„œ VM ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

  3. SSH ํ‚ค ์„ค์ •: VM ์ ‘์†์šฉ SSH ํ‚ค ์ƒ์„ฑ ๋ฐ ๋“ฑ๋ก

  4. GitHub Secrets ์ถ”๊ฐ€: Repository Settings์—์„œ ํ•„์š”ํ•œ secrets ์ถ”๊ฐ€

    • DOCKERHUB_USERNAME: Docker Hub ์‚ฌ์šฉ์ž ์ด๋ฆ„
    • DOCKERHUB_TOKEN: Docker Hub Access Token
    • SSH_PRIVATE_KEY: VM ์ ‘์†์šฉ SSH Private ํ‚ค
    • VM_HOST: VM์˜ ์™ธ๋ถ€ IP ์ฃผ์†Œ
    • VM_USER: VM ์‚ฌ์šฉ์ž ์ด๋ฆ„ (์˜ˆ: ubuntu)
    • GEMINI_API_KEY: Gemini API ํ‚ค
    • CONFIG_PY: app/domain/config.py ํŒŒ์ผ์˜ ์ „์ฒด ๋‚ด์šฉ
  5. ์ž๋™ ๋ฐฐํฌ: develop ๋ธŒ๋žœ์น˜์— pushํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐฐํฌ

์ž์„ธํ•œ ์„ค์ • ๋ฐฉ๋ฒ•์€ GCP ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ์šฐ

  • config.py ํŒŒ์ผ ์ƒ์„ฑ (GitHub Secret์—์„œ)
  • Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
  • Docker Hub์— ํ‘ธ์‹œ
  • SSH ํ‚ค ์„ค์ •
  • VM์— SSH ์ ‘์†ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‹œ์ž‘

๐Ÿ“ ์‚ฌ์šฉ ์˜ˆ์‹œ

๊ฐ•์•„์ง€ ๋งค์นญ ์›Œํฌํ”Œ๋กœ์šฐ

  1. ์œ ์‹ค๊ฒฌ ๊ฒŒ์‹œ๋ฌผ ์ฒ˜๋ฆฌ:

    # ์œ ์‹ค๊ฒฌ ์ด๋ฏธ์ง€์™€ ์„ค๋ช…์œผ๋กœ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ
    curl -X POST "http://localhost:8000/api/v1/embed/embed" \
         -F "image=@lost_dog.jpg" \
         -F "breed=๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„" \
         -F "colors=๊ณจ๋“œ, ํฐ์ƒ‰" \
         -F "features=ํฐ ๊ท€, ๊ธด ํ„ธ"
  2. ๋ฐœ๊ฒฌ๊ฒฌ ๊ฒŒ์‹œ๋ฌผ ์ฒ˜๋ฆฌ:

    # ๋ฐœ๊ฒฌ๊ฒฌ ์ด๋ฏธ์ง€์™€ ์„ค๋ช…์œผ๋กœ ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ
    curl -X POST "http://localhost:8000/api/v1/embed/embed" \
         -F "image=@found_dog.jpg" \
         -F "breed=๊ณจ๋“  ๋ฆฌํŠธ๋ฆฌ๋ฒ„" \
         -F "colors=๊ณจ๋“œ, ํฐ์ƒ‰" \
         -F "features=ํฐ ๊ท€, ๊ธด ํ„ธ"
  3. ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ:

    # ๋‘ ๊ฒŒ์‹œ๋ฌผ ๊ฐ„์˜ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ
    curl -X POST "http://localhost:8000/api/v1/similarity/score" \
         -H "Content-Type: application/json" \
         -d '{
           "emb_a_image": [...],
           "emb_a_text": [...],
           "emb_b_image": [...],
           "emb_b_text": [...]
         }'

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

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

๐Ÿค ๊ธฐ์—ฌ

๋ฒ„๊ทธ ๋ฆฌํฌํŠธ๋‚˜ ๊ธฐ๋Šฅ ์ œ์•ˆ์€ ์ด์Šˆ๋ฅผ ํ†ตํ•ด ์•Œ๋ ค์ฃผ์„ธ์š”.


Gangajikimi AI - ๊ฐ•์•„์ง€์™€ ํ•จ๊ป˜ํ•˜๋Š” ๋” ๋‚˜์€ ์„ธ์ƒ์„ ๋งŒ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๐Ÿ•โœจ

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages