本文将详细介绍如何使用 Electron + FastAPI + YOLO 技术栈,构建一个功能完善的目标检测桌面应用。涵盖项目架构设计、核心功能实现、UI 设计理念以及实际开发中的经验总结。


前言

在人工智能蓬勃发展的今天,目标检测作为计算机视觉领域的核心任务之一,已经广泛应用于自动驾驶、安防监控、工业质检、医疗影像等众多领域。然而,大多数目标检测项目都以 Python 脚本或 Web 应用的形式存在,对于普通用户来说使用门槛较高。如何将强大的 AI 能力包装成一个开箱即用的桌面应用,让非技术人员也能轻松使用?这正是本项目要解决的问题。本文将带你深入了解我开发的目标检测系统——一个集成了 YOLO 目标检测、大语言模型对话、系统监控等功能的现代化桌面应用。


项目简介

这是什么?

目标检测系统是一款基于 Electron 构建的跨平台桌面应用,后端采用 FastAPI 框架,集成 Ultralytics YOLO 模型进行目标检测。用户只需简单的拖拽上传,即可对图片和视频进行智能分析,自动识别画面中的物体并标注。

为什么要做这个项目?

在我的学习和工作过程中,经常需要使用目标检测技术进行数据分析。但现有的解决方案存在以下痛点:

  1. 命令行操作繁琐:每次检测都需要编写 Python 代码

  2. 缺乏可视化界面:检测结果不够直观

  3. 功能分散:图片检测、视频检测、模型管理等功能分散在不同工具中

  4. 部署困难:非技术人员难以独立使用

因此,我决定开发一个一站式的目标检测平台,将所有功能整合到一个美观易用的桌面应用中。

项目亮点

特性 描述
图像目标检测 支持批量上传,一键检测,实时显示检测框和类别标签
视频目标检测 逐帧分析,自动生成带标注的检测结果视频
AI 对话 集成大语言模型(Qwen、DeepSeek),支持智能问答
多模态聊天 支持"图片+文字"混合输入,实现视觉问答
系统监控 实时显示 CPU、内存、磁盘使用率
现代化 UI 深色主题 + 玻璃拟态设计,专业科技感
模型管理 支持上传、切换不同的 YOLO 模型

系统架构

整体架构设计

项目采用经典的前后端分离架构:

┌─────────────────────────────────────────────────────────────┐
│                      Electron Desktop App                    │
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    Renderer Process                      ││
│  │  ┌───────────┐  ┌───────────┐  ┌───────────────────┐   ││
│  │  │ index.html│  │ styles.css│  │    renderer.js     │   ││
│  │  │  (布局)   │  │  (样式)   │  │   (业务逻辑)       │   ││
│  │  └───────────┘  └───────────┘  └───────────────────┘   ││
│  └─────────────────────────────────────────────────────────┘│
│                           │ HTTP API                         │
│                           ▼                                  │
│  ┌─────────────────────────────────────────────────────────┐│
│  │                    Backend Service                       ││
│  │  ┌───────────┐  ┌───────────┐  ┌───────────────────┐   ││
│  │  │  FastAPI  │  │   YOLO    │  │   LLM / VLLM      │   ││
│  │  │  (路由)   │  │  (检测)   │  │   (AI 对话)       │   ││
│  │  └───────────┘  └───────────┘  └───────────────────┘   ││
│  └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘

技术选型

层级 技术 选择理由
桌面框架 Electron 跨平台、前端技术栈、成熟稳定
前端 原生 HTML/CSS/JS 轻量级、无框架依赖、加载快速
后端框架 FastAPI 高性能、自动生成文档、异步支持
目标检测 Ultralytics YOLO 精度高、推理快、易于集成
图表 ECharts 功能强大、配置灵活、效果美观
LLM 接口 SiliconFlow API 支持多种大模型、价格实惠

为什么选择 Electron?

在技术选型时,我也考虑过其他方案:

方案 优点 缺点
PyQt/PySide Python 原生,与后端无缝衔接 UI 开发效率低,样式定制困难
Tauri 体积小,性能好 Rust 学习曲线陡峭,生态不够成熟
Flutter Desktop 跨平台一致性好 Dart 语言,与 Python 后端对接麻烦
Electron 前端技术栈,开发效率高,生态丰富 体积较大,内存占用高

最终选择 Electron 的核心原因:

  1. 开发效率:HTML/CSS/JS 是我最熟悉的技术栈

  2. UI 表现力:CSS 可以实现任何设计效果

  3. 生态系统:npm 上有无数现成的库可以使用

  4. 跨平台:一套代码,Windows/Mac/Linux 三端运行


UI 设计理念

设计灵感

本项目的 UI 设计灵感来源于现代科技产品的设计趋势:

  1. 深色主题:护眼、专业、科技感

  2. 玻璃拟态 (Glassmorphism):毛玻璃效果,层次分明

  3. 微交互动画:悬停效果、过渡动画,提升用户体验

  4. 扁平化设计:简洁、高效、信息清晰

配色方案

我采用了以蓝色为主的配色方案:

颜色 色值 用途
🔵 主色 #3b82f6 按钮、链接、强调元素
⚫ 背景深 #0f1115 主背景
⬛ 背景浅 #181b21 卡片、面板
⚪ 文字主 #f8fafc 标题、重要文字
🔘 文字次 #94a3b8 正文、说明
🟢 成功 #10b981 完成、正确状态
🔴 危险 #ef4444 删除、错误状态

布局设计

采用经典的侧边栏 + 主内容区布局:

