

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建点云帧输入清单文件
<a name="sms-point-cloud-single-frame-input-data"></a>

清单是一个 UTF-8 编码文件，其中每行都是一个完整有效的 JSON 对象。每行都以标准换行符 \\n 或 \\r\\n 分隔。由于每行都必须是有效的 JSON 对象，因此您不能使用未转义的换行符。在单帧输入清单文件中，清单中的每一行包含单个点云帧的数据。可以使用二进制或 ASCII 格式存储点云帧数据（请参阅[接受的原始 3D 数据格式](sms-point-cloud-raw-data-types.md)）。这是 3D 点云对象检测和语义分割所需的清单文件格式。（可选）您也可以为每个点云帧提供摄像机传感器融合数据。

对于所有模式，Ground Truth 在[世界坐标系](sms-point-cloud-sensor-fusion-details.md#sms-point-cloud-world-coordinate-system)中支持点云和视频摄像机传感器融合。如果您可以获取 3D 传感器外部矩阵（例如 LiDAR 外部矩阵），我们建议您使用外部矩阵将 3D 点云帧变换为世界坐标系。有关更多信息，请参阅 [传感器融合](sms-point-cloud-sensor-fusion-details.md#sms-point-cloud-sensor-fusion)。

不过，如果无法在世界坐标系中获取点云，您可以在捕获数据的原始坐标系中提供坐标。如果提供用于传感器融合的摄像机数据，建议您在世界坐标系中提供 LiDAR 传感器和摄像机姿势。

要创建单帧输入清单文件，可以使用 `source-ref` 键指定您希望工作人员标注的每个点云帧的位置。此外，您必须使用 `source-ref-metadata` 键指定数据集的格式、该帧的时间戳以及传感器融合数据和视频摄像机图像（可选）。

以下示例说明了用于单帧点云标注作业的输入清单文件的语法。该示例包含两个点云帧。有关每个参数的详细信息，请参阅该示例后面的表。

**重要**  
输入清单文件中的每一行都必须采用 [JSON 行](http://jsonlines.org/)格式。下面的代码块显示了一个包含两个 JSON 对象的输入清单文件。每个 JSON 对象都用于指向单个点云帧并提供有关单个点云帧的详细信息。为便于阅读，JSON 对象已展开，但在创建输入清单文件时，必须将每个 JSON 对象最小化，使其适合放在一行中。此代码块下提供了一个示例。

```
{
    "source-ref": "{{s3://amzn-s3-demo-bucket/examplefolder/frame1.bin}}",
    "source-ref-metadata":{
        "format": "{{binary/xyzi}}",
        "unix-timestamp": {{1566861644.759115}},
        "ego-vehicle-pose":{
            "position": {
                "x": {{-2.7161461413869947}},
                "y": {{116.25822288149078}},
                "z": {{1.8348751887989483
}}            },
            "heading": {
                "qx": {{-0.02111296123795955}},
                "qy":{{ -0.006495469416730261}},
                "qz": {{-0.008024565904865688}},
                "qw": {{0.9997181192298087
}}            }
        },
        "prefix": "{{s3://amzn-s3-demo-bucket/lidar_singleframe_dataset/someprefix/}}",
        "images": [
        {
            "image-path": "{{images/frame300.bin_camera0.jpg}}",
            "unix-timestamp": {{1566861644.759115}},
            "fx": {{847.7962624528487}},
            "fy": {{850.0340893791985}},
            "cx": {{576.2129134707038}},
            "cy": {{317.2423573573745}},
            "k1": {{0}},
            "k2": {{0}},
            "k3": {{0}},
            "k4": {{0}},
            "p1": {{0}},
            "p2": {{0}},
            "skew": {{0}},
            "position": {
                "x": {{-2.2722515189268138}},
                "y": {{116.86003310568965}},
                "z": {{1.454614668542299}}
            },
            "heading": {
                "qx": {{0.7594754093069037}},
                "qy": {{0.02181790885672969}},
                "qz": {{-0.02461725233103356}},
                "qw": {{-0.6496916273040025
}}            },
            "camera-model": "pinhole"
        }]
    }
}
{
    "source-ref": "{{s3://amzn-s3-demo-bucket/examplefolder/frame2.bin}}",
    "source-ref-metadata":{
        "format": "{{binary/xyzi}}",
        "unix-timestamp": {{1566861632.759133}},
        "ego-vehicle-pose":{
            "position": {
                "x": {{-2.7161461413869947}},
                "y": {{116.25822288149078}},
                "z": {{1.8348751887989483
}}            },
            "heading": {
                "qx": {{-0.02111296123795955}},
                "qy":{{ -0.006495469416730261}},
                "qz": {{-0.008024565904865688}},
                "qw": {{0.9997181192298087
}}            }
        },
        "prefix": "{{s3://amzn-s3-demo-bucket/lidar_singleframe_dataset/someprefix/}}",
        "images": [
        {
            "image-path": "{{images/frame300.bin_camera0.jpg}}",
            "unix-timestamp": {{1566861644.759115}},
            "fx": {{847.7962624528487}},
            "fy": {{850.0340893791985}},
            "cx": {{576.2129134707038}},
            "cy": {{317.2423573573745}},
            "k1": {{0}},
            "k2": {{0}},
            "k3": {{0}},
            "k4": {{0}},
            "p1": {{0}},
            "p2": {{0}},
            "skew": {{0}},
            "position": {
                "x": {{-2.2722515189268138}},
                "y": {{116.86003310568965}},
                "z": {{1.454614668542299}}
            },
            "heading": {
                "qx": {{0.7594754093069037}},
                "qy": {{0.02181790885672969}},
                "qz": {{-0.02461725233103356}},
                "qw": {{-0.6496916273040025
}}            },
            "camera-model": "pinhole"
        }]
    }
}
```

创建输入清单文件时，必须折叠 JSON 对象，使其适合放在一行中。例如，上面的代码块在输入清单文件中将显示如下：

```
{"source-ref":"s3://amzn-s3-demo-bucket/examplefolder/frame1.bin","source-ref-metadata":{"format":"binary/xyzi","unix-timestamp":1566861644.759115,"ego-vehicle-pose":{"position":{"x":-2.7161461413869947,"y":116.25822288149078,"z":1.8348751887989483},"heading":{"qx":-0.02111296123795955,"qy":-0.006495469416730261,"qz":-0.008024565904865688,"qw":0.9997181192298087}},"prefix":"s3://amzn-s3-demo-bucket/lidar_singleframe_dataset/someprefix/","images":[{"image-path":"images/frame300.bin_camera0.jpg","unix-timestamp":1566861644.759115,"fx":847.7962624528487,"fy":850.0340893791985,"cx":576.2129134707038,"cy":317.2423573573745,"k1":0,"k2":0,"k3":0,"k4":0,"p1":0,"p2":0,"skew":0,"position":{"x":-2.2722515189268138,"y":116.86003310568965,"z":1.454614668542299},"heading":{"qx":0.7594754093069037,"qy":0.02181790885672969,"qz":-0.02461725233103356,"qw":-0.6496916273040025},"camera-model":"pinhole"}]}}
{"source-ref":"s3://amzn-s3-demo-bucket/examplefolder/frame2.bin","source-ref-metadata":{"format":"binary/xyzi","unix-timestamp":1566861632.759133,"ego-vehicle-pose":{"position":{"x":-2.7161461413869947,"y":116.25822288149078,"z":1.8348751887989483},"heading":{"qx":-0.02111296123795955,"qy":-0.006495469416730261,"qz":-0.008024565904865688,"qw":0.9997181192298087}},"prefix":"s3://amzn-s3-demo-bucket/lidar_singleframe_dataset/someprefix/","images":[{"image-path":"images/frame300.bin_camera0.jpg","unix-timestamp":1566861644.759115,"fx":847.7962624528487,"fy":850.0340893791985,"cx":576.2129134707038,"cy":317.2423573573745,"k1":0,"k2":0,"k3":0,"k4":0,"p1":0,"p2":0,"skew":0,"position":{"x":-2.2722515189268138,"y":116.86003310568965,"z":1.454614668542299},"heading":{"qx":0.7594754093069037,"qy":0.02181790885672969,"qz":-0.02461725233103356,"qw":-0.6496916273040025},"camera-model":"pinhole"}]}}
```

下表显示了可包含在输入清单文件中的参数：


****  

|  参数  |  必需  |  接受的值  |  Description  | 
| --- | --- | --- | --- | 
| `source-ref` | 是 | 字符串<br />**接受的字符串值格式**：<br />`s3://{{<bucket-name>}}/{{<folder-name>}}/{{point-cloud-frame-file}}` | 单个点云帧的 Amazon S3 位置。 | 
| `source-ref-metadata` | 是 | JSON 对象<br />**接受的参数**：<br />`format`, `unix-timestamp`, `ego-vehicle-pose`, `position`, `prefix`, `images` | 可以使用该参数在 `source-ref` 中包含有关点云的其他信息，并提供用于传感器融合的摄像机数据。 | 
| `format` | 否 | 字符串<br />**接受的字符串值**：`"binary/xyz"`、`"binary/xyzi"`、`"binary/xyzrgb"`、`"binary/xyzirgb"`、`"text/xyz"`、`"text/xyzi"`、`"text/xyzrgb"`、`"text/xyzirgb"`<br />**默认值**：<br />`binary/xyzi`（在 `source-ref` 中指定的文件具有 .bin 扩展名时）<br />`text/xyzi`（在 `source-ref` 中指定的文件具有 .txt 扩展名时） | 可以使用该参数以指定点云数据的格式。有关更多信息，请参阅 [接受的原始 3D 数据格式](sms-point-cloud-raw-data-types.md)。 | 
| `unix-timestamp` | 是 | 数字<br />Unix 时间戳。 | Unix 时间戳是 1970 年 1 月 1 日到传感器收集数据的 UTC 时间之间的秒数。 | 
| `ego-vehicle-pose` | 否 | JSON 对象 | 用于收集点云数据的设备的姿势。有关该参数的更多信息，请参阅 [在输入清单中包含车辆姿势信息](#sms-point-cloud-single-frame-ego-vehicle-input)。 | 
| `prefix` | 否 | 字符串<br />**接受的字符串值格式**：<br />`s3://{{<bucket-name>}}/{{<folder-name>/}}` | 在 Amazon S3 中存储该帧的元数据（例如摄像机图像）的位置。<br />前缀必须以正斜杠结尾：`/`。 | 
| `images` | 否 | 列表 | 描述用于传感器融合的彩色摄像机图像的参数列表。您最多可以在该列表中包含 8 个图像。有关每个图像所需的参数的更多信息，请参阅[在输入清单中包含摄像机数据](#sms-point-cloud-single-frame-image-input)。 | 

## 在输入清单中包含车辆姿势信息
<a name="sms-point-cloud-single-frame-ego-vehicle-input"></a>

可以使用自主车辆位置以提供有关用于捕获点云数据的车辆的位置的信息。Ground Truth 使用该信息以计算 LiDAR 外部矩阵。

Ground Truth 使用外部矩阵以在 3D 场景和 2D 图像之间投影标签。有关更多信息，请参阅 [传感器融合](sms-point-cloud-sensor-fusion-details.md#sms-point-cloud-sensor-fusion)。

下表提供了有关在提供自主车辆信息时所需的 `position` 和方向 (`heading`) 参数的更多信息。


****  

|  参数  |  必需  |  接受的值  |  Description  | 
| --- | --- | --- | --- | 
| `position` | 是 | JSON 对象<br />**必需的参数**：<br />`x`、`y` 和 `z`。为这些参数输入数字。 | 自主车辆在世界坐标系中的平移向量。 | 
| `heading` | 是 | JSON 对象<br />**必需的参数**：<br />`qx`、`qy`、`qz` 和 `qw`。为这些参数输入数字。 | 安装在车辆上的设备或传感器（用于检测周围环境）的参照系的方向，在坐标系中以[四元数](https://en.wikipedia.org/wiki/Quaternion) (`qx`, `qy`, `qz`, `qw`) 表示。 | 

## 在输入清单中包含摄像机数据
<a name="sms-point-cloud-single-frame-image-input"></a>

如果要将视频摄像机数据与帧包含在一起，请使用以下参数以提供有关每个图像的信息。当 `images` 参数包含在输入清单文件中的 `source-ref-metadata` 下时，下面的**必需**列适用。您无需在输入清单文件中包含图像。

如果包含摄像机图像，您必须包含有关用于在世界坐标系中捕获图像的摄像机 `position` 和 `heading` 的信息。

如果图像发生畸变，Ground Truth 可以使用您在输入清单文件中提供的图像相关信息以自动校正畸变，包括畸变系数 (`k1`, `k2`, `k3`, `k4`, `p1`, `p1`)、摄像机型号和摄像机内部矩阵。内部矩阵由焦距 (`fx`, `fy`) 和主点 (`cx`, `cy)`) 组成。请参阅[内部矩阵](sms-point-cloud-sensor-fusion-details.md#sms-point-cloud-intrinsic)，了解 Ground Truth 如何使用摄像机内部矩阵。如果不包含畸变系数，则 Ground Truth 不会校正图像畸变。


****  

|  参数  |  必需  |  接受的值  |  Description  | 
| --- | --- | --- | --- | 
| `image-path` | 是 | 字符串<br />**格式示例**：<br />`{{<folder-name>}}/{{<imagefile.png>}}` | 图像文件在 Amazon S3 中的相对位置。该相对路径将附加到您在 `prefix` 中指定的路径后面。 | 
| `unix-timestamp` | 是 | 数字 | Unix 时间戳是 1970 年 1 月 1 日到摄像机收集数据的 UTC 时间之间的秒数。 | 
| `camera-model` | 否 | 字符串：<br />**接受的值**：<br />`"pinhole"`, `"fisheye"`<br />**默认值**：<br />`"pinhole"` | 用于捕获图像的摄像机型号。该信息用于校正摄像机图像畸变。 | 
| `fx, fy` | 是 | 数字 | 摄像机在 x (`fx`) 和 y (`fy`) 方向上的焦距。 | 
| `cx, cy` | 是 | 数字 | 主点的 x (`cx`) 和 y (`cy`) 坐标。 | 
| `k1, k2, k3, k4` | 否 | 数字 | 径向畸变系数。**鱼眼**和**针孔**摄像机型号支持。 | 
| `p1, p2` | 否 | 数字 | 切向畸变系数。**针孔**摄像机型号支持。 | 
| `skew` | 否 | 数字 | 测量图像偏斜的参数。 | 
| `position` | 是 | JSON 对象<br />**必需的参数**：<br />`x`、`y` 和 `z`。为这些参数输入数字。 | 安装在车辆上的摄像机（用于捕获图像）的参照系的位置或原点。 | 
| `heading` | 是 | JSON 对象<br />**必需的参数**：<br />`qx`、`qy`、`qz` 和 `qw`。为这些参数输入数字。 | 安装在车辆上的摄像机（用于在世界坐标系中捕获图像）的参照系的方向，以[四元数](https://en.wikipedia.org/wiki/Quaternion) (`qx`, `qy`, `qz`, `qw`) 表示。 | 

## 点云帧限制
<a name="sms-point-cloud-single-frame-limits"></a>

您最多可以在输入清单文件中包含 10 万个点云帧。3D 点云标注作业的预处理时间比其他 Ground Truth 任务类型长。有关更多信息，请参阅 [作业预处理时间](sms-point-cloud-general-information.md#sms-point-cloud-job-creation-time)。