一、案例背景

随着我国城镇化进程的加速,城市交通拥堵问题日益严峻。据统计,全国主要城市居民通勤时间逐年增长,交通拥堵不仅造成时间损失和能源浪费,更对空气质量和城市运行效率产生显著影响。传统交通管理方式主要依赖固定传感器和历史经验,存在数据滞后、覆盖面有限等瓶颈。

近年来,人工智能和大数据技术在交通领域快速发展。深度学习模型可从海量交通数据中学习复杂模式,实现交通流量预测;计算机视觉技术可从道路监控图像中自动检测施工障碍物;大语言模型则为交通管理提供了智能化的决策辅助能力。与此同时,高德地图等互联网地图平台通过开放API提供实时天气、路况、交通态势等数据,使得交通分析的时效性和精准性大幅提升。

本作品基于高德地图车载视频图像数据集和PeMSD7交通流量数据集,融合LSTM深度学习、传统机器学习和高德地图实时API,构建了集流量预测、障碍物检测、高德地图服务、实时监控预警和AI智能对话于一体的智能交通路况分析系统。系统采用Streamlit框架实现交互式可视化,并集成了DeepSeek-V3大模型提供智能问答服务,为交通管理和出行决策提供数据驱动的智能化支持。

二、项目目标及实现思路

本项目主要目标如下图:

基于PeMSD7交通流量数据,构建LSTM时序预测模型,实现对228个传感器未来交通流量的预测。

于高德地图车载视频图像数据集,提取颜色、纹理、边缘等多维视觉特征,训练传统机器学习和深度学习分类模型,实现道路施工障碍物的9分类自动检测。

接入高德地图Web API,提供实时天气、交通态势、路径规划等地图服务。

接入DeepSeek-V3大语言模型API,提供智能交通问答助手。

构建交互式Streamlit可视化系统,整合所有功能模块并提供直观的用户界面。

技术路线如图所示:

数据采集:使用公开数据集(PeMSD7流量数据+ 高德车载图像数据)

数据预处理:JSON标注解析、缺失值检查、数据格式统一、标签编码

特征工程:颜色直方图(48维)、颜色矩(9维)、边缘特征(4维)、HOG、ResNet50深度特征

模型构建:传统ML(RandomForest、XGBoost、SVM)+ 深度学习(ResNet50、LSTM)

API集成:高德地图实时数据服务 + DeepSeek-V3大模型对话

可视化系统:Streamlit多页面交互式系统

三、数据获取与探索

3.1 PeMSD7交通流量数据

PeMSD7(Caltrans Performance Measurement System)数据集来源于阿里天池平台,共228个传感器节点。数据以5分钟为时间间隔采集,涵盖了工作日(V数据:12,672时间步)和周末(W数据:10,000时间步)的交通流量信息。

本系统使用Python的pandas库读取CSV格式的流量数据,自动为每个传感器命名列(sensor_0 ~ sensor_227),并通过TrafficDataLoader类统一管理数据加载流程。关键代码如下:

import pandas as pd
pemsd7_v = pd.read_csv('PeMSD7_V_228.csv', header=None)
pemsd7_v.columns = [f'sensor_{i}' for i in range(228)]
print(pemsd7_v.shape)  # (12672, 228)

数据统计显示,228个传感器覆盖了旧金山湾区主要道路网络,数据量充足,适合进行时序预测建模。

3.2 高德地图车载视频图像数据

本数据集来源于阿里天池平台,由高德地图车载设备采集的道路视频帧图像组成,共计约5,500个样本,每个样本包含4-5帧从车载视频中截取的关键帧图像。数据集分为两个版本:

训练集(3分类):1,500个样本,标注为0-正常、1-施工围挡、2-路障。

最终训练集(9分类):4,288个样本,标注为0-无施工障碍、1-施工围挡、2-路障、3-锥桶、4-告示牌1(清晰文字)、5-告示牌2(模糊文字)、6-施工痕迹、7-施工机械、8-工地正门。

