2025-11-14 数据架构重构
时间: 2025-11-14 下午
主题: 数据收集架构重构和问题修复
核心改进:逐帧标注架构实现
新增模块
data/raw_frame_collector.py - 纯帧收集器(视频离线版本)
- 只保存原始图片 + 时间戳
- 不做任何推断、计算、检测
- 单帧失败不影响其他帧
- 支持跳帧和压缩选项
data/online_frame_collector.py - 在线实时收集器
- 从设备实时截图
- 支持Ctrl+C优雅退出
- 支持时间/帧数双重限制
- 与视频版本相同的HDF5格式
data/per_frame_annotator.py - 逐帧标注器
- 离线标注action/reward/done等字段
- 每帧单独处理,某帧失败不影响其他帧
- 某字段失败不影响其他字段
- 支持增量标注和覆盖标注
data/flexible_frame_loader.py - 灵活加载器
- 自动检测每帧可用字段
- 缺失字段可以填充默认值或跳过
- 提供统计分析和兼容性检查
- 支持导出为传统格式
设计理念
- 每张图片都是独立的数据单元
- 可以有不同的可选字段
- 支持后期添加新字段
- 最大化收集的稳定性
数据格式特性
frame_000000/
├── image (必须)
├── timestamp (必须)
├── action (可选)
├── reward (可选)
├── is_dead (可选)
└── done (可选)
测试结果
- [OK] 视频收集:20帧,100%成功率
- [OK] 离线标注:action/reward/done,100%完成度
- [OK] 灵活加载:正确处理缺失字段
问题修复
Windows兼容性修复
- 问题: Emoji字符导致
UnicodeEncodeError
- 解决: 替换所有emoji为文本标记
- ✅ → [OK]
- ❌ → [ERROR]
- ⚠ → [WARN]
- ⊘ → [SKIP]
- ⊙ → [EXISTS]
- 问题: PowerShell不支持
\换行
- 解决: 所有命令改为单行格式
compatibility.py 核心问题修复
- 导入错误 (line 27-35)
- 错误:从image.py示例文件导入
- 修复:直接从autowzry库导入,失败则使用本地fallback
- 参数类型错误 (line 64)
- 错误:Settings.Config()期望字符串路径,传入了字典
- 修复:参数类型从Dict改为str
- 设备连接管理 (line 122-165)
- 添加:周期性检查设备连接状态(默认30s)
- 添加:两级重试机制(连接设备 → 重启重连设备)
- 避免:每次操作都检查(浪费时间)
autowzry库坐标参数修复
- 文件:
D:\SoftData\git\autowzry-dev\autowzry\wzry.py (line 3418-3420)
- 错误:使用
center_x/center_y
- 修复:ImageDetector使用
center_dim0/center_dim1
- 注意:
center_dim0 = Y轴,center_dim1 = X轴
collect_spectate.py 动作编码修复
- 问题: ActionSpace格式不匹配
- 修复:
{"type": "idle"} → 直接返回0
{"type": "move", "angle": x} → {"type": "move", "direction": x}
{"type": "attack"} → {"type": "attack", "target": "auto"}
文档更新
quickstart.md
- 更新为新的三步流程(收集 → 标注 → 加载)
- 添加视频/在线两种模式说明
- 移除过时的collect_spectate.py说明
docs/data_format.md
- 完全重写,说明两种格式
- 逐帧格式为推荐方式
- 传统格式用于向后兼容
- 详细的字段说明和使用示例
docs/per_frame_annotation_design.md
docs/data_collection_refactor.md
docs/compatibility_fix_log.md
docs/BUGFIX_collect_spectate_actions.md
待完成任务
- 创建FlexibleReplayBuffer - 适配新逐帧格式的训练数据加载器
- 更新scripts脚本 - 适配新的数据流程
- 在线收集测试 - 需要设备连接后测试
- 训练流程验证 - 使用新格式数据训练