基于深度学习的智能交通流量预测 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

项目结构

plain 复制代码
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 客户端执行:

sql 复制代码
source web_app/database/init.sql

该脚本会自动创建 traffic_predict 数据库及所有表,并写入数据集、传感器节点、模型的初始数据。

第二步:配置环境变量

web_app/ 目录下创建 .env 文件:

plain 复制代码
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=你的MySQL密码
DB_NAME=traffic_predict

SECRET_KEY=traffic-predict-secret-key-2026-jay
ADMIN_PASSWORD=Admin@2026

ADMIN_PASSWORD 是系统首次启动时自动创建的管理员密码,用户名固定为 admin

第三步:安装 Python 依赖

bash 复制代码
pip install -r requirements.txt

第四步:导入历史交通数据

系统自带 **批量导入工具 **import_dyna.py,支持将原始数据文件导入 MySQL,需在 web_app/ 目录下执行:

bash 复制代码
# 导入 PeMS04(307个传感器,约521万条,2~3分钟)
python import_dyna.py PeMS04

# 快速演示:只导入前30个传感器(约51万条,~20秒)
python import_dyna.py PeMS04 30

# 导入 CHIBike(270个网格节点,约119万条,~1分钟)
python import_dyna.py CHIBike

# 导入 PeMS07 / PeMS08
python 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/ 目录下执行:

bash 复制代码
uvicorn backend.main:app --host 0.0.0.0 --port 8000 --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 指标卡:平均流量、最大流量、车流总量、预计高峰时段、车流趋势
  • 未来交通流量折线图:各时间节点的预测车流量曲线
  • 历史与未来对比图:预测数据与近期历史数据叠加对比
  • 交通等级分析饼图:畅通(< 100辆)/ 一般(100~250辆)/ 拥堵(> 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


注意事项

  1. .env 文件包含数据库密码等敏感信息,请勿提交到版本仓库。
  2. 数据库编码必须为 utf8mb4,否则中文字段可能出现乱码。
  3. 模型权重文件较大,需确保 MTFormer/libcity/cache/ 目录完整存在。
  4. CHIBike 数据集字段映射:traffic_flow 对应 inflow(流入量),traffic_occupancy 借用字段存储 outflow(流出量),traffic_speed 为 NULL。
  5. 路径中含有中文,部分旧版 Python 环境需确保系统编码为 UTF-8。

本项目为个人原创,结构清晰,功能完整,适合数据分析与智能应用方向课程设计、毕业设计和项目演示使用。有定制化需求可以评论或私信作者。

作者原创项目地址:michael-jay.pages.dev/projects.ht...

相关推荐
实验如有神祝女士15 小时前
不同参数规模大模型在医学翻译场景的适配差异
论文阅读·人工智能·深度学习·学习·算法·语言模型·论文笔记
Jay805916 小时前
基于深度学习的车辆识别收费管理系统(全套源码+数据集)
深度学习
Jay805918 小时前
基于 YOLOv8 的+ CRNN 的车牌识别系统(全套源码+数据集)
深度学习
淼澄研学21 小时前
PyTorch深度学习实战:从零构建神经网络模型的五个核心步骤
pytorch·深度学习·神经网络
L同学-AIGC21 小时前
【OpenClaw 启动器全流程使用教程 —— 从零部署到生产级 AI 智能体】
人工智能·深度学习
手写码匠1 天前
828华为云征文|Flexus X实例 + MaaS平台DeepSeek推理服务:从零搭建企业级AI应用全攻略
人工智能·深度学习·算法·aigc
过期的秋刀鱼!1 天前
更大的神经网络(自动微分 auto diff)
人工智能·深度学习·神经网络
中微极客1 天前
2026上半年AI视频模型技术突破:从生成到“导演级”控制的工程实践
人工智能·深度学习·音视频
江畔柳前堤1 天前
重新理解“方差“:从统计学到LLM的七个维度
人工智能·深度学习·神经网络·目标检测·机器学习·自然语言处理·语音识别