目录
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 FastAPI
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
app = 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 logger
3. 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 - 模型管理器
功能特点
-
自动加载默认模型
-
支持模型切换
-
模型信息持久化
-
单例模式管理