基于YOLO和大语言模型的交通标识智能识别系统(项目+数据集+模型)

作品简介

🚦 基于YOLO和大语言模型的交通标识智能识别系统 (Traffic Sign Recognition System)

基于 YOLO 和 LLaVA 大模型的智能交通标识检测与分析平台

� 项目简介 (Introduction)

本项目是一个先进的交通标识识别系统,旨在提供高精度的交通标志检测和深度的场景理解能力。系统结合了 YOLO 的实时目标检测能力和 LLaVA (Large Language-and-Vision Assistant) 多模态大语言模型的语义理解能力。

通过友好的 Gradio Web 界面,用户可以轻松进行单张图片识别、批量数据处理以及实时摄像头检测。系统还内置了模型训练模块,通过界面即可启动模型的微调训练。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

✨ 项目特点 (Features)

  • 🎯 高精度识别: 采用 YOLO 算法,支持多种交通标识(限速、禁行、指示、警告等)的实时检测。
  • 🧠 深度智能分析: 集成 LLaVA 多模态大模型,不仅能"看到"标识,还能理解标识的含义、位置及周边环境,生成中文分析报告。
  • 💻 全功能 Web 界面: 基于 Gradio 构建的现代 UI,通过浏览器即可完成所有操作。
  • 🎞️ 多种检测模式:
  • 单图分析: 详情扫描,支持生成 HTML 格式的专业检测报告。
  • 批量处理: 支持多文件上传,自动打包结果并生成统计 CSV。
  • 实时监测: 调用本地摄像头进行实时的交通标识捕捉。
  • ⚙️ 在线训练: 内置训练画板,可调整 Epoch、Batch Size 等参数,一键启动模型微调。
  • 📊 历史记录管理: 自动保存检测历史,支持数据导出和统计看板。

�️ 安装方式 (Installation)

1. 环境准备

  • Python 3.8 或更高版本
  • CUDA 支持 (推荐用于 GPU 加速)
  • Ollama (如果需要使用 LLaVA 深度分析功能)

2. 克隆项目 & 安装依赖

pip install -r requirements.txt

3. 配置 LLaVA (可选)

如果您启用了深度分析功能,请确保本地安装并启动了 Ollama,并拉取了 llava 模型:

# 安装 Ollama 后运行
ollama serve
# 在另一个终端运行
ollama pull llava

🚀 使用方法 (Usage)

启动系统

在项目根目录下运行以下命令启动 Web 界面:

python run_web_advanced.py

启动后,浏览器访问 http://localhost:7860 即可使用。

⚙️ GPU 与 CPU 配置

无需修改代码,系统会自动检测 GPU。您也可以在 config.yaml 中强制指定设备:

使用 GPU (默认推荐):

yolov8:
  train:
    device: "0"  # 使用第一块 GPU

使用 CPU (无显卡环境):

yolov8:
  train:
    device: "cpu"

📂 目录结构 (Directory Structure)

TSR/
├── config.yaml                 # 系统总配置文件 (YOLO, LLaVA, Web)
├── requirements.txt            # 项目依赖列表
├── README.md                   # 项目说明文档
├── tsr_data.yaml               # YOLO 数据集配置文件
├── yolo11n.pt / yolov8n.pt     # 预训练权重文件
├── src/                        # 源代码目录
│   ├── web_interface_advanced.py  # Web 界面主程序
│   ├── yolo_detector.py           # YOLO 检测器核心封装
│   ├── traffic_sign_detection_system.py # 系统业务逻辑层
│   ├── history_manager.py         # 历史记录管理
│   └── convert_tsr_to_yolo.py     # 数据集转换工具
├── data/                       # 数据存放目录 (上传的图片/生成的报告)
├── runs/                       # 训练和检测结果输出目录
├── models/                     # 模型保存目录
└── logs/                       # 运行日志

🔧 配置说明 (Configuration)

