File size: 964 Bytes
6a91f98
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# app.py
import numpy as np
from medsam import MedSAM
import SimpleITK as sitk
from flask import Flask, request, jsonify

app = Flask(__name__)
model = MedSAM.load_from_checkpoint("/app/medsam_vit_b.pth")

@app.route('/segment', methods=['POST'])
def segment():
    # 接收前端数据
    data = request.json
    image = np.array(data['image'])
    prompt = data['prompt']  # 格式: [{'type':'point','data':[x,y]}, ...]
    
    # 预处理图像 (HxW -> HxWx3)
    img_3c = np.repeat(image[:,:,None], 3, axis=-1)
    
    # 转换提示格式
    medsam_prompt = []
    for p in prompt:
        if p['type'] == 'point':
            medsam_prompt.append({'point': p['data'], 'label': 1})
        elif p['type'] == 'box':
            medsam_prompt.append({'box': p['data']})
    
    # 模型推理
    mask = model.predict(img_3c, medsam_prompt)
    
    return jsonify({"mask": mask.tolist()})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=7860)