logo
0
0
WeChat Login

YOLO11 AI Platform

企业级 AI 视觉推理平台,支持多模型并行推理、实时流处理、WebRTC SEI 解析

基于 YOLO11 的智能视觉分析平台,支持图片、视频和直播流的目标检测,以及多模型并行推理。

📚 文档导航

SEI 解析服务(DJI 无人机)⭐

其他文档

✨ 核心特性

🎯 多模型并行推理

  • 单个任务中运行多个算法模型
  • 混合使用不同算法框架(YOLO、Transformer、CNN等)
  • 运行时热更新模型参数
  • 动态添加/移除模型

📹 多源输入支持

  • 图片检测(单张/批量)
  • 视频文件分析
  • RTSP/RTMP 直播流实时检测
  • HTTP-FLV/WebRTC 播放支持

🚁 WebRTC SEI 解析(最新)⭐

  • 实时解析 WebRTC 流中的 SEI 数据
  • 支持 DJI 无人机 AI 检测结果(目标框、距离、GPS、云台姿态)
  • SSE 实时推送到前端
  • 数据库持久化任务状态
  • Stream 唯一性控制,智能任务复用
  • 详见:SEI 解析文档

🔄 实时推送

  • Server-Sent Events (SSE) 实时推送检测结果
  • 事件描述自动生成(中文)
  • 检测统计信息
  • Webhook 推送支持

🎨 前端功能

  • 实时视频播放与检测框叠加
  • 多算法结果筛选
  • 检测事件面板
  • 任务管理与监控
  • 模型参数热更新
  • SEI 调试器(WebRTC SEI 实时解析)⭐

🧠 模型训练

  • 自定义数据集训练
  • 增量训练支持
  • 训练实验管理
  • 性能指标追踪

🏗️ 技术架构

后端

  • 框架: FastAPI + Python 3.9+
  • 数据库: PostgreSQL 12+
  • AI引擎: YOLO11, Ultralytics
  • 异步处理: asyncio, threading
  • 实时推送: SSE (Server-Sent Events)

前端

  • 框架: Vue 3 + TypeScript
  • UI库: Element Plus
  • 视频播放: Video.js, flv.js
  • 实时通信: EventSource (SSE)

数据库

  • 11个核心表: 统一任务表、统一结果表设计
  • JSONB扩展: 灵活存储不同业务数据
  • 无外键约束: 代码层面关联,提高灵活性

📦 快速开始

🚀 GPU 服务器一键部署

如果你要在 GPU 服务器上部署,使用我们的一键部署脚本:

# 克隆项目 git clone <repository-url> cd yolo-platform # 运行 GPU 部署脚本 ./deploy/gpu-deploy.sh

详细说明请查看 GPU 部署指南

环境要求

  • Python 3.9+
  • Node.js 16+
  • PostgreSQL 12+
  • CUDA 11.8+ (GPU推理,可选)

安装步骤

1. 克隆项目

git clone <repository-url> cd yolo-platform

2. 后端安装

# 创建虚拟环境 python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 安装依赖 pip install -r requirements.txt

3. 数据库初始化

# 创建数据库 createdb yolo11_db # 方法1: 使用SQL脚本 psql -U your_user -d yolo11_db -f init_database.sql # 方法2: 使用Python脚本(推荐) python init_db.py

4. 前端安装

cd yolo-web npm install # 或 pnpm install

启动服务

启动后端

# 开发模式 uvicorn web.main:app --reload --host 0.0.0.0 --port 8000 # 生产模式 uvicorn web.main:app --host 0.0.0.0 --port 8000 --workers 4

启动前端

cd yolo-web # 开发模式 npm run dev # 构建生产版本 npm run build

访问 http://localhost:5173 查看应用。

📖 使用指南

创建多模型任务

// 前端API调用示例 await workflowApi.createMultiModelTask({ name: "监控任务-摄像头1", source_path: "rtsp://camera1/stream", vid_stride: 1, webhook_url: "http://your-server/webhook", // 可选 models: [ { model_name: "yolo11n.pt", conf_threshold: 0.25, iou_threshold: 0.45, color: "#FF6B6B" }, { model_name: "yolo11s.pt", conf_threshold: 0.3, iou_threshold: 0.5, color: "#4ECDC4" } ] })

