跳转到内容

swanlab.Object3D

Github源代码

参数描述
data(Union[np.ndarray, str, Path]) 接收点云文件路径、numpy数组。Object3D类将判断接收的数据类型做相应的转换。
caption(str) 3D对象的标签。用于在实验看板中展示3D对象时进行标记。

介绍

对各种类型的点云数据做转换,以被swanlab.log()记录。

从文件/字典创建

示例文件

data.swanlab.pts.json:Google Drive下载

文件的格式为json,内容格式如下:

json
{
    "points": [
        [x1, y1, z1, r1, g1, b1],
        [x2, y2, z2, r2, g2, b2],
        ...
    ],
    // (可选)检测框,用于点云检测等任务,会框住对应位置
    "boxes": [
        {
            "color": [r, g, b],
            "corners": [[x1,y1,z1], ..., [x8,y8,z8]],
            // (可选)检测框的标签文本,会在视图中显示
            "label": "class_name",
            // (可选)置信度,会在视图中显示
            "score": 0.95,
        },
        ...
    ]
}

json文件参数详细解释:

  • points

    • 这是一个数组,用于存储3D点云数据。
    • 每个元素都是一个包含6个数值的数组 [x, y, z, r, g, b],分别代表:
      • x, y, z:点的三维坐标。
      • r, g, b:点的颜色,分别代表红、绿、蓝三个通道的数值,通常取值范围为0-255。
  • boxes(可选):

    • 这是一个数组,用于存储3D检测框数据。
    • 每个元素都是一个对象,代表一个检测框,包含以下字段:
      • color:检测框的颜色,[r, g, b] 数组,代表红、绿、蓝三个通道的数值。
      • corners:检测框的八个顶点坐标,[[x1, y1, z1], ..., [x8, y8, z8]] 数组,每个元素是一个三维坐标 [x, y, z]
      • label(可选):检测框的标签文本,字符串类型,用于在视图中显示检测框的类别。
      • score(可选):检测框的置信度,数值类型,通常取值范围为0-1,用于表示检测框的可靠程度。

使用SwanLab从json文件中记录3D点云数据:

python
import swanlab

swanlab.init()

obj = swanlab.Object3D("data.swanlab.pts.json", caption="3d_point_cloud")
swanlab.log({"examples": obj})
python
import swanlab

swanlab.init()

with open("data.swanlab.pts.json", "r") as f:
    cloud_point = json.load(f)

obj = swanlab.Object3D.from_point_data(
    points=cloud_point["points"],
    boxes=cloud_point["boxes"],
    caption="3d_point_cloud"
)

swanlab.log({"examples": obj})


从numpy数组创建

python
import numpy as np

# Example 1: Create point cloud from coordinates
points_xyz = np.array([
    [0, 0, 0],  # Point1: x=0, y=0, z=0
    [1, 1, 1],  # Point2: x=1, y=1, z=1
    [2, 0, 1]   # Point3: x=2, y=0, z=1
])

cloud_xyz = swanlab.Object3D(points_xyz, caption="Basic XYZ Points")
swanlab.log({"examples": cloud_xyz})
python
import numpy as np

# Example 2: Create point cloud with categories
points_xyzc = np.array([
    [0, 0, 0, 0],  # Point1: xyz + category 0
    [1, 1, 1, 1],  # Point2: xyz + category 1
    [2, 0, 1, 2]   # Point3: xyz + category 2
])

cloud_xyzc = swanlab.Object3D(points_xyzc, caption="Points with Categories")
swanlab.log({"examples": cloud_xyzc})
python
import numpy as np

# Example 3: Create point cloud with RGB colors
points_xyzrgb = np.array([
    [0, 0, 0, 255, 0, 0],    # Point1: xyz + red
    [1, 1, 1, 0, 255, 0],    # Point2: xyz + green
    [2, 0, 1, 0, 0, 255]     # Point3: xyz + blue
])

cloud_xyzrgb = swanlab.Object3D(points_xyzrgb, caption="Colored Points")
swanlab.log({"examples": cloud_xyzrgb})

单步记录多个点云

python
import swanlab

...

cloud1 = swanlab.Object3D(points1, caption="cloud1")
cloud2 = swanlab.Object3D(points2, caption="cloud2")
cloud3 = swanlab.Object3D(points3, caption="cloud3")

...

swanlab.log({"examples": [cloud1, cloud2, cloud3, ...]})