labelCloud 上手:2 种标注模式给 3D 点云拉边界框,附安装命令与导出格式对照
【免费下载链接】labelCloudA lightweight tool for labeling 3D bounding boxes in point clouds.项目地址: https://gitcode.com/gh_mirrors/la/labelCloud
你手里有一批激光雷达点云,要人工标 3D 边界框来训练 3D 目标检测模型,但又不想为此专门学一套大型软件。labelCloud 是一个轻量级 Python 点云标注工具:读入 pcd、ply 等格式的点云,用鼠标拉出 3D 边界框,再按你指定的格式(含 KITTI)导出标签,适合做 3D 检测数据准备的开发者。
它适合谁
三个维度,10 秒判断:
- 数据类型:点云为
*.pcd、*.ply、*.pts、*.xyzrgb(彩色),或*.xyz、*.xyzn、*.bin(KITTI 格式,无色)。 - 任务类型:3D 边界框目标检测标签;或基于边界框的语义分割(把框内点染上框的类别)。
- 运行环境:Windows / macOS / Linux 本地桌面 GUI,按 README 说明支持 Python 3.7–3.9。
如果你的任务是 2D 图像标注或多人群协作平台标注,它覆盖不到——它是单人、本地、批量处理一个pointclouds/文件夹里样本的工具。
labelCloud 3D 点云标注的数据流程
跑通它
最短路径是 pip 加示例工程:
pip install labelCloud labelCloud --example # 自动生成示例点云、示例标签和 config.ini想跟最新代码就走源码:
git clone https://gitcode.com/gh_mirrors/la/labelCloud cd labelCloud && pip install -r requirements.txt python3 labelCloud.py点云放pointclouds/文件夹,标签写到labels/文件夹,文件名与点云一一对应。首次启动会弹出欢迎对话框,这是你必须做的两件事:选标注模式(物体检测 / 语义分割),填类别列表(名称、颜色、id)并指定默认类别,再定导出格式。类别漏填的话,后续框会挂错类别。文件夹结构和启动细节见 安装说明。
labelCloud 欢迎对话框:设置标注模式、类别标签与导出格式的初始化界面
首次启动的配置入口
核心能力拆解
能力分三块:标注、校正、导出。
标注模式:picking 一次点击出框,spanning 逐顶点定尺寸
- picking:在框的“前上边缘”位置点一下,滚轮调 z 轴朝向,尺寸取
config.ini里std_boundingbox_*参数。车辆、行人这类形状规则的物体很快。 - spanning:依次选 4 个顶点,逐次跨出长、宽、高;后两个顶点的层高被锁定,更容易点中。尺寸各异的物体用它。
出框之后靠键盘精修,常用快捷键分组如下:
| 分组 | 快捷键 | 作用 |
|---|---|---|
| 平移 | W/A/S/D,Q/E | 前后左右、上下移动框 |
| 旋转 | Z/X、C/V、B/N | 分别绕 z、y、x 轴旋转 |
| 尺寸 | I/O、K/L、,/. | 加/减长、宽、高 |
| 尺寸 | 光标悬停框边 + 滚轮(side pulling) | 拉伸对应维度 |
| 导航 | R/F、T/G、1–9、Y/H | 切样本、切框、选框、切类别 |
| 通用 | Del删框,P重置视角 | — |
注意:默认只允许 z 轴旋转(z_rotation_only = True),要做 9 自由度标注,先在菜单或config.ini里关掉 z-Rotation Only Mode。
两种标注模式的实际操作
导出格式对照表
标签文件按所选格式写入labels/,与点云同名,5 种格式的区别:
| 格式 | 内容 | 备注 |
|---|---|---|
centroid_rel | 质心 + 尺寸 + 相对旋转 | 弧度制,-π..+π |
centroid_abs | 质心 + 尺寸 + 绝对旋转 | 角度制,0..360° |
vertices | 框 8 个顶点的[x, y, z] | 顶点顺序见 docs/conventions.md |
kitti | KITTI 目标格式 | 需要calib/里的标定文件 |
kitti_untransformed | KITTI 标签结构 | 不做坐标变换 |
基于边界框的语义分割
欢迎对话框打开分割开关后,照常标框;框位置合适时按 Assign,框内所有点就写入当前类别。结果存到labels/segmentation/,是np.int8的*.bin数组,长度等于点数,每个值是类别索引。
进阶与生态
- 可调参数集中在
config.ini:导出精度export_precision、逐帧标签传播propagate_labels(把上一帧框带到新帧)、9 自由度开关、平移/旋转步进都在这里,含义见 配置说明。 - 增删类别、改颜色:编辑
labels/_classes.json。 - 扩展点:自定义导出格式,继承
BaseLabelFormat实现 import/export 两个方法,见 labelCloud/definitions/label_formats/base.py;点云读取器同理,在labelCloud/io/pointclouds/下照着numpy.py扩展。 - 对接训练链路:
kitti/kitti_untransformed是标准 KITTI 标签结构,下游按 KITTI 数据处理的流水线可直接消费;你的格式不在列表里就自己写一个 exporter。
常见问题与坑
picking 模式出来的框为什么都一个尺寸?尺寸就是config.ini[LABEL] 段std_boundingbox_length/width/height的默认值。按你的主要物体改这三个数,或出框后用I/O、K/L、,/.微调。
导出的旋转角度和框架对不上?先确认选的是centroid_rel(相对弧度)还是centroid_abs(绝对角度制),两者数值差一个 π 和一次单位换算;用vertices时顶点顺序固定,以 docs/conventions.md 的约定为准。
kitti 导出报缺文件?每个点云都要配一个标定文件放在calib/(路径由calib_folder指定)。你不需要标定变换、只要标签结构一致,直接改选kitti_untransformed。
下一步:跑一遍labelCloud --example,用自带示例点云从标注到导出完整走一遍,再对照 docs/configuration.md 把类别和格式改成你项目里的。🚀
【免费下载链接】labelCloudA lightweight tool for labeling 3D bounding boxes in point clouds.项目地址: https://gitcode.com/gh_mirrors/la/labelCloud
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考