- 新增 analyze、analyze_result、analyze_status 和 health 路由 - 实现图像上传和任务提交功能 - 添加任务状态查询和结果获取接口 - 集成 segformer 和 yolo 模型进行图像检测 - 实现 SAM3 预处理功能用于图像预处理判断 - 添加模型选择配置支持 segformer 和 yolo - 实现任务队列管理和异步处理机制 - 添加 Dockerfile 用于容器化部署 - 配置环境变量和 gitignore 规则 - 创建数据模型定义 API 响应结构
55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
import os
|
|
import time
|
|
import uuid
|
|
from typing import Optional, List
|
|
from fastapi import APIRouter, UploadFile, File, Response
|
|
from app.schemas.analyze import Analyze, AnalyzeData
|
|
from app.services.model import TaskStatus, TaskStore
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("/analyze")
|
|
async def submit_analyze(response: Response, images: Optional[List[UploadFile]] = File(default=[])):
|
|
from app.main import UPLOAD_DIR, WORKER
|
|
if not images:
|
|
response.status_code = 400
|
|
return Analyze(
|
|
success=False,
|
|
data=AnalyzeData(
|
|
taskId="",
|
|
status=TaskStatus.FAILED.name,
|
|
message="请上传图片",
|
|
estimatedTime="",
|
|
filesReceived=0
|
|
)
|
|
)
|
|
|
|
task_id = f"task_{int(time.time() * 1000)}_{uuid.uuid4().hex[:10]}"
|
|
|
|
task_dir = os.path.join(UPLOAD_DIR, task_id, "inputs")
|
|
os.makedirs(task_dir, exist_ok=True)
|
|
|
|
saved_paths = []
|
|
if images:
|
|
for idx, img in enumerate(images):
|
|
ext = os.path.splitext(img.filename)[1]
|
|
file_path = os.path.join(task_dir, f"{idx}{ext}")
|
|
with open(file_path, "wb") as f:
|
|
f.write(await img.read())
|
|
saved_paths.append(file_path)
|
|
|
|
WORKER.task_store[task_id] = TaskStore(images=saved_paths)
|
|
WORKER.task_queue.put(task_id)
|
|
|
|
return Analyze(
|
|
success=True,
|
|
data=AnalyzeData(
|
|
taskId=task_id,
|
|
status=TaskStatus.QUEUED.name,
|
|
message=f"已提交 {len(saved_paths)} 张图片,正在分析",
|
|
estimatedTime="",
|
|
filesReceived=len(saved_paths)
|
|
)
|
|
)
|