基于 Spring Boot + YOLOv8 的智能灯杆边缘视频分析系统,实现设备管理、传感器监控、行人检测、报警联动与远程控制。
- 设备管理 - 灯杆 CRUD、在线状态监控、视频流配置
- 传感器监测 - 温湿度、光照、电压电流实时采集与历史曲线查询
- AI 行人检测 - YOLOv8 实时识别行人,支持截图与结果回放
- 智能报警 - 传感器阈值设置,超限自动告警与推送
- 远程控制 - HTTP → MQTT 下发 LED 开关指令,WebSocket 实时心跳
- 数据可视化 - 传感器曲线、报警记录、推理记录多维查询
- API 文档 - Springdoc 自动生成,启动后访问
/doc.html
| 优化项 | 优化前 | 优化后 | 手段 |
|---|---|---|---|
| 单帧识别耗时 | ~750ms | ~190ms | 线程池 + CompletableFuture + JPEG压缩 |
| 历史查询响应 | ~300ms | ~90ms | 复合索引 + Redis 缓存 |
| 设备状态同步 | 不稳定 | 99%+ | WebSocket + Redis 版本号心跳 |
| 传感器上报吞吐 | 同步写库 | 异步削峰 | RabbitMQ + 死信队列 |
| 缓存可用性 | 无防护 | 穿透/击穿/雪崩全防护 | 空值缓存 + SETNX 互斥锁 + TTL 随机偏移 |
| AI 推理韧性 | 无保护 | 熔断+重试+降级 | Resilience4j @Retry + @CircuitBreaker |
| 视频帧阻塞 | 无超时 | 10s 超时熔断 | CompletableFuture.get(timeout) |
| 层级 | 技术 |
|---|---|
| 后端框架 | Spring Boot 2.7 |
| ORM | MyBatis-Plus 3.5 |
| 数据库 | MySQL 8.0 |
| 缓存 | Redis |
| 消息队列 | RabbitMQ(传感器削峰) |
| 设备指令 | MQTT (Spring Integration + Paho) |
| AI 推理 | YOLOv8 (Python/Flask) |
| 容错框架 | Resilience4j(重试+熔断+降级) |
| 视频处理 | JavaCV / FFmpeg |
| 实时通信 | WebSocket |
| API 文档 | Springdoc OpenAPI |
| 可观测性 | Spring Boot Actuator + Prometheus |
| 网关 | Nginx(反向代理 + 限流) |
| 容器化 | Docker + Docker Compose(7 容器编排) |
git clone <repository-url>
cd EdgeVideoAnalysis
# 一键启动全部 7 个服务
docker-compose up -d服务启动后访问:
| 服务 | 地址 |
|---|---|
| 后端 API(Nginx 网关) | http://localhost |
| 后端 API(直连) | http://localhost:8080 |
| API 文档 | http://localhost:8080/doc.html |
| YOLOv8 推理 | http://localhost:5000 |
| RabbitMQ 管理后台 | http://localhost:15672 |
| Prometheus 指标 | http://localhost:8080/actuator/prometheus |
# 1. 启动 MySQL + Redis
# 2. 初始化数据库
mysql -uroot -p123456 -e "CREATE DATABASE IF NOT EXISTS edge_video_analysis DEFAULT CHARACTER SET utf8mb4"
mysql -uroot -p123456 edge_video_analysis < src/main/resources/db/init.sql
# 3. 启动 YOLOv8 推理服务
cd yolov8-service
pip install -r requirements.txt
python app.py
# 4. 编译启动后端
cd ..
mvn clean package -DskipTests
java -jar target/edge-video-analysis-1.0.0.jarRabbitMQ / MQTT / Nginx 非必须——代码含降级兜底,MQ 不可用时自动走同步处理。
EdgeVideoAnalysis/
├── src/main/java/com/edgevideoanalysis/
│ ├── device/ # 设备管理
│ ├── sensor/ # 传感器数据 + MQ Producer/Consumer
│ ├── alarm/ # 报警规则与记录
│ ├── video/ # 视频流处理(线程池+异步+超时)
│ ├── ai/ # YOLOv8 推理集成(R4j熔断重试)
│ ├── websocket/ # 设备心跳与状态推送
│ ├── control/ # 远程控制 + MQTT 指令下发
│ └── common/ # 公共配置、异常处理、统一响应
├── yolov8-service/ # YOLOv8 推理服务(Python/Flask)
├── nginx.conf # Nginx 反向代理 + API 限流配置
├── docker-compose.yml # 7 服务编排
└── pom.xml
启动后访问 http://localhost:8080/doc.html,Springdoc 自动生成全部接口文档,支持在线调试。
| 模块 | 方法 | 路径 | 说明 |
|---|---|---|---|
| 健康检查 | GET | /api/health |
服务健康检查 |
| 设备 | GET | /api/lamp/list |
获取灯杆列表 |
| 传感器 | POST | /api/sensor/report |
上报传感器数据(MQ 异步) |
| 传感器 | GET | /api/sensor/curve |
获取曲线数据 |
| 视频 | GET | /api/video/frame/{lampId} |
获取当前帧(10s超时) |
| AI | POST | /api/ai/inference |
执行行人检测(熔断保护) |
| 控制 | POST | /api/control/led |
MQTT 下发 LED 开关 |
| WebSocket | ws | /ws/device |
设备心跳连接 |
| Prometheus | GET | /actuator/prometheus |
监控指标 |
详细接口定义见 API接口文档.md。
- 荣获 全国大学生物联网设计大赛湖南赛区一等奖
- 稳定支持 4+ 路摄像头并发处理
- 完整实现设备接入、AI 推理调度、告警联动、远程控制五大模块
- 56 个纯 Mockito 单元测试覆盖核心业务链路
- 缓存三板斧 / 熔断降级 / MQ异步削峰 / 视频帧超时控制 全链路容错
MIT License
CoderDongHuang