Skip to content

51hhh/nanodet_volleyball

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NanoDet Volleyball 排球专用检测系统

License Language Platform

基于 NanoDet-Plus 轻量级检测模型与 OpenVINO 推理引擎,专为 排球单目标检测 优化的实时视觉系统。采用自定义多因子 NMS 策略,通过终端标准输出打印球心坐标,可配合重定向或管道与下位机系统联动。

项目定位:本项目是排球机器人系统的上位机检测模块之一。与 Nanodet_OpenVINO(可视化调试版)共享核心检测代码,区别在于本项目摄像头模式关闭了窗口显示,改为输出球心坐标。如需功能更完整的上位机方案(串口通信、JSON 配置),推荐使用 yolov8_volleyball

排球机器人系统全景

仓库 角色 说明
yolov8_volleyball 上位机(推荐) YOLOv8+NanoDet 双引擎,Boost.Asio 串口通信
nanodet_volleyball(本项目) 上位机 NanoDet 专用版,终端坐标输出
Nanodet_OpenVINO 上位机(调试用) NanoDet 可视化调试版本
RM-C-board-volleyball 下位机 STM32F407 麦克纳姆轮底盘控制

特性

  • NanoDet-Plus 轻量级模型,排球单类别检测
  • 自定义多因子 NMS:形状评分 x 距离惩罚 x 尺寸惩罚
  • OpenVINO 推理引擎加速,支持 INT8 / FP16 / FP32 多精度
  • 卡尔曼滤波目标追踪,轨迹历史记录
  • 海康工业相机 PIMPL 封装(MvCameraControl SDK)
  • 摄像头模式下通过 printf 输出球心像素坐标到终端
  • 4 种运行模式:图像 / 摄像头 / 视频 / 基准测试
  • 视频模式支持空格暂停、逐帧分析

项目结构

nanodet_volleyball/
├── include/
│   └── Nanodet.h              # NanoDet 类定义(单类别:排球)
├── src/
│   ├── Nanodet.cpp            # 推理实现:自定义多因子NMS + 追踪
│   └── main.cpp               # 主程序:检测 + 球心坐标输出
├── camera/
│   ├── hikvision_wrapper.hpp  # 海康相机 PIMPL 接口
│   └── hikvision_wrapper.cpp  # 海康相机实现
├── struct/
│   └── common_struct.hpp      # 公共数据结构
├── test/
│   ├── nanodet_IR.xml         # OpenVINO IR 模型
│   ├── nanodet_IR.bin         # 模型权重
│   ├── nanodet.onnx           # ONNX 模型
│   ├── main_onnx.py           # Python ONNX 测试
│   ├── main_openvion.py       # Python OpenVINO 测试
│   ├── 排球.mp4               # 排球测试视频
│   └── ...                    # 测试媒体文件
├── CMakeLists.txt             # CMake 构建配置
└── run.sh                     # 一键编译并启动脚本

环境要求

依赖 版本要求 安装方式
Intel OpenVINO >= 2022.1 官方安装指南
OpenCV >= 4.0 sudo apt install libopencv-dev
海康 MVS SDK 最新版 海康机器人官网,安装到 /opt/MVS/
CMake >= 3.10 sudo apt install cmake
GCC >= 7.0 C++17 支持

快速开始

1. 克隆仓库

git clone https://github.com/51hhh/nanodet_volleyball.git
cd nanodet_volleyball

2. 环境准备

# 设置 OpenVINO 环境变量(每次编译/运行前需要,或写入 ~/.bashrc)
source /opt/intel/openvino/setupvars.sh

3. 编译

mkdir -p build && cd build
cmake ..
make -j$(nproc)

4. 运行

# 海康摄像头实时检测(输出球心坐标到终端)
./nanodet_openvino 1 0

# 视频文件检测(带可视化窗口,空格暂停,其他键逐帧)
./nanodet_openvino 2 ../test/排球.mp4

# 图像检测
./nanodet_openvino 0 ../test/rc.jpg

# 性能基准测试(1000 次推理)
./nanodet_openvino 3 0

注:run.sh 可一键编译并以海康相机模式启动(mkdir build && cmake && make && ./build/nanodet_openvino 1 0)。

运行模式

模式 参数 说明
0 图像路径 单张图像检测,显示结果窗口
1 摄像头 ID 海康工业相机实时检测,终端输出球心坐标(无窗口显示)
2 视频路径 视频逐帧检测,空格暂停/继续,其他键逐帧,ESC 退出
3 0 1000 次推理性能基准测试

坐标输出格式

摄像头模式(mode=1)下,每帧检测到排球时输出球心坐标到标准输出:

Box center: (320.50, 240.75)

注:这是 printf 标准输出,不是硬件串口通信。如需真正的串口通信以对接下位机,请使用 yolov8_volleyball,它实现了 Boost.Asio 串口发送。

技术细节

单目标最优选择策略(多因子加权)

区别于传统多框 NMS 抑制流程,本项目针对排球单目标场景,采用多因子加权评分选出唯一最优检测框

最终分数 = 置信度 × 形状评分 × 距离惩罚 × 尺寸惩罚
→ 选出综合得分最高的单个检测框
  • 预过滤:移除面积 > 50% 屏幕、宽高比 > 2、score < 0.05 的框
  • 形状评分:基于检测框宽高比评估,排球应接近正方形
  • 距离惩罚:与图像中心距离的惩罚因子
  • 尺寸惩罚:排除过大或过小的异常检测框

该策略在排球单目标检测中,能有效过滤误检并保证输出唯一稳定的目标框。

与相关项目的对比

特性 Nanodet_OpenVINO nanodet_volleyball yolov8_volleyball
检测模型 NanoDet NanoDet YOLOv8 + NanoDet
NMS 策略 单目标最优选择 单目标最优选择 标准 NMS
坐标输出 无(仅窗口显示) printf 标准输出 Boost.Asio 串口
可视化窗口 摄像头模式关闭 DEBUG 模式可开
配置方式 硬编码 硬编码 JSON 配置文件
适用场景 算法调试 轻量部署/测试 正式部署

常见问题

问题 解决方案
编译报错找不到 OpenVINO source /opt/intel/openvino/setupvars.sh
海康摄像头打不开 确认 MVS SDK 安装在 /opt/MVS/,检查 USB 连接
检测不到排球 降低代码中的 score_threshold(默认 0.8 较高)
没有海康相机 修改 main.cpp 中摄像头模式为 OpenCV VideoCapture
如何真正通过串口发送坐标 使用 yolov8_volleyball

致谢

许可证

本项目基于 Apache License 2.0 开源。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors