

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

# 创建点云序列输入清单
<a name="sms-point-cloud-multi-frame-input-data"></a>

清单是一个 UTF-8 编码文件，其中每行都是一个完整有效的 JSON 对象。每行都以标准换行符 \\n 或 \\r\\n 分隔。由于每行都必须是有效的 JSON 对象，因此您不能使用未转义的换行符。在点云序列输入清单文件中，清单中的每一行包含一个点云帧序列。可以使用二进制或 ASCII 格式存储序列中的每个帧的点云数据。有关更多信息，请参阅 [接受的原始 3D 数据格式](sms-point-cloud-raw-data-types.md)。这是 3D 点云对象跟踪所需的清单文件格式。（可选）您也可以为每个点云帧提供点属性和摄像机传感器融合数据。在创建序列输入清单文件时，您必须在[世界坐标系](sms-point-cloud-sensor-fusion-details.md#sms-point-cloud-world-coordinate-system)中提供 LiDAR 和视频摄像机传感器融合数据。

以下示例说明了在清单中的每一行是序列文件时用于输入清单文件的语法。输入清单文件中的每一行都必须采用 [JSON 行](http://jsonlines.org/)格式。

```
{"source-ref": "{{s3://amzn-s3-demo-bucket/example-folder/seq1.json}}"}
{"source-ref": "{{s3://amzn-s3-demo-bucket/example-folder/seq2.json}}"}
```

每个点云帧序列的数据需要存储在 JSON 数据对象中。以下是用于序列文件的格式示例。有关每个帧的信息将包含为 JSON 对象并在 `frames` 列表中列出。这是一个序列文件的示例，其中包含两个点云帧文件 `frame300.bin` 和 `frame303.bin`。{{...}}用于指示您应在何处包含有关其他帧的信息。为序列中的每个帧添加一个 JSON 对象。

下面的代码块包括一个用于单个序列文件的 JSON 对象。为便于阅读，JSON 对象已展开。

```
{
  "seq-no": {{1}},
  "prefix": "{{s3://amzn-s3-demo-bucket/example_lidar_sequence_dataset/seq1/}}",
  "number-of-frames": {{100}},
  "frames":[
    {
        "frame-no": {{300}}, 
        "unix-timestamp": {{1566861644.759115}}, 
        "frame": "{{example_lidar_frames/frame300.bin}}", 
        "format": "{{binary/xyzi}}", 
        "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
}}            }
        }, 
        "images": [
        {
            "image-path": "{{example_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}}"
        }]
    },
    {
        "frame-no": {{303}}, 
        "unix-timestamp": {{1566861644.759115}}, 
        "frame": "{{example_lidar_frames/frame303.bin}}", 
        "format": "{{text/xyzi}}", 
        "ego-vehicle-pose":{{{...}}}, 
        "images":[{{{...}}}]
    },
     {{...}}
  ]
}
```

下表提供了有关序列文件的顶级参数的详细信息。有关序列文件中的各个帧所需的参数的详细信息，请参阅[各个点云帧的参数](#sms-point-cloud-multi-frame-input-single-frame)。


****  

|  参数  |  必需  |  接受的值  |  Description  | 
| --- | --- | --- | --- | 
|  `seq-no`  |  是  |  整数  |  序列的有序编号。  | 
|  `prefix`  |  是  |  字符串 **接受的值**： `s3://{{<bucket-name>}}/{{<prefix>/}}`  |  序列文件所在的 Amazon S3 位置。 前缀必须以正斜杠结尾：`/`。  | 
|  `number-of-frames`  |  是  |  整数  |  序列文件中包含的总帧数。该数字必须与下一行中的 `frames` 参数列出的总帧数匹配。  | 
|  `frames`  |  是  |  JSON 对象列表  |  帧数据列表。列表长度必须等于 `number-of-frames`。在工作人员 UI 中，序列中的帧与该数组中的帧顺序相同。 有关每个帧的格式的详细信息，请参阅[各个点云帧的参数](#sms-point-cloud-multi-frame-input-single-frame)。  | 

## 各个点云帧的参数
<a name="sms-point-cloud-multi-frame-input-single-frame"></a>

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


****  

|  参数  |  必需  |  接受的值  |  说明  | 
| --- | --- | --- | --- | 
|  `frame-no`  |  否  |  整数  |  帧编号。这是客户指定的可选标识符，用于识别序列中的帧。Ground Truth 不使用该标识符。  | 
|  `unix-timestamp`  |  是  |  数字  |  Unix 时间戳是 1970 年 1 月 1 日到传感器收集数据的 UTC 时间之间的秒数。 每帧的时间戳必须不同，并且时间戳必须是连续的，因为它们用于长方体插值。理想情况下，这应该是收集数据时的真实时间戳。如果不可用，则必须使用增量时间戳序列，其中序列文件中的第一个帧对应于序列中的第一个时间戳。  | 
|  `frame`  |  是  |  字符串 **格式示例** `{{<folder-name>}}/{{<sequence-file.json>}}`  |  序列文件在 Amazon S3 中的相对位置。该相对路径将附加到您在 `prefix` 中指定的路径后面。  | 
|  `format`  |  否  |  字符串 **接受的字符串值**：`"binary/xyz"`、`"binary/xyzi"`、`"binary/xyzrgb"`、`"binary/xyzirgb"`、`"text/xyz"`、`"text/xyzi"`、`"text/xyzrgb"`、`"text/xyzirgb"` **默认值**： `binary/xyzi`（在 `source-ref` 中指定的文件具有 .bin 扩展名时） `text/xyzi`（在 `source-ref` 中指定的文件具有 .txt 扩展名时）  |  可以使用该参数以指定点云数据的格式。有关更多信息，请参阅 [接受的原始 3D 数据格式](sms-point-cloud-raw-data-types.md)。  | 
|  `ego-vehicle-pose`  |  否  |  JSON 对象  |  用于收集点云数据的设备的姿势。有关该参数的更多信息，请参阅 [在输入清单中包含车辆姿势信息](#sms-point-cloud-multi-frame-ego-vehicle-input)。  | 
|  `prefix`  |  否  |  字符串 **接受的字符串值格式**： `s3://{{<bucket-name>}}/{{<folder-name>/}}`  |  在 Amazon S3 中存储该帧的元数据（例如摄像机图像）的位置。 前缀必须以正斜杠结尾：`/`。  | 
|  `images`  |  否  |  列表  |  描述用于传感器融合的彩色摄像机图像的列表参数。您最多可以在该列表中包含 8 个图像。有关每个图像所需的参数的更多信息，请参阅[在输入清单中包含摄像机数据](#sms-point-cloud-multi-frame-image-input)。  | 

## 在输入清单中包含车辆姿势信息
<a name="sms-point-cloud-multi-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 对象 **必需的参数**： `x`、`y` 和 `z`。为这些参数输入数字。  |  自主车辆在世界坐标系中的平移向量。  | 
|  `heading`  |  是  |  JSON 对象 **必需的参数**： `qx`、`qy`、`qz` 和 `qw`。为这些参数输入数字。  |  安装在车辆上的设备或传感器（用于检测周围环境）的参照系的方向，在坐标系中以[四元数](https://en.wikipedia.org/wiki/Quaternion) (`qx`, `qy`, `qz`, `qw`) 表示。  | 

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

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

如果包含摄像机图像，则必须包含有关用于捕获图像的摄像机的 `position` 和方向 (`heading`) 信息。

如果图像发生畸变，Ground Truth 可以使用您在输入清单文件中提供的图像相关信息以自动校正畸变，包括畸变系数 (`k1`, `k2`, `k3`, `k4`, `p1`, `p1`)、摄像机型号和焦距 (`fx`, `fy`) 以及主点 (`cx`, `cy)`)。要了解这些系数和校正图像畸变的更多信息，请参阅[使用 OpenCV 校准摄像机](https://docs.opencv.org/2.4.13.7/doc/tutorials/calib3d/camera_calibration/camera_calibration.html)。如果不包含畸变系数，则 Ground Truth 不会校正图像畸变。


****  

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

## 序列文件和点云帧限制
<a name="sms-point-cloud-multi-frame-limits"></a>

您最多可以在输入清单文件中包含 10 万个点云帧序列。您最多可以在每个序列文件中包含 500 个点云帧。

请注意，3D 点云标注作业的预处理时间比其他 Ground Truth 任务类型长。有关更多信息，请参阅 [作业预处理时间](sms-point-cloud-general-information.md#sms-point-cloud-job-creation-time)。