File size: 1,644 Bytes
42e5456 |
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 |
from fastapi import FastAPI, File, UploadFile, HTTPException
from fastapi.responses import JSONResponse
from PIL import Image
import numpy as np
from transformers import SamModel, SamProcessor
import io
import base64
app = FastAPI(title="SAM-ViT-Base API")
# SAM modelini ve işlemciyi yükle
model = SamModel.from_pretrained("facebook/sam-vit-base")
processor = SamProcessor.from_pretrained("facebook/sam-vit-base")
@app.post("/segment/")
async def segment_image(file: UploadFile = File(...)):
try:
# Görüntüyü oku
image_data = await file.read()
image = Image.open(io.BytesIO(image_data)).convert("RGB")
# Görüntüyü işlemciye hazırla
inputs = processor(image, return_tensors="pt")
# Model ile segmentasyon yap
outputs = model(**inputs)
# Maskeyi al
masks = outputs.pred_masks.detach().cpu().numpy()
mask = masks[0][0] # İlk maskeyi al (örnek olarak)
# Maskeyi binary hale getir
mask = (mask > 0).astype(np.uint8) * 255
# Maskeyi görüntü olarak kaydet
mask_image = Image.fromarray(mask)
buffered = io.BytesIO()
mask_image.save(buffered, format="PNG")
mask_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
return JSONResponse(content={"mask": f"data:image/png;base64,{mask_base64}"})
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@app.get("/")
async def root():
return {"message": "SAM-ViT-Base API çalışıyor. /segment endpoint'ine görüntü yükleyin."} |