热更新模型参数

// 更新模型参数(运行时生效) await workflowApi.updateModelParams(taskId, modelIndex, { conf_threshold: 0.35, iou_threshold: 0.5 }) // 添加新模型 await workflowApi.addModel(taskId, { model_name: "yolo11m.pt", conf_threshold: 0.3, iou_threshold: 0.45 }) // 移除模型 await workflowApi.removeModel(taskId, modelIndex)

SSE 实时推送

// 连接SSE接收检测结果 const eventSource = new EventSource(`/api/algorithm/tasks/${taskId}/sse`) eventSource.addEventListener('detection', (event) => { const data = JSON.parse(event.data) console.log('检测事件:', data.event_description) console.log('检测统计:', data.detection_summary_text) })

📁 项目结构

yolo-platform/ ├── web/ # 后端代码 │ ├── api/ # API路由 │ ├── core/ # 核心推理引擎 │ ├── models/ # 数据模型 │ ├── services/ # 业务服务 │ ├── utils/ # 工具函数 │ └── tests/ # 测试代码 ├── yolo-web/ # 前端代码 │ ├── src/ │ │ ├── api/ # API封装 │ │ ├── components/ # Vue组件 │ │ ├── views/ # 页面视图 │ │ └── utils/ # 工具函数 │ └── public/ # 静态资源 ├── scripts/ # 🔧 工具脚本 │ ├── test_drone_detection.py │ ├── train_drone_model.py │ ├── convert_visdrone_to_yolo.py │ ├── diagnose_latency.py │ └── debug/ # 调试脚本 ├── examples/ # 💡 示例代码 │ ├── object_deduplication_demo.py │ └── deepsort_integration_example.py ├── docs/ # 📚 项目文档 │ ├── README.md # 文档索引 │ ├── DEEPSORT_GUIDE.md # DeepSORT 指南 │ ├── DRONE_DETECTION_GUIDE.md │ ├── SIMPLE_TRAINING_GUIDE.md │ └── archive/ # 历史文档 ├── migrations/ # 数据库迁移 ├── data/ # 数据文件 ├── init_db.py # 数据库初始化脚本 ├── requirements.txt # Python依赖 └── config.yml # 配置文件

🚢 部署指南

腾讯云 CNB 自动化部署

已修复的问题

✅ 后端 Dockerfile 中的 libgl1-mesa-glx 已替换为 libgl1(解决构建错误)

仓库说明

前后端是两个独立的 Git 仓库,需要分别配置 CNB:

后端仓库(当前)

  • 配置文件: .cnb.yml
  • Dockerfile: Dockerfile
  • 镜像名: backend 或根据你的 CNB_REPO_SLUG_LOWERCASE 配置

前端仓库(yolo-web)

  • 配置文件: yolo-web/.cnb.yml
  • Dockerfile: yolo-web/Dockerfile
  • 镜像名: frontend 或根据你的 CNB_REPO_SLUG_LOWERCASE 配置

使用方法

1. 在各自的 CNB 项目中配置环境变量

CNB_DOCKER_REGISTRY=xxx-docker.pkg.coding.net CNB_TOKEN_USER_NAME=your-username CNB_TOKEN=your-token CNB_REPO_SLUG_LOWERCASE=project/backend # 后端 CNB_REPO_SLUG_LOWERCASE=project/frontend # 前端

2. 分别推送代码触发构建

# 后端 cd /path/to/backend git push origin master # 构建 latest 标签 git push origin develop # 构建 dev 标签 # 前端 cd /path/to/yolo-web git push origin master # 构建 latest 标签 git push origin develop # 构建 dev 标签

3. 拉取镜像部署

后端部署:

# 1. 复制环境变量配置 cp .env.example .env # 2. 编辑 .env 文件 nano .env # 修改: # DOCKER_REGISTRY=xxx-docker.pkg.coding.net/project/yolo11 # DATABASE_URL=mysql+pymysql://root:password@mysql-host:3306/yolo11 # REDIS_URL=redis://redis-host:6379/0 # MINIO_ENDPOINT=minio-host:9000 # 3. 登录镜像仓库 docker login xxx-docker.pkg.coding.net # 4. 启动后端 docker-compose -f docker-compose.backend.yml up -d # 5. 查看日志 docker-compose -f docker-compose.backend.yml logs -f

