行人摔倒检测系统 - 后端文档(1)
目录
- 项目概述
- 技术栈
- 目录结构
- 核心模块
- API 接口文档
- 数据库设计
- 部署指南
- 开发指南
1.项目概述
行人摔倒检测系统后端基于 FastAPI 框架开发,使用 YOLO11 深度学习模型进行目标检测。系统提供 RESTful API 接口,支持图像和视频的上传、检测、下载等功能。

主要功能
- 图像摔倒检测
- 视频摔倒检测
- 文件管理(上传、下载、删除)
- 系统监控(CPU、内存、磁盘)
- 日志管理
- 模型管理
- 数据可视化
- 大语言模型集成
2.技术栈
核心框架
- FastAPI: 现代化的 Python Web 框架
- Uvicorn: ASGI 服务器
- Pydantic: 数据验证
AI/ML 库
- Ultralytics: YOLO11 模型库
- OpenCV: 图像和视频处理
系统工具
- psutil: 系统监控
- python-multipart: 文件上传
- httpx: HTTP 客户端
Python 版本
- Python 3.9+
3.目录结构
backend/├── images/ # 图像存储目录│ ├── upload/ # 上传的原始图像│ └── detected/ # 检测结果图像│├── videos/ # 视频存储目录│ ├── upload/ # 上传的原始视频│ └── detected/ # 检测结果视频│├── models/ # 模型文件目录│ ├── models_info.json # 模型信息配置│ └── *.pt # YOLO 模型文件│├── logs/ # 日志文件目录│ └── YYYY.MM.DD.log # 按日期命名的日志│├── trained/ # 训练结果目录│ ├── weights/ # 训练权重│ │ └── best.pt # 最佳模型│ ├── results.csv # 训练结果│ └── *.png # 训练图表│├── routers/ # API 路由模块│ ├── __init__.py│ ├── images.py # 图像管理 API│ ├── videos.py # 视频管理 API│ ├── logs.py # 日志管理 API│ ├── systems.py # 系统监控 API│ ├── models.py # 模型管理 API│ ├── dashboard.py # 数据可视化 API│ ├── llm.py # 大语言模型 API│├── utils/ # 工具模块│ ├── __init__.py│ ├── logger.py # 日志配置│ ├── model_manager.py # 模型管理器│ └── response.py # 统一响应格式│├── main.py # 主入口文件├── requirements.txt # Python 依赖├── .env.example # 环境变量示例├── .gitignore # Git 忽略配置├── README.md # 项目说明└── yolo11n.pt # 默认 YOLO 模型4.核心模块
1. main.py - 主入口文件
应用初始化
from fastapi import FastAPIfrom fastapi.middleware.cors import CORSMiddlewarefrom contextlib import asynccontextmanagerapp = FastAPI( title="行人摔倒检测系统 API", description="基于 YOLO11 的行人摔倒检测系统后端接口", version="1.0.0", lifespan=lifespan)CORS 配置
app.add_middleware( CORSMiddleware, allow_origins=["*"], # 允许所有来源 allow_credentials=True, allow_methods=["*"], # 允许所有方法 allow_headers=["*"], # 允许所有头部)静态文件挂载
app.mount("/static/images/upload", StaticFiles(directory="images/upload"))app.mount("/static/images/detected", StaticFiles(directory="images/detected"))app.mount("/static/videos/upload", StaticFiles(directory="videos/upload"))app.mount("/static/videos/detected", StaticFiles(directory="videos/detected"))路由注册
app.include_router(images.router, prefix="/api/images", tags=["图像管理"])app.include_router(videos.router, prefix="/api/videos", tags=["视频管理"])app.include_router(logs.router, prefix="/api/logs", tags=["日志管理"])app.include_router(systems.router, prefix="/api/systems", tags=["系统监控"])app.include_router(models.router, prefix="/api/models", tags=["模型管理"])app.include_router(dashboard.router, prefix="/api/dashboard", tags=["仪表板"])启动配置
if __name__ == "__main__": uvicorn.run( "main:app", host="0.0.0.0", # 监听所有网络接口 port=10077, # 端口号 reload=True, # 开发模式自动重载 log_level="info" # 日志级别 )2. utils/logger.py - 日志模块
功能特点
- 按日期自动创建日志文件
- 同时输出到文件和控制台
- UTF-8 编码支持中文
- 统一的日志格式
日志配置
def setup_logger(): """设置日志配置""" log_dir = Path("logs") log_dir.mkdir(parents=True, exist_ok=True) # 日志文件名:YYYY.MM.DD.log log_file = log_dir / f"{datetime.now().strftime('%Y.%m.%d')}.log" logger = logging.getLogger("fall_detection") logger.setLevel(logging.INFO) # 文件处理器 file_handler = logging.FileHandler(log_file, encoding='utf-8') # 控制台处理器 console_handler = logging.StreamHandler(sys.stdout) # 日志格式 formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) return logger3. utils/response.py - 统一响应格式
响应结构
{ "code": 200, # 状态码 "message": "成功", # 提示信息 "data": {} # 响应数据}成功响应
def success_response(data: Any = None, message: str = "成功") -> dict: return { "code": 200, "message": message, "data": data }错误响应
def error_response(message: str = "失败", code: int = 400) -> dict: return { "code": code, "message": message, "data": None }4. utils/model_manager.py - 模型管理器
功能特点
- 自动加载默认模型
- 支持模型切换
- 模型信息持久化
- 单例模式管理
文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有