1. 项目概述:SpringBoot+Vue电商客流统计系统
这个基于SpringBoot和Vue的电商客流统计系统,是我去年为一家连锁零售客户开发的商业解决方案。系统通过计算机视觉技术实时统计店铺客流量,帮助商家分析顾客行为模式,优化店铺运营策略。整套系统采用前后端分离架构,后端使用SpringBoot提供RESTful API,前端采用Vue.js构建交互界面,数据存储使用MySQL+Redis组合方案。
提示:客流统计系统不同于简单的访问量统计,它需要处理实时视频流数据,对系统性能和稳定性要求较高
2. 技术架构设计
2.1 后端技术选型
选择SpringBoot 2.7作为后端框架主要基于以下考虑:
- 自动配置特性简化了视频处理组件的集成
- 内嵌Tomcat支持高并发请求处理
- 完善的监控端点便于系统运维
核心依赖包括:
<dependency> <groupId>org.opencv</groupId> <artifactId>opencv-java</artifactId> <version>4.5.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>2.2 前端技术方案
Vue 3组合式API更适合处理实时数据流展示:
- 使用WebSocket接收后端推送的客流数据
- ECharts实现热力图和时段分布图
- Element Plus组件库构建管理界面
关键实现代码:
// 实时客流数据显示组件 const count = ref(0) socket.on('customer_flow', data => { count.value = data.realTimeCount })3. 核心功能实现
3.1 视频流处理模块
采用OpenCV进行人脸检测和跟踪:
- 通过RTSP协议获取摄像头视频流
- 使用Haar级联分类器检测人脸
- 基于KCF算法实现多目标跟踪
- 应用匈牙利算法解决ID切换问题
// Java版人脸检测代码片段 Mat frame = new Mat(); VideoCapture capture = new VideoCapture(rtspUrl); while(capture.read(frame)){ CascadeClassifier faceDetector = new CascadeClassifier("haarcascade_frontalface_default.xml"); MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(frame, faceDetections); // 统计检测到的人脸数量 currentCount = faceDetections.toArray().length; }3.2 数据存储设计
采用两级存储策略:
- Redis存储实时统计数据(过期时间15分钟)
- MySQL存储历史聚合数据(按小时/天聚合)
表结构设计示例:
CREATE TABLE customer_flow ( id BIGINT PRIMARY KEY AUTO_INCREMENT, store_id VARCHAR(20) NOT NULL, count INT NOT NULL, record_time DATETIME NOT NULL, device_id VARCHAR(50) ) ENGINE=InnoDB;4. 系统部署与优化
4.1 性能调优方案
针对视频处理的高CPU消耗问题:
- 使用FFmpeg进行视频流转码和降分辨率
- 采用多线程处理,每个摄像头独立线程
- 设置检测间隔(默认500ms)
- 使用JNI调用C++实现的优化算法
4.2 容器化部署
Docker部署方案要点:
- 每个微服务独立容器
- 使用Nginx负载均衡
- 配置资源限制防止OOM
- 日志统一收集到ELK
示例Dockerfile:
FROM openjdk:11-jre COPY target/customer-flow.jar /app.jar ENTRYPOINT ["java","-Xmx1024m","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]5. 常见问题解决方案
5.1 视频流断连处理
实现自动重连机制:
- 心跳检测(每30秒)
- 指数退避重试策略
- 异常状态通知
- 备用流地址切换
5.2 计数误差修正
采用以下策略提高准确性:
- 设置最小停留时间阈值(默认3秒)
- 排除店员等固定人员
- 使用区域检测限定统计范围
- 定期人工校准
6. 扩展功能实现
6.1 热力图生成
基于位置数据的实现方案:
- 使用OpenCV的cv2.applyColorMap
- 前端通过Canvas渲染
- 数据聚合粒度可配置
- 支持时间范围选择
6.2 移动端适配
针对门店经理的移动端功能:
- 微信小程序实时通知
- 简单的数据看板
- 异常客流预警
- 交接班数据对比
这套系统在实际运行中达到了95%以上的计数准确率,帮助客户优化了排班方案和促销策略。最大的收获是认识到边缘计算设备的重要性,后续考虑将部分检测逻辑下放到摄像头端处理