基于YOLOv8/YOLOv10/YOLOv11/YOLOv12与SpringBoot的行人车辆检测系统(DeepSeek智能分析+web交互界面+前后端分离+YOLO数据

基于YOLOv8/YOLOv10/YOLOv11/YOLOv12与SpringBoot的行人车辆检测系统(DeepSeek智能分析+web交互界面+前后端分离+YOLO数据

一、 摘要

摘要: 随着城市化进程的加速和智能交通系统的普及,高效、准确的行人与车辆目标检测成为智慧城市、自动驾驶及公共安全等领域的关键技术。传统视频监控方法依赖于人工筛查,存在实时性差、易漏检和成本高昂等问题。本研究设计并实现了一个基于深度学习与Web技术的实时行人车辆检测与分析系统。系统核心集成当前最前沿的YOLOv8、YOLOv10、YOLOv11及YOLOv12四种目标检测算法,构建了一套可灵活切换、性能优异的检测引擎,专门针对“行人”和“车辆”两类目标进行精准识别与定位。系统采用前后端分离架构,后端基于SpringBoot框架构建,提供了RESTful API接口;前端提供直观的交互界面,实现了用户管理、多模态检测(图像、视频、实时摄像头)与全流程数据追溯。创新性地集成DeepSeek大型语言模型,可为检测场景提供智能语义分析与报告生成,提升了系统的决策支持能力。系统将全部检测记录与用户数据持久化存储于MySQL数据库,并通过可视化图表展示检测统计结果。经测试,系统在5607张图像数据集上表现稳定,实现了从算法应用到业务管理的完整闭环,为相关领域提供了可部署、易扩展的一体化解决方案。

关键词: 目标检测;YOLO系列;行人车辆检测;SpringBoot;DeepSeek;前后端分离;智能交通


目录

一、 摘要

二、 引言

1. 研究背景与意义

2. 国内外研究现状

3. 本文研究内容与贡献

详细功能展示视频

三、 系统核心特性概述

功能模块

登录注册模块

可视化模块

图像检测模块

视频检测模块

实时检测模块

图片识别记录管理

视频识别记录管理

摄像头识别记录管理

用户管理模块

数据管理模块(MySQL表设计)

模型训练结果

YOLO概述

YOLOv8

YOLOv10

YOLOv11

YOLOv12

主要改进

前端代码展示

后端代码展示

 详细功能展示视频

 项目安装教程


二、 引言

1. 研究背景与意义

在当今社会,交通管理与公共安全面临着日益严峻的挑战。实时、精准地感知道路环境中的行人及车辆,是实现智能交通信号控制、自动驾驶辅助系统、智能安防监控及人流车流统计分析等高级应用的基础。然而,传统的人工监控方式已无法满足7x24小时不间断、大范围、高精度的监控需求。随着深度学习技术的迅猛发展,尤其是以YOLO(You Only Look Once)系列为代表的单阶段目标检测算法,因其在速度和精度上的卓越平衡,已成为解决实时视觉检测任务的首选方案。将这类先进的算法封装为稳定、易用的Web服务,赋能一线管理人员,具有重要的现实意义和应用价值。

2. 国内外研究现状

近年来,目标检测领域成果丰硕。从YOLOv1到最新的YOLOv12,算法通过引入更高效的网络骨干(如CSPNet、RepVGG)、改进的特征金字塔(如PANet、BiFPN)以及更优的损失函数(如CIoU、DFL),不断刷新着检测精度与速度的极限。这些进展为构建高性能的实时检测系统提供了坚实的技术基础。与此同时,企业级应用开发趋势趋向于前后端分离的微服务架构,SpringBoot以其快速构建、配置简便和生态繁荣的特点,成为后端服务开发的主流框架。将深度学习模型服务化,并与业务系统深度集成,已成为AI落地的重要模式。此外,多模态大模型(如DeepSeek)在图像理解与文本生成方面的强大能力,为增强传统视觉系统的“认知”和“解释”能力开辟了新的路径,使系统不仅能“看到”,更能“理解”和“描述”场景。

3. 本文研究内容与贡献

针对现有行人车辆检测系统在模型多样性、系统集成度和智能交互性方面的不足,本文研发了一个集“前沿算法集成、多模态智能分析、精细化业务管理”于一体的综合性Web检测平台。本文的主要贡献如下:

  1. 构建了专用的行人车辆检测数据集: 收集并精细标注了包含“行人(person)”和“车辆(car)”两类目标的图像共计5607张,划分为训练集(4485张)和验证集(1122张),为模型的训练与性能评估提供了可靠的数据支持。
  2. 实现了多版本YOLO模型的统一集成与便捷切换: 系统同时集成了YOLOv8、YOLOv10、YOLOv11及YOLOv12模型。用户可根据实际场景对实时性及准确性的不同需求,在前端界面一键切换模型,实现了算法性能的横向对比与按需应用。
  3. 创新性地引入DeepSeek模型进行场景智能分析: 在完成基础的视觉检测后,系统可调用DeepSeek API,对检测结果进行深入的文本分析,生成包含场景描述、潜在风险提示或统计分析的自然语言报告,极大地提升了系统的可解释性和交互智能。
  4. 开发了功能完备、高可用的全栈Web应用系统: 采用前后端分离架构,基于SpringBoot+MySQL+Vue.js(示例)技术栈,实现了从用户认证授权、多源数据检测(图片上传、视频解析、摄像头实时流)、检测记录全生命周期管理、数据可视化看板到系统管理员后台的完整业务流程。系统设计注重鲁棒性、安全性和可扩展性。

详细功能展示视频

基于深度学习的行人车辆检测系统(DeepSeek智能分析+YOLOv8/YOLOv10/YOLOv11/YOLOv12+最新web界面 +前后端分离)_哔哩哔哩_bilibili

基于深度学习的行人车辆检测系统(DeepSeek智能分析+YOLOv8/YOLOv10/YOLOv11/YOLOv12+最新web界面 +前后端分离)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1n1kpBuEYk/?spm_id_from=333.999.0.0&vd_source=549d0b4e2b8999929a61a037fcce3b0f

https://www.bilibili.com/video/BV1n1kpBuEYk/

三、 系统核心特性概述

功能模块


✅ 用户登录注册:支持密码检测,保存到MySQL数据库。

✅ 支持四种YOLO模型切换,YOLOv8、YOLOv10、YOLOv11、YOLOv12。

✅ 信息可视化,数据可视化。

✅ 图片检测支持AI分析功能,deepseek

✅ 支持图像检测、视频检测和摄像头实时检测,检测结果保存到MySQL数据库。

✅ 图片识别记录管理、视频识别记录管理和摄像头识别记录管理。

✅ 用户管理模块,管理员可以对用户进行增删改查。

✅ 个人中心,可以修改自己的信息,密码姓名头像等等。
 

登录注册模块

可视化模块

图像检测模块

  • YOLO模型集成 (v8/v10/v11/v12)
  • DeepSeek多模态分析
  • 支持格式:JPG/PNG/MP4/RTSP

视频检测模块

实时检测模块

图片识别记录管理

视频识别记录管理

摄像头识别记录管理

用户管理模块

数据管理模块(MySQL表设计)

  • users - 用户信息表
  • imgrecords- 图片检测记录表
  • videorecords- 视频检测记录表
  • camerarecords- 摄像头检测记录表

模型训练结果

#coding:utf-8 #根据实际情况更换模型 # yolon.yaml (nano):轻量化模型,适合嵌入式设备,速度快但精度略低。 # yolos.yaml (small):小模型,适合实时任务。 # yolom.yaml (medium):中等大小模型,兼顾速度和精度。 # yolob.yaml (base):基本版模型,适合大部分应用场景。 # yolol.yaml (large):大型模型,适合对精度要求高的任务。 from ultralytics import YOLO model_path = 'pt/yolo12s.pt' data_path = 'data.yaml' if __name__ == '__main__': model = YOLO(model_path) results = model.train(data=data_path, epochs=500, batch=64, device='0', workers=0, project='runs', name='exp', ) 

YOLO概述

YOLOv8

YOLOv8 由 Ultralytics 于 2023 年 1 月 10 日发布,在准确性和速度方面提供了尖端性能。基于先前 YOLO 版本的进步,YOLOv8 引入了新功能和优化,使其成为各种应用中目标检测任务的理想选择。

YOLOv8 的主要特性

  • 高级骨干和颈部架构: YOLOv8 采用最先进的骨干和颈部架构,从而改进了特征提取和目标检测性能。
  • 无锚点分离式 Ultralytics Head: YOLOv8 采用无锚点分离式 Ultralytics head,与基于锚点的方法相比,这有助于提高准确性并提高检测效率。
  • 优化的准确性-速度权衡: YOLOv8 专注于在准确性和速度之间保持最佳平衡,适用于各种应用领域中的实时对象检测任务。
  • 丰富的预训练模型: YOLOv8提供了一系列预训练模型,以满足各种任务和性能要求,使您更容易为特定用例找到合适的模型。

YOLOv10

YOLOv10 由 清华大学研究人员基于 Ultralytics Python构建,引入了一种新的实时目标检测方法,解决了先前 YOLO 版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制 (NMS) 并优化各种模型组件,YOLOv10 以显著降低的计算开销实现了最先进的性能。大量实验表明,它在多个模型尺度上都具有卓越的精度-延迟权衡。

概述

实时目标检测旨在以低延迟准确预测图像中的对象类别和位置。YOLO 系列因其在性能和效率之间的平衡而一直处于这项研究的前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入用于无 NMS 训练的一致双重分配和整体效率-准确性驱动的模型设计策略来解决这些问题。

架构

YOLOv10 的架构建立在之前 YOLO 模型优势的基础上,同时引入了几项关键创新。该模型架构由以下组件组成:

  1.  骨干网络:负责特征提取,YOLOv10 中的骨干网络使用增强版的 CSPNet (Cross Stage Partial Network),以改善梯度流并减少计算冗余。
  2. Neck:Neck 的设计目的是聚合来自不同尺度的特征,并将它们传递到 Head。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。
  3. One-to-Many Head:在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. 一对一头部:在推理时为每个对象生成一个最佳预测,以消除对NMS的需求,从而降低延迟并提高效率。

主要功能

  1. 免NMS训练:利用一致的双重分配来消除对NMS的需求,从而降低推理延迟。
  2. 整体模型设计:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类 Head、空间通道解耦下采样和秩引导块设计。
  3. 增强的模型功能: 结合了大内核卷积和部分自注意力模块,以提高性能,而无需显着的计算成本。

YOLOv11

YOLO11 是 Ultralytics YOLO 系列实时目标检测器的最新迭代版本,它以前沿的精度、速度和效率重新定义了可能性。YOLO11 在之前 YOLO 版本的显著进步基础上,在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务的多功能选择。

主要功能

  • 增强的特征提取: YOLO11 采用改进的 backbone 和 neck 架构,从而增强了特征提取能力,以实现更精确的目标检测和复杂的任务性能。
  • 优化效率和速度: YOLO11 引入了改进的架构设计和优化的训练流程,从而提供更快的处理速度,并在精度和性能之间保持最佳平衡。
  • 更高精度,更少参数: 随着模型设计的进步,YOLO11m 在 COCO 数据集上实现了更高的 平均精度均值(mAP),同时比 YOLOv8m 少用 22% 的参数,在不牺牲精度的情况下提高了计算效率。
  • 跨环境的适应性: YOLO11 可以无缝部署在各种环境中,包括边缘设备、云平台和支持 NVIDIA GPU 的系统,从而确保最大的灵活性。
  • 广泛支持的任务范围: 无论是目标检测、实例分割、图像分类、姿势估计还是旋转框检测 (OBB),YOLO11 都旨在满足各种计算机视觉挑战。

Ultralytics YOLO11 在其前代产品的基础上进行了多项重大改进。主要改进包括:

  • 增强的特征提取: YOLO11 采用了改进的骨干网络和颈部架构,增强了特征提取能力,从而实现更精确的目标检测。
  • 优化的效率和速度: 改进的架构设计和优化的训练流程提供了更快的处理速度,同时保持了准确性和性能之间的平衡。
  • 更高精度,更少参数: YOLO11m 在 COCO 数据集上实现了更高的平均 精度均值 (mAP),同时比 YOLOv8m 少用 22% 的参数,在不牺牲精度的情况下提高了计算效率。
  • 跨环境的适应性: YOLO11 可以部署在各种环境中,包括边缘设备、云平台和支持 NVIDIA GPU 的系统。
  • 广泛支持的任务范围: YOLO11 支持各种计算机视觉任务,例如目标检测、实例分割、图像分类、姿势估计和旋转框检测 (OBB)。

YOLOv12

YOLO12引入了一种以注意力为中心的架构,它不同于之前YOLO模型中使用的传统基于CNN的方法,但仍保持了许多应用所需的实时推理速度。该模型通过在注意力机制和整体网络架构方面的新颖方法创新,实现了最先进的目标检测精度,同时保持了实时性能。尽管有这些优势,YOLO12仍然是一个社区驱动的版本,由于其沉重的注意力模块,可能表现出训练不稳定、内存消耗增加和CPU吞吐量较慢的问题,因此Ultralytics仍然建议将YOLO11用于大多数生产工作负载。

主要功能

  • 区域注意力机制: 一种新的自注意力方法,可以有效地处理大型感受野。它将 特征图 分成 l 个大小相等的区域(默认为 4 个),水平或垂直,避免复杂的运算并保持较大的有效感受野。与标准自注意力相比,这大大降低了计算成本。
  • 残差高效层聚合网络(R-ELAN):一种基于 ELAN 的改进的特征聚合模块,旨在解决优化挑战,尤其是在更大规模的以注意力为中心的模型中。R-ELAN 引入:
    • 具有缩放的块级残差连接(类似于层缩放)。
    • 一种重新设计的特征聚合方法,创建了一个类似瓶颈的结构。
  • 优化的注意力机制架构:YOLO12 精简了标准注意力机制,以提高效率并与 YOLO 框架兼容。这包括:
    • 使用 FlashAttention 来最大限度地减少内存访问开销。
    • 移除位置编码,以获得更简洁、更快速的模型。
    • 调整 MLP 比率(从典型的 4 调整到 1.2 或 2),以更好地平衡注意力和前馈层之间的计算。
    • 减少堆叠块的深度以改进优化。
    • 利用卷积运算(在适当的情况下)以提高其计算效率。
    • 在注意力机制中添加一个7x7可分离卷积(“位置感知器”),以隐式地编码位置信息。
  • 全面的任务支持: YOLO12 支持一系列核心计算机视觉任务:目标检测、实例分割、图像分类、姿势估计和旋转框检测 (OBB)。
  • 增强的效率: 与许多先前的模型相比,以更少的参数实现了更高的准确率,从而证明了速度和准确率之间更好的平衡。
  • 灵活部署: 专为跨各种平台部署而设计,从边缘设备到云基础设施。

主要改进

  1. 增强的 特征提取:
    • 区域注意力: 有效处理大型感受野,降低计算成本。
    • 优化平衡: 改进了注意力和前馈网络计算之间的平衡。
    • R-ELAN:使用 R-ELAN 架构增强特征聚合。
  2. 优化创新:
    • 残差连接:引入具有缩放的残差连接以稳定训练,尤其是在较大的模型中。
    • 改进的特征集成:在 R-ELAN 中实现了一种改进的特征集成方法。
    • FlashAttention: 整合 FlashAttention 以减少内存访问开销。
  3. 架构效率:
    • 减少参数:与之前的许多模型相比,在保持或提高准确性的同时,实现了更低的参数计数。
    • 简化的注意力机制:使用简化的注意力实现,避免了位置编码。
    • 优化的 MLP 比率:调整 MLP 比率以更有效地分配计算资源。

前端代码展示

登录界面部分代码展示

<template> <div> <!-- 交通粒子背景 --> <div> <!-- 交通粒子 --> <div> <div v-for="n in 30" :key="`particle-${n}`" :style="getParticleStyle(n)"> <div></div> </div> </div> <!-- 扫描波纹 --> <div> <div v-for="n in 8" :key="`ripple-${n}`" :style="getRippleStyle(n)"></div> </div> <!-- 检测点网格 --> <div> <div v-for="n in 25" :key="`node-${n}`" :style="getNodeStyle(n)"> <div></div> </div> </div> <!-- 交通符号云 --> <div> <div v-for="n in 12" :key="`icon-${n}`" :style="getIconStyle(n)"> {{ getRandomIcon() }} </div> </div> <!-- 激光扫描线 --> <div> <div v-for="n in 6" :key="`laser-${n}`" :style="getLaserStyle(n)"> <div></div> </div> </div> </div> <!-- 登录主容器 --> <div> <!-- 检测界面容器 --> <div> <div> <div></div> <div></div> </div> <!-- 系统标志 --> <div> <div> <div> <div> <div></div> <div></div> <div></div> <div></div> </div> <div></div> </div> <div></div> </div> <div> <h1> <span>Traffic</span> <span>Detection</span> </h1> <p>智能交通检测分析系统</p> <p>智慧城市 · 交通智能实验室</p> </div> </div> <!-- 登录面板 --> <div> <div> <div></div> <h2>系统访问</h2> <div></div> </div> <div> <el-form :model="ruleForm" :rules="registerRules" ref="ruleFormRef"> <!-- 用户名输入 --> <el-form-item prop="username"> <div> <div> <div></div> </div> <el-input v-model="ruleForm.username" placeholder="请输入系统访问ID" size="large" @focus="onInputFocus" @blur="onInputBlur" /> <div></div> </div> <div>交通检测员身份验证</div> </el-form-item> <!-- 密码输入 --> <el-form-item prop="password"> <div> <div> <div></div> </div> <el-input v-model="ruleForm.password" type="password" placeholder="请输入访问密钥" show-password size="large" @focus="onInputFocus" @blur="onInputBlur" /> <div></div> </div> <div>用户密码验证...</div> </el-form-item> <!-- 登录按钮 --> <el-form-item> <div> <el-button type="primary" @click="submitForm(ruleFormRef)" @mouseenter="onBtnHover" @mouseleave="onBtnLeave" > <div> <div> <span>启动交通检测</span> <span>SYSTEM SCAN</span> </div> <div> <div></div> <div></div> <div></div> </div> </div> <div></div> <div> <div v-for="n in 3" :key="`btn-particle-${n}`"></div> </div> </el-button> <div> <div> <div></div> <span>检测系统就绪</span> </div> <div> <span>v3.5.0 • 深度学习检测模式</span> </div> </div> </div> </el-form-item> </el-form> <!-- 辅助选项 --> <div> <router-link to="/register"> <div> <div></div> </div> <span>注册新账户</span> <div></div> </router-link> </div> </div> </div> <!-- 系统信息 --> <div> <div> <div> <div></div> <div> <span></span> <span></span> </div> </div> <div> <div></div> <div> <span>检测速度</span> <span>5ms</span> </div> </div> <div> <div></div> <div> <span>目标类别</span> <span>2类</span> </div> </div> </div> </div> </div> </div> <!-- 背景装饰元素 --> <div> <!-- 交通数据流 --> <div> <div v-for="n in 8" :key="`flow-${n}`" :style="getStreamStyle(n)"> <span v-for="i in 15" :key="`data-${n}-${i}`"> {{ ['🚗','🚕','🚌','🚲','🚶','🚦','📷','🎯'][Math.floor(Math.random() * 8)] }} </span> </div> </div> <!-- 浮动检测标签 --> <div> <div v-for="n in 10" :key="`label-${n}`" :style="getLabelStyle(n)"> {{ ['车辆','行人','自行车','公交车','红绿灯','摄像头','检测区','报警区'][Math.floor(Math.random() * 8)] }} </div> </div> </div> </div> </template> <script lang="ts" setup> import { reactive, ref, computed, onMounted } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { ElMessage } from 'element-plus'; import { useI18n } from 'vue-i18n'; import Cookies from 'js-cookie'; import { storeToRefs } from 'pinia'; import { useThemeConfig } from '/@/stores/themeConfig'; import { initFrontEndControlRoutes } from '/@/router/frontEnd'; import { initBackEndControlRoutes } from '/@/router/backEnd'; import { Session } from '/@/utils/storage'; import { formatAxis } from '/@/utils/formatTime'; import { NextLoading } from '/@/utils/loading'; import type { FormInstance, FormRules } from 'element-plus'; import request from '/@/utils/request'; // 定义变量内容 const { t } = useI18n(); const storesThemeConfig = useThemeConfig(); const { themeConfig } = storeToRefs(storesThemeConfig); const route = useRoute(); const router = useRouter(); const formSize = ref('default'); const ruleFormRef = ref<FormInstance>(); // 定义表单数据 const ruleForm = reactive({ username: '', password: '', }); // 校验规则 const registerRules = reactive<FormRules>({ username: [ { required: true, message: '请输入系统访问ID', trigger: 'blur' }, { min: 3, max: 20, message: '长度在3-20个字符', trigger: 'blur' }, ], password: [ { required: true, message: '请输入访问密钥', trigger: 'blur' }, { min: 5, max: 30, message: '长度在5-30个字符', trigger: 'blur' }, ], }); // 粒子样式 - 交通主题颜色 const getParticleStyle = (index: number) => { const left = Math.random() * 100; const top = Math.random() * 100; const size = 4 + Math.random() * 8; const duration = 3 + Math.random() * 4; const delay = Math.random() * 2; const colorIndex = Math.floor(Math.random() * 3); const colors = ['#00B4D8', '#0077B6', '#90E0EF']; // 蓝色系 return { left: `${left}%`, top: `${top}%`, width: `${size}px`, height: `${size}px`, backgroundColor: colors[colorIndex], animationDuration: `${duration}s`, animationDelay: `${delay}s` }; }; // 波纹样式 const getRippleStyle = (index: number) => { const left = Math.random() * 100; const top = Math.random() * 100; const size = 100 + Math.random() * 300; const duration = 4 + Math.random() * 6; const delay = Math.random() * 3; return { left: `${left}%`, top: `${top}%`, width: `${size}px`, height: `${size}px`, animationDuration: `${duration}s`, animationDelay: `${delay}s` }; }; // 节点样式 const getNodeStyle = (index: number) => { const left = Math.random() * 100; const top = Math.random() * 100; const size = 6 + Math.random() * 12; const duration = 2 + Math.random() * 3; const delay = Math.random() * 2; return { left: `${left}%`, top: `${top}%`, width: `${size}px`, height: `${size}px`, animationDuration: `${duration}s`, animationDelay: `${delay}s` }; }; // 交通图标样式 const getIconStyle = (index: number) => { const left = Math.random() * 100; const top = Math.random() * 100; const size = 24 + Math.random() * 36; const duration = 15 + Math.random() * 20; const delay = Math.random() * 5; const rotation = Math.random() * 360; return { left: `${left}%`, top: `${top}%`, fontSize: `${size}px`, animationDuration: `${duration}s`, animationDelay: `${delay}s`, transform: `rotate(${rotation}deg)` }; }; // 获取随机交通图标 const getRandomIcon = () => { const icons = ['🚗', '🚕', '🚌', '🚲', '🚶', '🚦', '📷', '🎯', '🚨', '🛣️']; return icons[Math.floor(Math.random() * icons.length)]; }; // 激光样式 const getLaserStyle = (index: number) => { const left = Math.random() * 100; const height = 200 + Math.random() * 400; const duration = 3 + Math.random() * 5; const delay = Math.random() * 2; return { left: `${left}%`, height: `${height}px`, animationDuration: `${duration}s`, animationDelay: `${delay}s` }; }; // 数据流样式 const getStreamStyle = (index: number) => { const left = Math.random() * 100; const duration = 8 + Math.random() * 12; const delay = Math.random() * 5; return { left: `${left}%`, animationDuration: `${duration}s`, animationDelay: `${delay}s` }; }; // 标签样式 const getLabelStyle = (index: number) => { const left = Math.random() * 100; const top = Math.random() * 100; const duration = 10 + Math.random() * 15; const delay = Math.random() * 4; const opacity = 0.1 + Math.random() * 0.3; return { left: `${left}%`, top: `${top}%`, animationDuration: `${duration}s`, animationDelay: `${delay}s`, opacity: opacity }; }; // 事件处理 const onInputFocus = (event: Event) => { const target = event.target as HTMLElement; target.parentElement?.classList.add('focused'); }; const onInputBlur = (event: Event) => { const target = event.target as HTMLElement; target.parentElement?.classList.remove('focused'); }; const onBtnHover = (event: Event) => { const btn = event.currentTarget as HTMLElement; btn.classList.add('hover'); }; const onBtnLeave = (event: Event) => { const btn = event.currentTarget as HTMLElement; btn.classList.remove('hover'); }; // 原有的登录逻辑保持不变 const currentTime = computed(() => { return formatAxis(new Date()); }); const onSignIn = async () => { Session.set('token', Math.random().toString(36).substr(0)); Cookies.set('userName', ruleForm.username); if (!themeConfig.value.isRequestRoutes) { const isNoPower = await initFrontEndControlRoutes(); signInSuccess(isNoPower); } else { const isNoPower = await initBackEndControlRoutes(); signInSuccess(isNoPower); } }; const signInSuccess = (isNoPower: boolean | undefined) => { if (isNoPower) { ElMessage.warning('抱歉,您没有登录权限'); Session.clear(); } else { let currentTimeInfo = currentTime.value; if (route.query?.redirect) { router.push({ path: <string>route.query?.redirect, query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', }); } else { router.push('/'); } const signInText = t('message.signInText'); ElMessage.success(`${currentTimeInfo},${signInText}`); NextLoading.start(); } }; const submitForm = (formEl: FormInstance | undefined) => { if (!formEl) return; formEl.validate((valid) => { if (valid) { request.post('/api/user/login', ruleForm).then((res) => { console.log(res); if (res.code == 0) { Cookies.set('role', res.data.role); onSignIn(); } else { ElMessage({ type: 'error', message: res.msg, }); } }); } else { console.log('error submit!'); return false; } }); }; // 初始化 onMounted(() => { // 可以在这里添加初始化代码 }); </script> <style scoped> .login-container { min-height: 100vh; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #0a1929 0%, #112240 30%, #0d2847 70%, #0a1929 100%); padding: 20px; position: relative; overflow: hidden; font-family: 'Inter', 'Segoe UI', system-ui, sans-serif; } /* 交通粒子背景 */ .traffic-background { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 1; overflow: hidden; } /* 交通粒子 */ .traffic-particles { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .particle { position: absolute; border-radius: 50%; animation: particleFloat ease-in-out infinite alternate; opacity: 0.6; } .particle-glow { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 200%; height: 200%; border-radius: 50%; background: inherit; filter: blur(8px); opacity: 0.3; } @keyframes particleFloat { 0% { transform: translateY(0) rotate(0deg); } 100% { transform: translateY(-20px) rotate(180deg); } } /* 扫描波纹 */ .scan-ripples { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .ripple { position: absolute; border-radius: 50%; border: 1px solid rgba(0, 180, 216, 0.3); animation: rippleExpand linear infinite; transform: translate(-50%, -50%); } @keyframes rippleExpand { 0% { transform: translate(-50%, -50%) scale(0.1); opacity: 0.8; } 100% { transform: translate(-50%, -50%) scale(2); opacity: 0; } } /* 检测点网格 */ .detection-grid { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .grid-node { position: absolute; border-radius: 50%; background: rgba(0, 119, 182, 0.4); animation: nodePulse ease-in-out infinite alternate; } .node-pulse { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 100%; height: 100%; border-radius: 50%; background: inherit; animation: pulseWave 2s ease-in-out infinite; } @keyframes nodePulse { 0% { opacity: 0.3; transform: scale(1); } 100% { opacity: 0.8; transform: scale(1.2); } } @keyframes pulseWave { 0%, 100% { opacity: 0.5; transform: translate(-50%, -50%) scale(1); } 50% { opacity: 0.2; transform: translate(-50%, -50%) scale(2); } } /* 交通符号云 */ .traffic-cloud { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .traffic-icon { position: absolute; animation: iconFloat ease-in-out infinite alternate; opacity: 0.2; } @keyframes iconFloat { 0% { transform: translateY(0) rotate(0deg); } 100% { transform: translateY(-40px) rotate(10deg); } } /* 激光扫描线 */ .laser-scan { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .laser-line { position: absolute; width: 100%; height: 200px; animation: laserScan linear infinite; opacity: 0.1; } .laser-path { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(180deg, transparent, rgba(0, 180, 216, 0.6), transparent ); clip-path: polygon(0% 100%, 25% 50%, 50% 75%, 75% 25%, 100% 50%, 100% 100%); } @keyframes laserScan { 0% { top: -200px; opacity: 0; } 10% { opacity: 0.1; } 90% { opacity: 0.1; } 100% { top: 100%; opacity: 0; } } /* 主登录容器 */ .login-main { position: relative; z-index: 2; width: 100%; max-width: 480px; margin: 0 auto; } /* 检测界面容器 */ .detection-container { position: relative; background: rgba(10, 25, 41, 0.8); border-radius: 24px; padding: 40px; backdrop-filter: blur(20px); border: 1px solid rgba(0, 180, 216, 0.3); box-shadow: 0 25px 50px rgba(0, 0, 0, 0.5), 0 0 100px rgba(0, 180, 216, 0.2), inset 0 0 20px rgba(0, 180, 216, 0.1); animation: detectionAppear 1s ease-out; overflow: hidden; } @keyframes detectionAppear { from { opacity: 0; transform: translateY(40px) scale(0.95); } to { opacity: 1; transform: translateY(0) scale(1); } } .detection-effect { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; } .scan-pulse { position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(0, 180, 216, 0.1), transparent ); animation: scanSweep 6s linear infinite; } @keyframes scanSweep { 0% { left: -100%; } 100% { left: 100%; } } .detection-connections { position: absolute; top: 0; left: 0; width: 100%; height: 2px; background: linear-gradient(90deg, transparent, rgba(0, 119, 182, 0.5), transparent ); box-shadow: 0 0 10px rgba(0, 119, 182, 0.3); animation: detectionScan 3s linear infinite; } @keyframes detectionScan { 0% { top: 0; opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { top: 100%; opacity: 0; } } /* 系统品牌 */ .system-brand { text-align: center; margin-bottom: 40px; } 

后端代码展示

 详细功能展示视频

基于深度学习的行人车辆检测系统(DeepSeek智能分析+YOLOv8/YOLOv10/YOLOv11/YOLOv12+最新web界面 +前后端分离)_哔哩哔哩_bilibili

基于深度学习的行人车辆检测系统(DeepSeek智能分析+YOLOv8/YOLOv10/YOLOv11/YOLOv12+最新web界面 +前后端分离)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1n1kpBuEYk/?spm_id_from=333.999.0.0&vd_source=549d0b4e2b8999929a61a037fcce3b0f

https://www.bilibili.com/video/BV1n1kpBuEYk/

 项目安装教程

https://www.bilibili.com/video/BV1YLsXzJE2X/?spm_id_from=333.1387.homepage.video_card.click

Read more

AI 直接生成前端代码:我的软件原型设计流,从此告别重复画图

AI 直接生成前端代码:我的软件原型设计流,从此告别重复画图

近年来,AI 辅助开发越来越成熟,尤其是在快速原型设计方面。今天分享一下我如何借助 Cursor、Trace solo、ChatGPT、Qoder 等 AI 工具,高效完成软件原型的自动绘制与代码生成。 📌 核心流程三步走 1️⃣ 用 AI 输出需求文档(非技术描述) 首先,我会让 AI 根据产品思路或功能描述,生成一份清晰、无技术细节的需求文档。这一步不写代码,只聚焦逻辑与用户流程。 2️⃣ AI 生成 HTML 原型代码 基于上一步的需求文档,直接让 AI 生成对应的 HTML 代码,快速搭建出可交互的前端原型。支持实时预览,直观看到界面效果。 3️⃣ 反复微调,直至满意 生成的原型往往需要多次调整。通过自然语言描述修改方向,AI 可快速迭代代码,直至达到想要的交互与视觉效果。

By Ne0inhk
AI Skills:前端新的效率神器

AI Skills:前端新的效率神器

近来,AI 领域有个火爆的话题:Skills。 Github 上被疯狂 star 的仓库,很多都是和 skills 有关的。 有的仓库仅仅上线三个月就获得了快 50K 的 star,Skills 的火热可见一斑。 不管是大模型,还是 Cursor、Codex、Claude、Trae、Copilot 等编程 IDE 都在争先支持 Skills。 围绕 Skills,它们在做的就是为了完成一件事情:技能是通过学习和反复练习获得的,而 Skills 是把经验和最佳实践沉淀为 AI 能力,将“知道”转化为“做到”的本领。 详解什么是 Skills 要说清楚什么是 Skills,先来了解一下关于 AI 的 2

By Ne0inhk

前端知识点梳理,前端面试复习

一:从输入 URL 到页面渲染是一个经典的综合性考题 1.URL 的标准组成部分 一个完整的 URL 结构如下: scheme://host:port/path?query#fragment URI 用字符串标识某一互联网资源,而URL 表示资源的地点(互 联网上所处的位置)。可见URL是URI 的子集。 URI 和 URL 的区别? * URI (Uniform Resource Identifier) 是统一资源标识符,是一个大概念。 * URL (Uniform Resource Locator) 是统一资源定位符,它不仅标识资源,还提供了找到资源的方式(比如协议)。可以理解为 URL 是 URI 的子集。 为什么 URL 中有些字符会被转义(

By Ne0inhk