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 数据(包含每个目标的详细坐标和类别),方便前端在数据可视化模块中进行二次利用。

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.pyvllm.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 subprocess

async 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.js
const 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 venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
# 启动 FastAPI 服务 (默认 10077 端口)
python app.py

6.2 前端启动

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

7. 结语

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

联系方式

  • 微信公众号:DetectionHUb

Logo

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

更多推荐