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."}