标注数据以JSON格式存储,记录了每个样本的ID、关键帧名称、状态类别和帧列表信息。系统通过TrafficDataLoader类解析JSON文件,构建结构化的pandas DataFrame,便于后续分析和建模。

四、数据处理与特征工程

4.1 数据清洗与预处理

数据预处理是建模的基础,本系统实现了完整的预处理流水线(DataPreprocessor类),包括:

缺失值检查:遍历DataFrame所有列,统计并报告缺失值数量

数据统计摘要:自动计算类别分布、帧数分布、时长分布等统计信息

建模数据准备:批量遍历图像目录,将图像路径和标签整理为numpy数组

针对Windows下cv2.imread不支持中文路径的问题(项目路径含"数据分析考核"中文字符),使用PIL.Image.open替代cv2.imread读取图像,确保所有图像正常加载。

4.2 图像特征提取

图像特征提取是模型的输入基础,系统实现了多维特征提取器(ImageFeatureExtractor类),包含以下特征:

(1)颜色直方图(48维)

分别对RGB三个通道计算32bin的颜色直方图,并归一化处理。颜色直方图能反映图像的整体颜色分布,对于区分不同颜色特征的障碍物(如橙色锥桶、银色施工机械)具有重要作用。

hist = cv2.calcHist([channel], [0], None, [32], [0, 256])
hist = cv2.normalize(hist, hist).flatten()

(2)颜色矩(9维)

对RGB三通道分别计算均值(一阶矩)、标准差(二阶矩)和偏度(三阶矩),共9维特征。颜色矩能简洁地描述图像的颜色统计特性。受负值影响,偏度计算使用np.cbrt()替代** (1/3)以避免NaN。

skew = np.cbrt(np.mean((channel - mean) ** 3))

(3)边缘特征(4维)

使用Canny边缘检测计算边缘密度,并结合Sobel梯度提取梯度均值、标准差和90百分位数值。边缘特征能有效区分有清晰边缘的障碍物(如告示牌、施工围挡)和自然路面。

(4)LBP纹理特征

局部二值模式(Local Binary Pattern)通过比较像素与其邻域的关系编码图像纹理。LBP对光照变化不敏感,适合描述路面和障碍物的纹理差异。

(5)GLCM纹理特征

灰度共生矩阵(Gray-Level Co-occurrence Matrix)从不同距离和角度(0°, 45°, 90°, 135°)计算对比度(Contrast)、同质性(Homogeneity)、能量(Energy)和相关性(Correlation),共48维特征。

(6)ResNet50深度特征(2048维)

使用在ImageNet上预训练的ResNet50模型,移除最后的全连接层,通过全局平均池化层提取2048维深度特征。该特征具有更高的语义抽象能力,能捕获传统视觉特征难以表达的高层语义信息。

五、模型原理与设计

5.1 随机森林 (RandomForest)

随机森林是一种集成学习方法,通过构建多棵决策树并综合投票结果来提高分类精度和鲁棒性。每棵树使用自助采样(Bootstrap Sampling)和随机特征选择进行训练。系统配置n_estimators=200(200棵树)、max_depth=15,并使用class_weight="balanced"处理类别不平衡问题。

5.2 XGBoost 梯度提升

XGBoost(eXtreme Gradient Boosting)是一种高效的梯度提升框架,通过逐步添加弱学习器(决策树)来迭代优化损失函数。本系统使用learning_rate=0.1、max_depth=8、subsample=0.8等参数,相比传统的GBDT具有更快的训练速度和更好的泛化能力。

5.3 支持向量机 (SVM)

SVM通过寻找最大间隔超平面实现分类。对于非线性可分问题,使用RBF(径向基函数)核将数据映射到高维空间。系统设置C=10、gamma="scale",并使用StandardScaler对特征进行标准化处理,消除量纲差异。

