前端定时器(基于 Electron + FastAPI 的目标检测系统)

前端定时器(基于 Electron + FastAPI 的目标检测系统)
基于 Electron + FastAPI 的目标检测系统

1. 项目愿景与定位

本项目旨在打造一个一站式 AI 桌面工作站。它不仅是一个目标检测工具,更是一个集成了资源管理、硬件监控、大模型交互和算法管理的综合性平台。通过本系统,开发者和用户可以极低成本地部署并运行 YOLO 视觉算法,同时享受到大模型驱动的语义理解能力,全程无需复杂的环境配置。


2. 深度技术架构

2.1 前端:Electron + Vue 3 + Element Plus

  • 跨平台容器: 使用 Electron 封装,确保在 Windows、macOS 和 Linux 上的一致性体验。
  • 动态展示: 利用 Vue 3 的组合式 API (Composition API) 处理复杂的异步状态映射,如上传进度、实时监控曲线等。
  • 交互设计: 引入 Element Plus 并深度定制 CSS 样式,严格遵循 Material Design 的层级与动效规范。

2.2 后端:FastAPI + Python 3.10+

  • 异步高性能: FastAPI 的高性能异步特性确保了在处理高吞吐量图片上传和长视频检测时,主进程不会阻塞。
  • 算法引擎: 集成 ultralytics 库,支持从 YOLOv8 到 YOLOv11 的无缝切换。
  • 多媒体处理: 采用 OpenCV 进行逐帧推理,并结合 FFmpeg 自动进行硬件加速编码(H.264),确保视频结果在所有浏览器和 Electron 容器中均能实现流式顺畅播放。

3. 核心功能模块详解

3.1 工业级图像目标检测

  • 实现逻辑: 后端通过 PIL 预处理图片,调用 model.predict() 进行推理,获取 Bounding Box 坐标、类别 ID 和置信度。
  • 批量处理: 支持同时选择多张图片进行并行上传,系统会自动排队处理。
  • 可视化反馈: 检测完成后,系统不仅返回带框的结果图,还会返回结构化 JSON 数据(包含每个目标的详细坐标和类别),方便前端在数据可视化模块中进行二次利用。

前端定时器(基于 Electron + FastAPI 的目标检测系统)

3.2 动态视频流分析

针对视频处理,系统实现了复杂的处理管道 (Pipeline)

  1. 文件分片上传: 确保大容量视频(最高支持 500MB)稳定传输。
  2. 逐帧推理循环: 利用 cv2.VideoCapture 逐帧提取画面,YOLO 实时标记。
  3. 结果再编码: 针对视频编码兼容性问题,系统会自动检测环境下是否安装 FFmpeg。如果存在,则自动执行 libx264 编码转换,并将 movflags 设置为 +faststart,使视频支持“边下边看”预览。

3.3 数据可视化大屏

  • 实时数据湖: 汇聚所有检测任务的结果,自动计算 Top 10 出现频率的目标类别。
  • 趋势分析: 通过时间序列图表,展示系统处理任务的吞吐量。
  • 统计图表: 使用 Canvas/SVG 混合渲染,生成高颜值的饼图和柱状图,直观展现数据分布。

3.4 实时系统监控

  • 底层监控: 利用 Python 的 psutil 库实时探测系统硬件状态。
  • 动态曲线: 前端利用定时器(Polling)每秒获取一次 CPU 使用率、剩余内存及网络带宽,通过 ECharts 或类似方案绘制平滑过渡的动态波形图。

3.5 智能对话(LLM & VLLM)

  • 多模型支持: 后端路由(llm.py 与 vllm.py)对接了主流的大模型接口(支持流式输出),实现了 DeepSeek、Qwen 等多种顶级模型的统一调用。
  • 多模态增强: 在 VLLM 界面中,用户可以上传一张图片,并询问:“这张图中发生了什么?”或者“图中检测到的物体有什么安全隐患?”模型将结合图像特征与文本提示词给出深度的语义回复。


4. 关键实现代码

4.1 多模态接口:VLLM 消息格式转换

多模态模型要求特定的消息结构(包含 text 和 image_url),我们通过 Python 的 Pydantic 模型进行了标准化封装:

# backend/vllm.py def convert_messages(messages: List[VLLMMessage]) -> List[dict]:    """将前端简单消息对象转换为主流 API 支持的多模态复合格式"""    result = []    for msg in messages:        if isinstance(msg.content, str):            result.append({"role": msg.role, "content": msg.content})        else:            content = []            for part in msg.content:                if part.type == "text":                    content.append({"type": "text", "text": part.text})                elif part.type == "image_url":                    # 支持 base64 或 静态资源 URL                    content.append({"type": "image_url", "image_url": {"url": part.image_url.url}})            result.append({"role": msg.role, "content": content})    return result

4.2 视频处理与 FFmpeg 兼容性转换

# backend/videos.py 核心逻辑片段import subprocessasync def process_video(input_path, output_path):    # 第一阶段:YOLO 推理并使用 OpenCV 保存临时视频    # ... 推理逻辑 ...        # 第二阶段:为了确保浏览器兼容性,调用 FFmpeg 强制重编码为 H.264    cmd = [        'ffmpeg', '-y', '-i', temp_path,        '-c:v', 'libx264', '-preset', 'fast',         '-crf', '23', '-movflags', '+faststart',        output_path    ]    subprocess.run(cmd, capture_output=True, timeout=300)

4.3 前端实时监控状态同步

前端采用 ref 响应式状态管理,每隔 2 秒自动同步底层硬件负载,并实时更新数据大屏:

// renderer.jsconst PageManager = {  // ...   async fetchSystemStatus() {    try {      const response = await fetch(`${API_BASE}/api/systems/status`);      const { data } = await response.json();            // 更新响应式 UI (基于 Vue 3 或 纯 JS 操作 DOM)      document.querySelector('#cpu-usage').textContent = `${data.cpu.percent}%`;      document.querySelector('#mem-usage').textContent = `${data.memory.percent}%`;            // 同步到 ECharts 实例      updateStatsChart(data.cpu.percent, data.memory.percent);    } catch (e) {      console.error("同步失败", e);    }  }}setInterval(() => PageManager.fetchSystemStatus(), 2000);

5. 设计美学:Material Design 指南

本项目的 UI 并非简单的控件堆砌,而是构建了一个完整的设计系统

  • Elevation 层级: 背景(0dp)、资源卡片(2dp)、悬浮操作按钮(6dp)、对话框(24dp)。通过不同的阴影扩散程度定义空间感。
  • 色彩心理学: 主色调采用深邃紫(Indigo)搭配明亮的青色(Cyan)作为强调色,营造科技感的同时不失稳重。
  • 响应式布局: 侧边栏可收缩,资源网格会根据窗口宽度自动调整列数,完美适配 1080P 及 4K 屏幕。

6. 如何开始使用

6.1 后端环境配置

cd backend# 创建虚拟环境并安装依赖python -m venv venvsource venv/bin/activate  # Windows: venv\Scripts\activatepip install -r requirements.txt# 启动 FastAPI 服务 (默认 10077 端口)python app.py

6.2 前端启动

# 安装依赖npm install# 开发模式运行 (启动 Electron)npm run dev

7. 结语

这是一个使用Electron(前端框架)和FastAPI(后端服务)实现 的目标检测系统。

联系方式

  • 微信公众号:DetectionHub

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读