SAM 3视频分割API封装:FastAPI服务搭建+HTTP请求调用示例
1. SAM 3模型简介
SAM 3是由Facebook推出的一个统一基础模型,专门用于图像和视频中的可提示分割任务。这个强大的模型能够通过多种形式的提示(包括文本、点、框和掩码)来检测、分割和跟踪目标对象。
核心能力包括:
- 支持图像和视频两种输入格式
- 接受文本描述或视觉提示作为分割依据
- 输出精确的分割掩码和边界框
- 在视频中实现对象跟踪功能
2. 环境准备与FastAPI服务搭建
2.1 基础环境配置
首先确保你的系统满足以下要求:
- Python 3.8或更高版本
- CUDA 11.7(如需GPU加速)
- 至少16GB内存(处理高清视频建议32GB以上)
安装必要的Python包:
pip install fastapi uvicorn python-multipart pip install torch torchvision pip install opencv-python2.2 模型下载与加载
从Hugging Face获取SAM 3模型:
from transformers import AutoModelForImageSegmentation model = AutoModelForImageSegmentation.from_pretrained("facebook/sam3") model.eval()2.3 FastAPI服务实现
创建基础的API服务文件main.py:
from fastapi import FastAPI, File, UploadFile from fastapi.responses import JSONResponse import cv2 import numpy as np app = FastAPI() @app.post("/segment") async def segment_image( file: UploadFile = File(...), prompt: str = "object" ): # 读取上传的文件 contents = await file.read() nparr = np.frombuffer(contents, np.uint8) # 判断是图像还是视频 if file.content_type.startswith('image'): img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) # 调用SAM 3进行图像分割 result = process_image(img, prompt) elif file.content_type.startswith('video'): # 视频处理逻辑 result = process_video(nparr, prompt) else: return JSONResponse({"error": "Unsupported file type"}, status_code=400) return JSONResponse(result) def process_image(image, prompt): # 实现图像分割逻辑 # 返回分割结果 return {"status": "success", "result": "image_mask_data"} def process_video(video, prompt): # 实现视频分割逻辑 # 返回分割结果 return {"status": "success", "result": "video_mask_data"}3. 服务启动与测试
3.1 启动FastAPI服务
使用以下命令启动服务:
uvicorn main:app --reload --host 0.0.0.0 --port 8000服务启动后,可以通过http://localhost:8000/docs访问自动生成的API文档界面。
3.2 本地测试示例
使用Python的requests库测试API:
import requests url = "http://localhost:8000/segment" # 测试图像分割 with open("test.jpg", "rb") as f: files = {"file": ("test.jpg", f, "image/jpeg")} data = {"prompt": "dog"} response = requests.post(url, files=files, data=data) print(response.json()) # 测试视频分割 with open("test.mp4", "rb") as f: files = {"file": ("test.mp4", f, "video/mp4")} data = {"prompt": "car"} response = requests.post(url, files=files, data=data) print(response.json())4. 生产环境部署建议
4.1 性能优化
对于生产环境,建议进行以下优化:
- 使用GPU加速推理
- 实现请求队列和批处理
- 添加结果缓存机制
- 限制最大文件大小和处理时长
4.2 安全增强
重要的安全措施包括:
- 添加API密钥验证
- 实现速率限制
- 文件类型和大小验证
- 输入内容安全检查
4.3 容器化部署
使用Docker部署的示例Dockerfile:
FROM python:3.9-slim WORKDIR /app COPY . . RUN pip install --no-cache-dir -r requirements.txt EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]构建并运行容器:
docker build -t sam3-api . docker run -d -p 8000:8000 sam3-api5. 总结
本文详细介绍了如何将SAM 3视频分割模型封装为RESTful API服务,主要步骤包括:
- 搭建FastAPI基础服务框架
- 实现图像和视频处理端点
- 测试API功能
- 优化生产环境部署
通过这种封装方式,开发者可以轻松地将SAM 3的强大分割能力集成到各种应用中,如:
- 视频编辑软件
- 智能监控系统
- 医学影像分析
- 自动驾驶感知系统
未来可以进一步扩展的功能包括:
- 支持更多输入提示类型
- 优化视频处理的实时性
- 添加更多输出格式选项
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。