No description
  • C++ 89.3%
  • QML 5.1%
  • Shell 3.5%
  • CMake 2.1%
Find a file
2026-08-28 16:36:43 +08:00
3rdparty perf(model) 优化训练模型 2026-08-11 12:22:18 +08:00
docs fix: 修复摄像头驱动和实现摄像头下的代码 2026-08-28 16:36:43 +08:00
qml fix: 修复摄像头驱动和实现摄像头下的代码 2026-08-28 16:36:43 +08:00
resource perf(model) 优化训练模型 2026-08-11 12:22:18 +08:00
src fix: 修复摄像头驱动和实现摄像头下的代码 2026-08-28 16:36:43 +08:00
.gitignore perf(model) 优化训练模型 2026-08-11 12:22:18 +08:00
ARCHITECTURE.md docs:更新架构文档,readme和部分注释 2026-06-26 16:51:02 +08:00
CMakeLists.txt perf(model) 优化训练模型 2026-08-11 12:22:18 +08:00
performance.sh pref(video) 基本能用,1280*720 60帧满速推理 2026-06-26 16:02:54 +08:00
README.md fix: 修复摄像头驱动和实现摄像头下的代码 2026-08-28 16:36:43 +08:00

ScoreMaster

基于 Rockchip RK3588 的实时斯诺克台球检测系统,全硬件加速零拷贝。

帧率

YOLOv8 INT8 640x640,3 核 NPU 并行,H.264 测试视频:

输入分辨率 帧率(量化后) 帧率(量化前)
1280×720 110 fps 60 fps
1920×1080 110 fps 60 fps
3840×2160 60 fps 48 fps

技术栈

组件 用途
C++20 / Qt6 QML 框架与界面
RK3588 NPU ×3 推理 (YOLOv8 INT8)
Rockchip MPP H.264 硬解码 + 硬编码
Rockchip RGA NV12↔RGB 硬缩放/色彩转换
V4L2 摄像头驱动 (DMA-BUF)

快速开始

# 编译
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8

# 运行
./ScoreMaster

配置

src/core/config.h:

// 视频源
USE_TEST_VIDEO = true              // true=H.264文件, false=摄像头
TEST_VIDEO_PATH = ".../test.h264"
CAMERA_DEVICE = "/dev/video0"

// 模型
MODEL_PATH = ".../yolov8_ball_int8.rknn"
NPU_CORES = 3
CONF_THRESHOLD = 0.7

// 编码输出
ENCODE_OUTPUT = ".../output.h264"

调试面板

USE_TEST_VIDEO = true 时显示调试面板(半透明悬浮在右侧):

区域 内容
FPS 栏 实时帧率 / 分辨率 / RGA 耗时 / 编码状态
比分 P1 vs P2 (计分逻辑开发中)
球列表 检测球详情 (开发中)
控制栏 暂停 / 单帧 / 编码开关 / 检测框开关

USE_TEST_VIDEO = false 时仅全屏视频,无调试面板。

线程模型

Core 4  解码线程   MPP 硬解码 → frame_queue_
Core 5  管线线程   RGA缩放 → 提交NPU → 收结果 → 显示+编码+qbuf
Core 5-7 NPU Worker  rknn_run + NMS后处理 (3核轮转)
Qt Main  主线程    GUI事件循环 + QML渲染

目录结构

src/
├── main.cpp                  入口
├── core/
│   ├── config.h              全部参数
│   ├── video_source.h        视频源抽象接口 (VideoFrame)
│   ├── local_video_decoder.*  MPP 硬解码
│   ├── camera_v4l2.*         V4L2 摄像头
│   ├── pipeline_manager.*    管线调度 (双线程)
│   ├── rknn_inference.*      NPU 推理 (3核并行)
│   ├── mpp_encoder.*         MPP 硬编码
│   ├── rga_processor.*       RGA 预处理
│   └── rga_display_converter.* RGA 显示转换
├── logic/                    逻辑引擎
│   ├── logic_types.h         球/轨迹数据结构
│   ├── ball_tracker.*        卡尔曼跟踪
│   ├── scoring_engine.*      计分规则
│   ├── trajectory_predictor.* 球路预测
│   └── logic_manager.*       统一入口
├── ui/
│   └── video_canvas.*        QML 画布
└── 3rdparty/rknn/
    ├── include/rknn_api.h
    └── lib/librknnrt.so

架构文档

详见 ARCHITECTURE.md