基于深度学习的智能交通流量预测 Web 系统
一、项目简介
基于 PDFormer(Transformer 架构)的多元时间序列交通流量预测系统,提供完整的 Web 管理界面,支持历史数据查询、流量预测、统计分析及系统管理功能。
二、技术栈
| 层级 | 技术 |
|---|---|
| 后端框架 | Python FastAPI |
| 数据库 ORM | SQLAlchemy 2.x |
| 数据库 | MySQL 8.x(utf8mb4) |
| 身份认证 | JWT(python-jose) + bcrypt |
| 预测模型 | PDFormer(PyTorch) |
| 前端 | 原生 HTML / CSS / JavaScript |
| 图表 | ECharts 5 |
三、项目结构
web_app/ ├── .env# 本地环境变量(数据库密码等)├── requirements.txt# Python 依赖├── import_dyna.py# 历史交通数据批量导入工具├── database/ │ └── init.sql# 数据库建表 + 初始化数据脚本├── backend/ │ ├── main.py# FastAPI 入口,路由挂载,静态文件服务│ ├── config.py# 全局配置(读取 .env)│ ├── database.py# SQLAlchemy 引擎与会话│ ├── core/ │ │ ├── security.py# 密码哈希、JWT 生成/解析│ │ └── deps.py# FastAPI 依赖注入(DB会话、当前用户)│ ├── models/# SQLAlchemy ORM 模型│ │ ├── user.py# 用户表│ │ ├── traffic.py# 数据集、传感器、历史流量表│ │ └── prediction.py# 预测记录、预测结果表│ ├── schemas/# Pydantic 请求/响应模型│ │ ├── user.py │ │ ├── traffic.py │ │ └── prediction.py │ ├── services/# 业务逻辑层│ │ ├── auth_service.py# 注册、登录、初始化管理员│ │ ├── traffic_service.py# 数据集、传感器、历史查询、统计│ │ └── prediction_service.py# 模型推理(含模拟模式回退)│ └── routers/# API 路由层│ ├── auth.py# /api/auth/*│ ├── users.py# /api/users/*│ ├── traffic.py# /api/traffic/*│ ├── models.py# /api/models/*│ └── predictions.py# /api/predictions/*└── frontend/ ├── login.html# 登录 / 注册页├── index.html# 首页 Dashboard├── pages/ │ ├── history.html# 历史交通数据查询│ ├── prediction.html# 交通流量预测│ ├── stats.html# 道路未来车流量统计│ └── admin/ │ ├── users.html# 用户管理(管理员)│ ├── data.html# 数据管理(管理员)│ ├── models.html# 模型管理(管理员)│ └── pred_records.html# 预测记录管理(管理员)└── static/ ├── css/style.css# 全局样式└── js/ ├── api.js# 前端 API 请求封装└── utils.js# 工具函数(认证、格式化、省略号分页等)四、环境要求
- Python 3.8 及以上
- MySQL 8.0 及以上
- 已训练好的 PDFormer 模型权重文件(可选,无则自动使用模拟模式)
五、快速启动
第一步:初始化数据库
使用任意 MySQL 客户端执行:
sourceweb_app/database/init.sql该脚本会自动创建traffic_predict数据库及所有表,并写入数据集、传感器节点、模型的初始数据。
第二步:配置环境变量
在web_app/目录下创建.env文件:
DB_HOST=localhostDB_PORT=3306DB_USER=rootDB_PASSWORD=你的MySQL密码DB_NAME=traffic_predictSECRET_KEY=traffic-predict-secret-key-2026-jayADMIN_PASSWORD=Admin@2026ADMIN_PASSWORD是系统首次启动时自动创建的管理员密码,用户名固定为admin。
第三步:安装 Python 依赖
pipinstall-rrequirements.txt第四步:导入历史交通数据
系统自带 **批量导入工具 **import_dyna.py,支持将原始数据文件导入 MySQL,需在web_app/目录下执行:
# 导入 PeMS04(307个传感器,约521万条,2~3分钟)python import_dyna.py PeMS04# 快速演示:只导入前30个传感器(约51万条,~20秒)python import_dyna.py PeMS0430# 导入 CHIBike(270个网格节点,约119万条,~1分钟)python import_dyna.py CHIBike# 导入 PeMS07 / PeMS08python import_dyna.py PeMS07 python import_dyna.py PeMS08支持的原始数据文件位于MTFormer/raw_data/下,CHIBike 使用.grid网格格式,其余数据集使用.dyna点传感器格式。
各数据集原始数据量:
| 数据集 | 格式 | 节点数 | 采样间隔 | 数据量 |
|---|---|---|---|---|
| PeMS04 | .dyna(点传感器) | 307 | 5 分钟 | 约 521 万条 |
| PeMS07 | .dyna(点传感器) | 883 | 5 分钟 | 约 1500 万条 |
| PeMS08 | .dyna(点传感器) | 170 | 5 分钟 | 约 290 万条 |
| CHIBike | .grid(网格) | 270(15×18) | 30 分钟 | 约 119 万条 |
第五步:启动服务
在web_app/目录下执行:
uvicorn backend.main:app--host0.0.0.0--port8000--reload启动成功后访问:http://localhost:8000
六、默认账号
| 用户名 | 密码 | 角色 |
|---|---|---|
| admin | Admin@2026 | 管理员 |
七、功能说明
登录 / 注册
- 支持新用户自主注册,填写用户名、邮箱、密码即可
- 登录后系统签发 JWT Token,存储于浏览器 localStorage,后续所有请求自动携带
- Token 有效期 24 小时,过期后自动跳转回登录页
- 管理员账号由系统启动时自动创建,普通用户注册后默认角色为"用户"
首页 Dashboard
- 顶部展示四项核心统计指标:注册用户数、已接入数据集数、历史流量记录总条数、累计预测次数
- 展示当前激活模型的名称、训练数据集、MAE / RMSE / MAPE 等关键性能指标
- 流量趋势折线图:展示近 7 天的交通流量走势
- 交通流量等级分布饼图:按"畅通 / 一般 / 拥堵"三级分类统计历史数据占比
历史交通数据查询
用户可按以下条件筛选历史交通记录:
- 数据集:选择 PeMS04 / CHIBike 等已接入的数据集
- 传感器节点:选择具体的道路传感器或网格节点
- 时间范围:设置查询的开始时间与结束时间,支持精确到分钟
查询结果以表格形式呈现(记录时间、流量、车速、占有率、星期等),支持省略号分页浏览。点击"绘制流量曲线"可将结果渲染为 ECharts 折线图。
交通流量预测
| 参数 | 说明 |
|---|---|
| 道路(传感器节点) | 选择需要预测的具体路段 |
| 预测起始时间 | 预测从哪个时间点开始 |
| 预测步数 | 每步 5 分钟,最多 12 步(60 分钟) |
| 星期 | 影响交通规律(工作日 vs 周末) |
| 天气 | 晴天 / 阴天 / 雨天 / 雪天 |
| 是否节假日 | 节假日与工作日车流规律不同 |
点击"开始预测"后,后端调用当前激活的 PDFormer 模型进行推理(或自动回退模拟模式),返回每步预测流量值,以数据表格 + 折线图双视图展示,本次预测记录自动入库。
道路未来车流量统计
在预测基础上进一步提供综合统计分析:
- KPI 指标卡:平均流量、最大流量、车流总量、预计高峰时段、车流趋势
- 未来交通流量折线图:各时间节点的预测车流量曲线
- 历史与未来对比图:预测数据与近期历史数据叠加对比
- 交通等级分析饼图:畅通( 250辆)
用户管理(管理员)
- 查看所有注册用户,支持按用户名、邮箱关键词搜索
- 创建新用户、编辑用户信息(姓名、邮箱、角色)
- 禁用 / 启用账号、永久删除用户
数据管理(管理员)
- 展示已接入的所有交通数据集(名称、来源、节点数、采样间隔、记录总数)
- 选择数据集后可查看传感器节点列表
- 选择传感器后可预览该节点的近期历史流量数据(省略号分页)
若数据未导入,记录总数显示"未导入",页面提示通过import_dyna.py导入数据。
模型管理(管理员)
- 展示所有已录入的预测模型,含模型类型、训练数据集、实验编号、训练轮次、耗时等信息
- 每个模型展示完整评估指标:Masked MAE / MAPE / RMSE
- 模型性能对比图:柱状图+折线图同时对比各模型表现,无指标数据的模型以灰色占位
- 激活操作:将指定模型设为系统当前预测模型
预测记录管理(管理员)
- 查看所有用户发起的历史预测记录(发起用户、路段、时间、步数、使用模型、平均流量)
- 点击"查看详情":弹窗展示该次预测的逐步结果(时间点 + 流量值 + 折线图)
- 支持删除预测记录(同步删除关联的结果详情)
八、预测模型说明
系统集成两个已训练的 PDFormer 模型:
| 模型 | 训练数据集 | 节点数 | Masked MAE | Masked RMSE |
|---|---|---|---|---|
| PDFormer-PeMS04 | 加州 PeMS04(307个传感器) | 307 | 16.51 | 26.82 |
| PDFormer-CHIBike | 芝加哥共享单车(270个网格) | 270 | 2.15 | 3.87 |
模型加载机制:
- 系统启动时自动尝试加载 MTFormer/libcity/cache/9056/model_cache/PDFormer_PeMS04.m
- 若文件存在且环境完整,使用真实 PDFormer 推理
- 若加载失败,自动切换为模拟预测模式(基于早晚高峰规律、节假日系数生成预测,功能完全正常)
九、数据库表结构
| 表名 | 说明 |
|---|---|
| users | 用户账号信息 |
| traffic_datasets | 交通数据集元信息(含记录总数、时间范围) |
| sensors | 传感器/网格节点信息(含经纬度) |
| traffic_records | 历史交通流量数据 |
| ml_models | 机器学习模型信息及评估指标 |
| prediction_records | 用户发起的预测记录 |
| prediction_results | 每次预测的逐步结果详情 |
十、API 接口概览
| 路径 | 说明 |
|---|---|
| POST /api/auth/register | 用户注册 |
| POST /api/auth/login | 用户登录,返回 JWT Token |
| GET /api/traffic/dashboard | 获取首页统计数据 |
| GET /api/traffic/datasets | 获取数据集列表 |
| GET /api/traffic/sensors | 获取传感器节点列表 |
| GET /api/traffic/history | 查询历史流量数据(分页) |
| GET /api/traffic/chart | 获取图表数据 |
| GET /api/models/ | 获取模型列表 |
| POST /api/models/{id}/activate | 激活指定模型(管理员) |
| POST /api/predictions/ | 发起流量预测 |
| GET /api/predictions/ | 获取预测记录列表 |
| GET /api/users/ | 获取用户列表(管理员) |
完整接口文档访问:http://localhost:8000/docs
十一、注意事项
- .env 文件包含数据库密码等敏感信息,请勿提交到版本仓库。
- 数据库编码必须为 utf8mb4,否则中文字段可能出现乱码。
- 模型权重文件较大,需确保 MTFormer/libcity/cache/ 目录完整存在。
- CHIBike 数据集字段映射:traffic_flow 对应 inflow(流入量),traffic_occupancy 借用字段存储 outflow(流出量),traffic_speed 为 NULL。
- 路径中含有中文,部分旧版 Python 环境需确保系统编码为 UTF-8。
本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。