项目的主要配置位于 config.yaml 文件中:

  • yolov8: 配置模型大小 (nsmlx)、训练参数 (epochs, batch_size) 和推理阈值。
  • llava: 配置 Ollama 的地址 (默认 http://localhost:11434)、模型名称和 Prompt 提示词模板。
  • web: 配置 Gradio 服务的端口和主机地址。
  • system: 配置输出和日志路径。

📊 数据集说明 (Dataset)

本项目使用 TSRD (Chinese Traffic Sign Recognition Database) 格式的数据集进行训练,并已转换为标准的 YOLO 格式。数据集共包含 58 个类别的中国交通标志。

📁 目录结构

data/
├── images/
│   ├── train/  # 训练集图片
│   └── val/    # 验证集图片
└── labels/
    ├── train/  # 训练集标签 (YOLO格式 txt)
    └── val/    # 验证集标签 (YOLO格式 txt)

🏷️ 类别详情 (Classes)

本系统支持识别以下 58 种交通标识:

👉 点击展开查看完整类别列表 (Click to expand)

ID名称 (Name)ID名称 (Name)

0限速 5km/h29应当鸣笛1限速 15km/h30非机动车行驶2限速 30km/h31掉头3限速 40km/h32路面双向通行4限速 50km/h33注意信号灯标志5限速 60km/h34注意危险6限速 70km/h35注意行人7限速 80km/h36注意非机动车8禁止左转或直行37注意儿童9禁止右转或直行38向右急转弯10禁止直行39向左急转弯11禁止左转40左侧变窄12禁止向左和向右转41下陡坡13禁止右转42慢行14禁止超车43左侧交叉路口15禁止掉头44十字交叉口16禁止机动车通行45村庄17禁止鸣笛46反向弯道18最低限速4047铁路道口19最低限速5048施工路段20直行或右转49连续弯道21直行50路面不平22左转51前方施工23左转或右转52减速让行24右转53停车让行25左侧行驶54封闭道路26右侧行驶55禁止通行27环形岛56注意让行28机动车行驶57检查

在 tsr_data.yaml 配置文件中定义了详细的路径和类别名称。

💻 核心代码 (Core Code)

检测器加载与推理 (src/yolo_detector.py)

def predict(self, image_path: str, conf: float = 0.25) -> Tuple[list, np.ndarray]:
    # 加载模型
    if self.model is None:
        self.reload_model()
    
    # 执行推理
    results = self.model.predict(
        source=image_path,
        conf=conf,
        save=False
    )
    
    # 结果可视化绘制...
    return results, annotated_img

Web 界面交互 (src/web_interface_advanced.py)

def detect_image(self, image, conf, use_llava):
    # 保存临时文件
    # ...
    # 调用检测系统
    plot_img, detections, report, _, _ = self.system.detect_image(temp_path, conf=conf, use_llava=use_llava)
    
    # 生成统计 HTML
    if len(detections) > 0:
        stat = f"
Traffic Sign Detected: {len(detections)}
"
return display_img, report, stat

🧠 自适应阈值检测 (src/traffic_sign_detection_system.py)

系统针对稀有类别(如施工、检查等)采用了自适应阈值策略,以提高召回率:

# --- Adaptive Thresholding Logic ---
# 如果是稀有类别,接受较低的置信度 (>= 0.05)
# 如果是常见类别,执行严格的用户设定阈值 'conf'
is_rare = cls_id in self.RARE_CLASSES

if is_rare:
    if prob < 0.05: continue # Absolute minimum
else:
    if prob < conf: continue # Enforce standard threshold

💾 历史记录数据库管理 (src/history_manager.py)

使用 SQLite 自动记录每一次检测结果:

def _init_database(self):
    conn = sqlite3.connect(str(self.db_path))
    cursor = conn.cursor()
    
    # 创建检测历史表
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS detection_history (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            timestamp TEXT NOT NULL,
            task_type TEXT NOT NULL,
            source_path TEXT NOT NULL,
            num_defects INTEGER DEFAULT 0,
            use_llava BOOLEAN DEFAULT 0,
            result_path TEXT,
            notes TEXT,
            created_at TEXT DEFAULT CURRENT_TIMESTAMP
        )
    ''')


创作时间: