|
@@ -12,6 +12,10 @@ from fastapi import FastAPI
|
|
|
from pydantic import BaseModel
|
|
from pydantic import BaseModel
|
|
|
import uvicorn
|
|
import uvicorn
|
|
|
import logging
|
|
import logging
|
|
|
|
|
+from fastapi.responses import JSONResponse
|
|
|
|
|
+from fastapi.exception_handlers import RequestValidationError
|
|
|
|
|
+from fastapi.exceptions import RequestValidationError
|
|
|
|
|
+from fastapi import status
|
|
|
|
|
|
|
|
# 设置日志格式和级别
|
|
# 设置日志格式和级别
|
|
|
logging.basicConfig(level=logging.INFO, format='[%(asctime)s] %(levelname)s - %(message)s')
|
|
logging.basicConfig(level=logging.INFO, format='[%(asctime)s] %(levelname)s - %(message)s')
|
|
@@ -219,16 +223,11 @@ def yolov12_train(params: TrainParams):
|
|
|
exist_ok=params.exist_ok,
|
|
exist_ok=params.exist_ok,
|
|
|
)
|
|
)
|
|
|
logging.info("模型训练完成")
|
|
logging.info("模型训练完成")
|
|
|
- logging.info(f"训练结果: save_dir={results.save_dir}, metrics={results.metrics}, epoch={results.epoch}, best_fitness={getattr(results, 'best_fitness', None)}")
|
|
|
|
|
|
|
+ # logging.info(f"训练结果: {str(results)}")
|
|
|
return {
|
|
return {
|
|
|
"code": 0,
|
|
"code": 0,
|
|
|
"msg": "success",
|
|
"msg": "success",
|
|
|
- "result": {
|
|
|
|
|
- "save_dir": str(results.save_dir),
|
|
|
|
|
- "metrics": str(results.metrics),
|
|
|
|
|
- "epoch": results.epoch,
|
|
|
|
|
- "best_fitness": getattr(results, "best_fitness", None)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ "result": str(results.save_dir)
|
|
|
}
|
|
}
|
|
|
except Exception as e:
|
|
except Exception as e:
|
|
|
logging.error(f"训练过程发生异常: {e}")
|
|
logging.error(f"训练过程发生异常: {e}")
|
|
@@ -238,6 +237,20 @@ def yolov12_train(params: TrainParams):
|
|
|
"result": None
|
|
"result": None
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+# 全局异常处理器:参数校验失败时统一返回格式
|
|
|
|
|
+@app_fastapi.exception_handler(RequestValidationError)
|
|
|
|
|
+async def validation_exception_handler(request, exc):
|
|
|
|
|
+ err_msg = f"参数校验失败: 路径={request.url.path}, 错误={exc.errors()}"
|
|
|
|
|
+ logging.error(err_msg)
|
|
|
|
|
+ return JSONResponse(
|
|
|
|
|
+ status_code=status.HTTP_200_OK,
|
|
|
|
|
+ content={
|
|
|
|
|
+ "code": 422,
|
|
|
|
|
+ "msg": err_msg,
|
|
|
|
|
+ "result": None
|
|
|
|
|
+ }
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
if __name__ == "__main__":
|
|
if __name__ == "__main__":
|
|
|
threading.Thread(target=start_gradio, daemon=True).start()
|
|
threading.Thread(target=start_gradio, daemon=True).start()
|
|
|
uvicorn.run(app_fastapi, host="0.0.0.0", port=8000)
|
|
uvicorn.run(app_fastapi, host="0.0.0.0", port=8000)
|