┌─────────────┬────────────────────────────────────────┐
│             │  Header (面包屑 + 系统时间)             │
│   Sidebar   ├────────────────────────────────────────┤
│   (260px)   │                                        │
│             │                                        │
│  ┌───────┐  │            Main Viewport               │
│  │ Logo  │  │                                        │
│  ├───────┤  │         (动态内容区域)                  │
│  │ 菜单1 │  │                                        │
│  │ 菜单2 │  │                                        │
│  │ 菜单3 │  │                                        │
│  │ ...   │  │                                        │
│  └───────┘  │                                        │
└─────────────┴────────────────────────────────────────┘

这种布局的优势:

  • 导航清晰,用户随时知道自己在哪

  • 内容区域最大化,充分利用屏幕空间

  • 符合用户习惯,学习成本低


核心功能实现

1. 图像目标检测

功能流程
用户上传图片 ──► 保存到服务器 ──► YOLO 模型推理 ──► 返回检测结果 ──► 前端绘制检测框

2. 视频目标检测

处理流程
读取视频 ──► 逐帧提取 ──► YOLO 检测 ──► 绘制检测框 ──► 写入新视频 ──► FFmpeg 转码

3. 系统监控

使用 psutil库获取系统资源信息,ECharts 可视化展示。

4. 大语言模型对话

集成 SiliconFlow API,支持多种大模型:

模型 特点
Qwen 2.5 Coder 32B 编程能力强
Qwen 2.5 72B 综合能力强
DeepSeek V3 性价比高
DeepSeek R1 推理能力强

5. 多模态聊天

支持图片 + 文字混合输入,实现视觉问答功能


项目结构

electron-app2/
├── 📄 package.json          # 项目配置
├── 📄 main.js               # Electron 主进程
├── 📄 preload.js            # 预加载脚本
├── 📄 index.html            # 主界面 HTML
├── 📄 styles.css            # 全局样式 (558行)
├── 📄 renderer.js           # 渲染进程逻辑 (1342行)
│
├── 📁 backend/              # 后端服务
│   ├── 📄 main.py           # FastAPI 入口
│   ├── 📄 schemas.py        # 通用响应模型
│   ├── 📄 requirements.txt  # Python 依赖
│   ├── 📄 yolo11n.pt        # YOLO 模型文件
│   │
│   ├── 📁 routers/          # API 路由模块
│   │   ├── 📄 images.py     # 图片管理 (9个接口)
│   │   ├── 📄 videos.py     # 视频管理 (14个接口)
│   │   ├── 📄 logs.py       # 日志管理 (5个接口)
│   │   ├── 📄 systems.py    # 系统监控 (1个接口)
│   │   ├── 📄 models.py     # 模型管理 (8个接口)
│   │   ├── 📄 llm.py        # 大语言模型 (2个接口)
│   │   └── 📄 vllm.py       # 多模态模型 (2个接口)
│   │
│   ├── 📁 images/           # 图片存储
│   │   ├── 📁 upload/       # 上传的原始图片
│   │   └── 📁 detected/     # 检测结果图片
│   │
│   ├── 📁 videos/           # 视频存储
│   │   ├── 📁 upload/       # 上传的原始视频
│   │   └── 📁 detected/     # 检测结果视频
│   │
│   ├── 📁 models/           # 模型文件存储
│   └── 📁 logs/             # 日志文件存储
│
└── 📁 images/               # 静态资源

快速开始

环境要求

  • Node.js 18+

  • Python 3.8+

  • FFmpeg(可选,用于视频转码)

安装步骤

# 1. 打开项目
cd electron-app2
​
# 2. 安装前端依赖
npm install
​
# 3. 安装后端依赖
cd backend
pip install -r requirements.txt
​
# 4. 启动后端服务
python main.py
​
# 5. 启动前端应用(新终端)
cd ..
npm run dev

访问地址


开发经验总结

1. 视频播放问题

问题:OpenCV 生成的 mp4v 编码视频在浏览器中无法播放

解决方案:使用 FFmpeg 转码为 H.264 格式

subprocess.run([
    'ffmpeg', '-y', '-i', temp_path,
    '-c:v', 'libx264', '-pix_fmt', 'yuv420p',
    '-movflags', '+faststart', output_path
])
2. Electron 安全性

问题:渲染进程无法访问 Node.js API

解决方案:使用 contextBridge 安全暴露必要 API

// preload.js
contextBridge.exposeInMainWorld('electronAPI', {
    openExternal: (url) => shell.openExternal(url)
});
3. CORS 跨域

问题:Electron 渲染进程无法访问本地后端 API

解决方案:FastAPI 配置 CORS 中间件

app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"]
)

性能优化

  1. 延迟加载模型:YOLO 模型在首次检测时才加载

  2. 视频分辨率限制:输出限制为 720p

  3. 定时器管理:视图切换时清理定时器

  4. 事件委托:使用事件委托减少监听器数量


技术指标

指标 数值
前端代码行数 ~2000 行
后端代码行数 ~1500 行
API 接口数量 41 个
功能模块数量 10 个
支持的图片格式 PNG, JPG, JPEG, GIF, BMP
支持的视频格式 MP4, AVI, MOV, WMV, FLV, MKV
图片大小限制 10 MB
视频大小限制 500 MB

未来规划

  • 支持实时摄像头检测
  • 支持更多目标检测模型(DETR、RT-DETR 等)
  • 多语言支持
  • 云端部署版本

联系方式

  • 微信公众号:DetectionHub

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