5.4 ResNet50 深度学习

ResNet50是一种残差网络,通过引入跳跃连接(Skip Connection)解决了深层网络的梯度消失问题。系统加载ImageNet预训练权重,冻结骨干网络(freeze_backbone=True),替换最后的全连接分类头为:Dropout(0.5) → Linear(2048→512) → ReLU → Dropout(0.3) → Linear(512→9),输出9类施工障碍物的分类概率。

5.5 LSTM 交通流量预测

长短期记忆网络(LSTM)是一种专门处理序列数据的循环神经网络,通过门控机制(遗忘门、输入门、输出门)有效捕获序列中的长程依赖关系。本系统构建了一个双层LSTM模型(hidden_dim=128),输入为过去12个时间步的228维传感器数据,输出为未来3个时间步的预测值。损失函数使用MSE(均方误差),优化器使用Adam。

六、模型训练与实现

系统实现了完整的模型训练流水线,核心代码如下:

from feature_extraction import ImageFeatureExtractor
from model_training import TraditionalMLTrainer
from sklearn.model_selection import train_test_split

# 准备数据集
preprocessor = DataPreprocessor(df, "final_train")
image_paths, labels = preprocessor.prepare_model_data()

# 提取传统特征 (48+9+4=61维)
extractor = ImageFeatureExtractor()
features, _ = extractor.extract_features_from_paths(
    image_paths.tolist(), use_deep=False)

# 清理NaN值 (解决颜色矩偏度计算中的NaN)
mask = ~np.isnan(features).any(axis=1)
features, labels = features[mask], labels[mask]

# 划分训练/测试集 (8:2, 分层采样)
X_train, X_test, y_train, y_test = train_test_split(
    features, labels, test_size=0.2,
    random_state=42, stratify=labels)

# 训练所有模型
trainer = TraditionalMLTrainer()
results = trainer.train_all(X_train, y_train, X_test, y_test)

训练中遇到的典型问题及解决方案:

cv2.imread中文路径问题:改用PIL.Image.open读取图像,完美支持中文路径。

颜色矩NaN问题:np.mean(x**3) ** (1/3)在负值上产生NaN,改用np.cbrt()

变量名拼写错误:train_svm中y_train_scaled应为y_train(标签不需标准化)。

类别不平衡:使用class_weight="balanced"和分层采样缓解不平衡问题。

模型训练完成后,系统会自动保存模型文件(.pkl格式)和评估结果,并生成混淆矩阵、ROC曲线和模型性能对比图。同时支持TrafficFlowPredictor进行PeMSD7的LSTM时序预测,使用滑动窗口方法构建训练样本,最小化MSE损失。

七、可视化系统实现

7.1 需求分析

系统基于以下需求进行分析和设计:

数据可视化:直观展示数据集分布、类别占比、时序趋势。

图像浏览:支持按类别和ID筛选,分页浏览原始道路图像。

模型训练:提供可视化界面的模型训练入口,支持参数调整。

交通预测:展示PeMSD7数据的时序图和LSTM预测结果。

障碍物检测:上传单张道路图像,实时检测施工障碍物。

高德地图服务:集成实时天气、交通态势查询、路径规划。

AI对话:集成DeepSeek-V3大语言模型,支持多轮对话。

7.2 系统设计

系统采用Streamlit框架构建,遵循MVC模式:

Model层:config.py(配置)、data_preprocessing.py(数据加载)、feature_extraction.py(特征提取)、model_training.py(模型)。

View层:app.py (9个功能页面的UI渲染)。

Controller层:main.py(入口)、amap_api.py(高德API)、llm_service.py(DeepSeek)。

技术栈:Python 3.11 + Streamlit + matplotlib/seaborn(图表) + OpenCV/PIL(图像处理) + PyTorch(深度学习) + scikit-learn(传统ML) + 高德API + DeepSeek-V3 API。

