当前位置: 首页 > news >正文

【计算机毕业设计】基于深度学习的智能交通流量预测 Web 系统

基于深度学习的智能交通流量预测 Web 系统

一、项目简介

基于 PDFormer(Transformer 架构)的多元时间序列交通流量预测系统,提供完整的 Web 管理界面,支持历史数据查询、流量预测、统计分析及系统管理功能。

二、技术栈

层级技术
后端框架Python FastAPI
数据库 ORMSQLAlchemy 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@2026

ADMIN_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(点传感器)3075 分钟约 521 万条
PeMS07.dyna(点传感器)8835 分钟约 1500 万条
PeMS08.dyna(点传感器)1705 分钟约 290 万条
CHIBike.grid(网格)270(15×18)30 分钟约 119 万条

第五步:启动服务

web_app/目录下执行:

uvicorn backend.main:app--host0.0.0.0--port8000--reload

启动成功后访问:http://localhost:8000

六、默认账号

用户名密码角色
adminAdmin@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 MAEMasked RMSE
PDFormer-PeMS04加州 PeMS04(307个传感器)30716.5126.82
PDFormer-CHIBike芝加哥共享单车(270个网格)2702.153.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。

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

http://www.cnnetsun.cn/news/4320432.html

相关文章:

  • 《易学・姤䷫|道影子新解 044》
  • 游戏NPC接入大语言模型为何难?从确定性、实时性到成本解析
  • QCA7000/7005 SPI驱动开发指南:MCU与电力线通信芯片的通信实现
  • GFS-VL:融合3D VLM稠密知识与少样本校准的点云分割
  • AI蜂群逃逸与多智能体系统安全:沙箱防护实践指南
  • 从单片机到ROS2:机器人嵌入式物联网自学路线全攻略
  • 从零训练二次元角色LoRA:Stable Diffusion角色一致性实战全流程
  • 八电HOLOLIVE vs 八门P5X:WS练习局触发轴与资源节奏拆解
  • Hypermesh 2024前处理实战:网格划分、质量检查与节点显示问题
  • ESP8266 与 ESP-01S 到底是什么?从 Wi-Fi SoC 到串口联网模块,新手一篇快速看懂
  • Luckysheet集成实践:从zip解压到Excel转JSON的全流程指南
  • LVGL 9.0移植到STM32F746G-DISCO与性能基准测试实战
  • 用 Scrapy 爬取百家姓与姓氏源流数据:多源采集、数据清洗与结构化存储实战
  • 直播录像处理实战:FFmpeg转码切片与批量归档全流程
  • 266美元+四个AI模型,一天打造AI小镇应用:开源项目实战
  • 阿里编程题4星刷题体验:从算法建模到树状数组的实战解析
  • 【设计模式精讲】5.工厂方法(Factory Method)
  • S7-1200 MODBUS轮询库V15:多从站通信高效封装方案
  • YOLOv8农田作物倒伏识别系统:从环境搭建到部署实战解析
  • 2026 Agentic AI 智能体:让 AI 从“聊天“走向“自己干活“(MonkeyCode 实战)
  • OpenRouter 排障指南:API 网关原理、常见报错与 Claude Code 接入
  • 基于LSTM+CNN的光伏发电功率预测系统实战解析
  • Claude Code控制机械臂:从仿真到真机的安全实践
  • 专业的AI基座机构
  • 从字幕到Anki卡片:构建英语学习自动化流水线
  • 90%新手都踩的Python环境坑!版本冲突彻底解决指南 |数智码力
  • 【架构篇】科来网络流量分析审计系统
  • 数组名不是指针!一文搞懂C语言数组退化与sizeof陷阱
  • MATLAB语音滤波设计全解析:从加噪到频谱分析及滤波器实现
  • Runway AI峰会解读:AI视频生成从模型工具走向可控工作流