前端部署:

# 1. 配置 .env(同上) # 2. 登录镜像仓库 docker login xxx-docker.pkg.coding.net # 3. 启动前端 docker-compose -f docker-compose.frontend.yml up -d # 4. 查看日志 docker-compose -f docker-compose.frontend.yml logs -f

访问服务

外部 Nginx 配置

方式 1: 宝塔面板(推荐)

# 1. 复制配置文件 sudo cp nginx-bt-panel.conf /www/server/panel/vhost/nginx/yolo11.conf # 2. 编辑配置 sudo nano /www/server/panel/vhost/nginx/yolo11.conf # 修改 server_name 为你的域名或 IP # 3. 测试并重载 sudo nginx -t sudo nginx -s reload

或在宝塔面板中操作:

  1. 网站 → 添加站点
  2. 域名填写你的域名
  3. 点击站点设置 → 配置文件
  4. 替换为 nginx-bt-panel.conf 的内容

方式 2: 标准 Nginx

# 1. 复制配置示例 sudo cp nginx-external-config.example /etc/nginx/sites-available/yolo11 # 2. 编辑配置 sudo nano /etc/nginx/sites-available/yolo11 # 修改 server_name 为你的域名 # 3. 启用配置 sudo ln -s /etc/nginx/sites-available/yolo11 /etc/nginx/sites-enabled/ # 4. 测试并重载 sudo nginx -t sudo nginx -s reload

配置说明

  • 前端: proxy_pass http://127.0.0.1:80 → 前端容器
  • 后端: proxy_pass http://127.0.0.1:8000/api/ → 后端容器
  • SSE 支持: 必须设置 proxy_buffering off
  • 端口冲突: 如果 80 端口被占用,修改 docker-compose.frontend.yml 中的端口映射为 8080:80

常见问题

前端构建找不到 nginx.conf

错误: COPY nginx.conf /etc/nginx/conf.d/default.conf 失败

解决方案:

  1. 确认 nginx.confyolo-web/ 根目录
  2. 确认 .dockerignore 没有排除 nginx.conf
  3. 确认 .git 目录被正确排除

📚 文档

部署文档

核心文档

测试文档

🧪 测试

运行测试

# 运行所有测试 pytest # 运行特定测试 pytest web/tests/test_algorithm_executor.py # 运行属性测试 pytest web/tests/test_*_properties.py # 查看覆盖率 pytest --cov=web --cov-report=html

性能测试

# 运行性能测试 pytest web/tests/test_performance.py -v # 运行集成测试 pytest web/tests/test_integration_hot_update_sse_multi_algorithm.py -v

🚀 性能指标

推理性能

  • 单模型任务: FPS ≥ 25
  • 3模型任务: FPS ≥ 10
  • 5模型任务: FPS ≥ 8

响应时间

  • 热更新: < 1秒
  • SSE推送延迟: < 500ms
  • API响应: < 200ms

资源优化

  • 共享解码器: 多模型任务比多个单模型任务节省 30-40% CPU和内存
  • GPU利用率: 多模型并行推理提高GPU利用率

🔧 配置

环境变量

# 数据库配置 DATABASE_URL=postgresql://user:password@localhost/yolo11_db # 服务配置 API_HOST=0.0.0.0 API_PORT=8000 # GPU配置 CUDA_VISIBLE_DEVICES=0

配置文件

编辑 config.yml 配置项目参数:

# 模型配置 models: default_conf_threshold: 0.25 default_iou_threshold: 0.45 # 任务配置 tasks: max_concurrent_tasks: 10 default_vid_stride: 1 # SSE配置 sse: heartbeat_interval: 5 max_queue_size: 100

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License

📞 联系方式

  • 项目地址: [GitHub Repository]
  • 问题反馈: [Issues]
  • 文档: docs/

🎉 致谢


最后更新: 2025-12-22

About

No description, topics, or website provided.
Language
Python80.1%
Vue16.3%
JavaScript2.4%
Shell0.2%
Others1%