7.3 界面设计与实现

系统包含9个功能页面,通过左侧边栏导航切换:

序号

页面

功能

1

系统首页

项目简介、核心指标、技术栈展示

2

数据概览

4个数据集切换、类别分布、帧数分析

3

数据分析

交互式可视化、类别平衡性、综合仪表盘

4

图像浏览

原始图像浏览、标注信息、分页筛选

5

模型训练

传统ML/ResNet50/LSTM训练入口

6

交通流量预测

PeMSD7时序图、传感器相关性热力图

7

实时检测

上传图像进行障碍物识别

8

高德地图服务

天气/交通态势/路径规划+地图展示

9

DeepSeek对话

多轮对话、角色预设、流式输出

界面实现的关键技术要点:

中文显示:使用matplotlib的font.sans-serif配置SimHei字体,axes.unicode_minus=False解决负号显示。

数据缓存:使用@st.cache_data装饰器缓存数据加载,避免重复读取文件。

会话管理:使用st.chat_message和st.session_state管理DeepSeek多轮对话状态。

离线降级:高德API和DeepSeek API失败时自动降级到本地模拟器和规则引擎。

地图展示:使用plotly Scattermapbox绘制交互式路径地图,未安装时降级为matplotlib。

八、总结与展望

本作品完成了一个功能完整的智能交通路况分析系统,主要成果包括:

构建了完整的PeMSD7数据加载与LSTM预测流水线,支持228传感器、12步历史、3步预测。

实现了5种机器学习/深度学习模型(RF、XGBoost、SVM、ResNet50、CNN)对9类施工障碍物的分类。

集成了高德地图9+ API接口,提供实时天气、交通态势、路径规划等服务。

接入了DeepSeek-V3大模型,实现智能交通问答,支持多轮对话和流式输出。

开发了基于Streamlit的9页面交互式可视化系统。

不足之处:

图像数据集存在一定类别不平衡,可能导致少数类识别准确率偏低。

LSTM模型的序列长度和预测步长对超参数较敏感,需要更多调优实验。

高德API调用频率受限,真实生产环境中需要考虑更多调用策略。

未来展望:

引入更多交通数据源(百度地图/腾讯地图API),丰富数据维度。

采用Transformer或Temporal Fusion Transformer替代LSTM,提升预测精度。

增加车联网驾驶行为分析模块,扩展系统应用场景。

部署到云平台,实现真正的实时在线服务。

部分系统功能展示

9.1 数据集概览页面

数据概览页面提供了直观的统计指标展示。如图10-1所示,训练集(3分类、1500个样本)中"正常"类别占72.9%(1094个样本),"路障"占19.4%(291个样本),"施工围挡"占7.7%(115个样本),平均每样本4.6帧图像,总计6,892张图像。柱状图清晰展示了各类别数量差异,饼图直观反映了比例关系。

图10-1  数据集概览页面(柱状图+饼图展示3分类分布)

9.2 图像浏览器

图像浏览器是数据探索的核心组件。如图10-2所示,用户可在下拉框中选择"最终训练集(4288个样本)"、"训练集(1500个样本)"或"测试集(600个样本)"等数据集,并支持按类别筛选和按样本ID搜索。每张缩略图下方显示该样本的关键帧编号、状态徽章("无施工障碍"绿色、"施工围挡"/"路障"橙色、"锥桶"等红色)和帧数信息。点击"查看全部N帧"展开器可查看样本的所有帧,便于标注员核验数据质量。

真实道路图像如样本000001(杭州市区道路,无障碍物)、000002(高速收费站区域)、000003(路障存在场景)等,清晰呈现了不同交通场景下的视觉特征差异。图像浏览器通过分页(每页12张)避免了一次性加载过多图像,提升了交互流畅度。

图10-2  图像浏览器(展示真实车载图像样本)

9.3 实时路况障碍物检测

实时检测页面提供了用户友好的上传界面。如图10-3所示,用户可通过拖放或"Browse files"按钮选择道路图像(支持JPG、JPEG、PNG、BMP格式,单文件最大200MB)。页面下方以网格形式展示9类施工障碍物:0-无施工障碍(绿色)、1-施工围挡、2-路障、3-锥桶、4-告示牌1(清晰文字)、5-告示牌2(模糊文字)、6-施工痕迹、7-施工机械、8-工地正门(后8类为橙色/红色警示)。

上传图像后,系统会:1) 使用预训练模型预测障碍物类别;2) 给出预测置信度(百分比);3) 展示9类概率分布水平柱状图,其中预测类别用绿色高亮,其他类别为灰色;4) 若未找到已训练模型,自动降级为基于颜色/边缘的简单图像分析,给出"边缘密度"、"颜色标准差"等特征值作为启发式判断依据。

图10-3  实时路况障碍物检测界面

9.4 DeepSeek 大模型对话

DeepSeek对话页面是与大模型交互的核心入口。如图10-4所示,页面顶部提供温度(创造性)控制滑块(0.0-1.0)、对话轮数显示和API Key状态指示。中间区域有"新建对话"和"流式输出"开关,下方是4种角色预设:"通用助手"、"数据分析专家"、"Python编程专家"、"交通工程顾问"。

实际对话示例中,用户问"如果想要最快的到达一个地点, 选择什么交通工具最好",AI从飞机、高铁、私家车/出租车、直升机/eVTOL 四个维度给出了专业建议,并结合距离、预算、路况和紧急程度进行分析。整个回答流式输出,界面实时刷新,给用户自然的对话体验。本次实际调用成功调用了DeepSeek-V3 API(通过环境变量配置API Key),验证了大模型与交通领域知识的深度融合能力。

图10-4  DeepSeek-V3 对话界面(多轮对话+流式输出)

9.5 数据集样本示例

图10-5展示了数据集中某个样本的3张连续帧图像。这些图像来源于实际车载行车记录仪,从不同角度和时段记录了道路环境,为模型训练提供了丰富的视觉样本。图像分辨率为1280×720,涵盖城市道路、街道、十字路口等多种场景,其中既包含正常通行的无障碍场景,也包含施工占道、障碍物摆放等异常场景。

在数据预处理阶段,系统通过路径检查、PIL读取、尺寸归一化等操作,将原始图像转换为224×224的标准模型输入尺寸,并提取多维视觉特征用于模型训练。真实样本的展示有助于理解数据集的多样性和复杂性。

图10-5  数据集样本示例(同一地点的3个连续帧)

、AI使用说明

本作品在开发过程中使用了deepseek辅助完成,以下为详细的AI使用说明。

10.1 AI使用范围

Debug调试:使用AI定位和修复bug(如cv2中文路径问题、color_moments NaN问题、变量名拼写错误)。

API集成:使用AI辅助编写高德地图API封装类和DeepSeek API客户端。

代码优化:使用AI对代码进行精简、重构和风格统一。

10.2 AI使用说明

10.2.1 cv2.imread中文路径问题

问题:在Windows环境下,cv2.imread无法读取包含中文路径的图像文件,导致特征提取结果为空。

解决方案:AI建议使用PIL.Image.open+np.array()替代cv2.imread,PIL对中文路径支持良好。修改feature_extraction.py中的图像读取逻辑后,所有200张测试图像成功加载。这是AI在Debug中最有价值的辅助之一。

10.2.2 颜色矩偏度计算NaN问题

问题:np.mean((channel - mean) ** 3) ** (1/3)在值为负时产生NaN,因为Python的**运算符对负数开立方不适用(返回复数)。

解决方案:AI建议使用np.cbrt()替代** (1/3),cbrt能正确处理负数的立方根,消除了NaN问题。同时在模型训练流水线中增加NaN检测和清理。

十一、演示视频

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