# Introduction

iMerit's data labeling platform is designed to streamline the process of generating high-quality training data to enhance computer vision models. Our latest [annotation tool](/annotation-tool) offers a robust set of features aimed at making the labeling process faster and more precise. Key features include a range of annotation options, such as 2D bounding boxes, 3D cuboids, and polylines, allowing for complex object tracking and labeling in both 2D images and 3D point clouds.&#x20;

Additionally, [QuickServe](/quickserve-platform) streamlines project setup, allowing users to effortlessly configure and manage labeling projects. It offers real-time project tracking, ensuring seamless collaboration among multiple stakeholders and keeping everyone informed and aligned on project progress.

This comprehensive solution aims to meet the evolving demands of computer vision model training, ensuring efficiency, accuracy, and scalability in data labeling tasks.

<figure><img src="/files/PWuN2KtHVkrnOFf2Ddmp" alt=""><figcaption></figcaption></figure>

This documentation covers the following main topics:

* [Account Activation](/account-activation): Activate account on QuickServe
* [Project Setup](/project-setup): How to set up a labelling project
* [Pre-process Data](/project-setup/pre-process-data): How to format and arrange data for import
* [Annotation Tool](/annotation-tool): In-depth guide for learning how to use the labelling tool
* [Key Features](/annotation-tool/key-features): Learn how to use powerful tool interactions to speed up the labelling process
* [Audit Tool](/audit-tool): How to conduct an audit and raise issues observed in labelling submissions

## Minimum Requirement

### **System configuration**

* i5 Processor
* 16GB of RAM is the amount of memory for speed and smooth functioning
* 8 GB GPU Card for rendering
* Supported Browser - Chrome&#x20;

#### Recommended Configuration

* i7 Processor
* 16GB of RAM is the amount of memory for speed and smooth functioning
* 8 GB GPU Card for rendering
* Supported Browser - Chrome&#x20;

### Data Related:

* Storage - The dataset must reside in a S3 Bucket. Access [pre-defined S3 bucket](https://docs.imerit-prod.io/pages/egv6MSBkKqcIBNPxkVlW#id-3.-data-storage)
* Data Processing - [Pre-process LiDAR data](/project-setup/pre-process-data)&#x20;


# Account Activation

Activate your account on [QuickServe](/quickserve-platform) to configure your labelling task. You can reach out to us to request the activation link and follow these steps:

## Account Activation (1st Time User)

* To access the platform, the user is sent an activation link through email by iMerit’s Solution Owner.&#x20;
* Click on the activation link received on the email address.

{% hint style="info" %}
A Solution Owner is the iMerit PoC once the Dataset has been shared by the customer.
{% endhint %}

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdJjT9UceKc1fbTFazN3cRNYoKuEdBfS0xPNrtBxazYKq47snt1tgDBU6I6cdzkax4m1WM9pzmFkcqb4BQqlcZu-YFkoiCWcX6b2Uvp_O-p-_OzOSKdl_16oioJbzBaxcOlPxzVo5DkMM1g0GBfm6xmPhKE?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

* The activation link will open in a new window. Fill out the following details:
  * First & Last Name (Mandatory)
  * Org. Name
  * Client ID - a unique code provided to a client by Solution Owner (not mandatory to continue).

    <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcwmBEe2GyeWNhxUVNth1nSUXOZ0X8ggSeqyoh_ejvFCJdr7RYvMyLJI5Jtbekjil1v1W054h7aSC546Z9pmdCfphDuWzv1rmpYwfyLWaEDs8kOSoL5OlF1RSv4wS0cY0MZ4xWOSNUHMpE30Hn0yW48McU?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption><p>`</p></figcaption></figure></div>
* The user is registered and redirected to the [Login Screen](#account-login-returning-users) on activation.

## Account Login (Returning Users)

* Go to the [login URL](https://app.quickserve.imerit-prod.io/index.html#/login/external) to reach the Login Screen.
* Login with the Email ID registered with QuickServe.
* Enter the One Time Password (OTP) sent to the registered email address.

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeOyAqzEIMpS8w7eF0Pqz_kDPSdRqtaQ32E_6PpdHol0w92rcONpvfTCMMQy4nSCyLs1ajO2APnM8HXH1QLAwU4BG2Uvtvq6UP4tC8ig3zrYVVaPoizBs2oQwKKMR4qG_9Agltrmew-oF6UdpS7EQplGXBn?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>
* The dashboard lists all the Solutions the user has access to.&#x20;

{% hint style="info" %}
A Solution is an environment where users can set up multiple labeling projects.
{% endhint %}

<figure><img src="/files/IoQaqquWRtFpDpyKf075" alt=""><figcaption><p>Client Dashboard</p></figcaption></figure>

* Know more about the Solution [here](/quickserve-platform).


# QuickServe Platform

QuickServe is a project management platform that allows end-to-end setup and tracking of data-labeling projects. The labeling projects can be configured, monitored and shared with team members with controlled access.

* The dashboard lists all the Solutions the user has access to in which multiple labeling projects are maintained.

<figure><img src="/files/gZr7vbS2HQKy7O9imOwJ" alt=""><figcaption></figcaption></figure>

* The Solution(s) can be further starred to highlight the important ones for faster access by hovering on the row and clicking the star icon at the far right (this feature is helpful when there are multiple Solutions the user has been given access to).

  <figure><img src="/files/nF0scTuFLqm1E6pssses" alt="" width="375"><figcaption></figcaption></figure>
* The gear icon on the Solution row allows users to access the following actions based on the level of access they have:

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe4il5g0clflZ4f3FAtnw3ykTpzS_kTGI9UNqHQkIIGZZ0Q1Wbh9KI0MOG2-A1y5diVI41jxESlnzgEPG9hns9-QiHHnvhnmFkjnSSdV0ihFZJSRGxVjvn-pNhUG7BhlcKkjUOMzZZGmdZSQEicEYbdg7fr?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

## Recipe Generator

Recipe Generator section allows [Creating Recipes](/project-setup/create-recipe) for a labeling project and the Recipe Dashboard lists all the ones created within the Solution. Users can view all existing recipes within the Solution and create new ones based on the level of access they have. This is the starting point to set up a *labeling project* by defining the *ontology*. For example, *classes, attributes, associations,* etc.

## Manage Taskflows

Manage Taskflows section allows [Creating Taskflows](/project-setup/create-taskflow) to ensure the execution of *tasks* in an orderly sequence in the labeling pipeline through *nodes* or channels. Users can view all existing taskflows within the Solution and create new ones based on the level of access they have. For example, if the task is decided to go through 2 rounds of labeling then the taskflow will have 2 *nodes* defined.

## Job Builder

Job Builder section allows [Building Jobs](/project-setup/build-jobs) by importing data in a tool ingestible format and folder. Users can open the built *jobs* in the *annotation tool* from here. All the pending, ongoing and completed jobs within a Solution will be listed here. View how to [Pre-process data](/project-setup/pre-process-data) before importing.

## Audit

The[ Audit Dashboard](/audit-tool#audit-dashboard) allows customers to view the progress of the tasks and conduct auditing of the labeling work attempted by iMerit's annotators. This is different from QC conducted by the annotation team. Here observed issues can be marked and reported by the customers.

## Share

This action allows sharing of the Solution with your internal team members (sharing the company domain) with controlled access so that they can create, modify and track projects.

<figure><img src="/files/AcAiGPGBuNoFEuk2G9x6" alt=""><figcaption></figcaption></figure>

A Solution Owner creates and shares the Solution with both the internal employee and the customer.&#x20;

* A Customer when invited, is given the role of a `Project Owner` so they can add anyone from their domain.
  * To ensure security, the iMerit employee configures the domains prior to the Project Owner extending the access
* Roles of users are defined based on the level of access and control they have:
  1. **Project Owner**
     * Can view and create [Recipes](/project-setup/create-recipe), [Taskflows](/project-setup/create-taskflow), [Jobs](/audit-tool#audit-tool-interface) within the Solution
     * Can add more Team Members as Team Manager, Contributor or Editor
  2. **Team Manager**
     * Can view  [Recipes](/project-setup/create-recipe), [Taskflows](/project-setup/create-taskflow), [Jobs](/audit-tool#audit-tool-interface) within the Solution
     * Can add Team Members by [Sharing](#share)
  3. **Contributor**
     * Can only view the [Audit Dashboard](/audit-tool#audit-dashboard) & [Audit Tool](/audit-tool#audit-tool-interface)
  4. **Editor**&#x20;
     * Can view [Job Details](/project-setup/build-jobs/1.-job-details), [Visualization Tool](/visualization-tool), [Audit Dashboard](/audit-tool#audit-dashboard) & [Audit Tool](/audit-tool#audit-tool-interface)

## API Keys

This allows users to create and generate API Keys when using the [API](https://docs.tasking.imerit-playground.io/)s.

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfv72Kz9aMKLWak7gObIZVoMM6ffgTXKJWeKAjabrppUke_-PamV-gYtkqpI3bjsY9t2xQKOehFDDA-s-4Sto3ZDI-l6grqzt8Z_YOpqnmQG-wQLQjSFS1u2okmpHn2WwO65I8QVtvuBBbJ8sAEqZNzq3vy?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>


# Project Setup

## Overview

After [login](/account-activation#account-login-returning-users), the User will be redirected to the [QuickServe Platform's](/quickserve-platform) dashboard in a new window.&#x20;

To launch a project on iMerit’s 3D Multi-Sensor Fusion Tool, the user will need to cover the following steps from the dashboard.

* Define the Ontology - The ontology is a comprehensive schema that defines the classes (or categories), attributes (or properties), relationships, and rules for annotating data. (Jump to [Create Recipe](/project-setup/create-recipe)).
* Create the Taskflow -  Taskflow is an interactive channel used to manage the execution of tasks. The goal of a task flow is to ensure that tasks are executed in a defined sequence by the respective expert mapped to the pipeline. (Jump to [Create Taskflow](/project-setup/create-taskflow)).
* Format Dataset - It is important to organize the data in a format that is ingestible by the tool. Read [Format LiDAR Data](/project-setup/pre-process-data) to learn how to restructure data before importing it in the next step.
* Create Jobs - A job encapsulates the entirety of the labeling work required by organizing tasks for annotators into manageable groups. A job for the annotator is created by linking a *taskflow* with the *recipe* and importing the segregated data. [Build Jobs](/project-setup/build-jobs)
* Launch Task: The annotation tool gets enabled and can be accessed once the above steps are completed.[ Launch Task.](/project-setup/build-jobs/4.-launch-task)
* Add Contributors - To add contributors to the project, the user must [Share](/quickserve-platform#share) the solution from the Dashboard. Users can be added with controlled access.


# Create Recipe

A Recipe is defined as the project ontology with its Classes and their Attributes and Associations.

## How to Get Here

* Go to the Recipe Generator from the Solution listed on the [QuickServe Dashboard](/quickserve-platform) (from the gear icon).
* User is redirected to the Recipe Generator section, where they can view all the recipes created within the Solution and create a new one (if the user role permits).&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdmvbrOrltDW6G_XJxqdz-vkiIdUrCpsZTAPShFM6Vnnrfzcp0L5-F25xIbW0Dk1B-Cu3xlyQ9E7SqqYCst2AVoUkPFyBcK9S0XMe1o6rCcYfkN7EiUp71yqPowBnMpzK2VfO3n0OlQI-E7JNgcPRWbyFM?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

* Click on the ‘+ New Recipe’ button on the top right.

<figure><img src="/files/34fNBL671FbKAXj5lF72" alt=""><figcaption><p>Recipe Generator</p></figcaption></figure>

## Steps to Create a Recipe

1. [Basic Details](/project-setup/create-recipe/1.-basic-details)
2. [Classes](/project-setup/create-recipe/2.-classes)
3. [Attributes](/project-setup/create-recipe/3.-attributes)
4. [Associations](/project-setup/create-recipe/4.-associations)
5. [Publish Recipe](/project-setup/create-recipe/5.-publish-recipe)


# 1. Basic Details

<figure><img src="/files/88Xv4YDPyOmIluvC2ykK" alt=""><figcaption></figcaption></figure>

Fill in the basic details about the labeling project:

1. [Annotation Tool](#annotation-tool)
2. [Name and Description](#name-and-description)
3. [Sequential Task](#sequential-task)
4. [Reference Images](#reference-images)
5. [Overlapping of Annotations](#overlapping-of-annotations)
6. [Tracking in Multi-Sensor](#tracking-in-multi-sensor)

<figure><img src="/files/rH8wia75yJ0BIeU7Dqqa" alt=""><figcaption></figcaption></figure>

## **Annotation Tool**

Select the Annotation Tool based on the type of labeling requirement. The default [annotation tool ](/annotation-tool)selected is ‘iMerit LiDAR (Multisensor)’

<div align="center"><figure><img src="/files/0vBnb7YGAf8v7wh7Bd23" alt="" width="375"><figcaption></figcaption></figure></div>

## **Name and Description**

Give the recipe a name and description for contributors to understand.&#x20;

## Sequential Task

Toggle this option ON if the uploaded [frames](/project-setup/pre-process-data#frame) belong to a single [batch](/project-setup/pre-process-data#batch). Enabling this will activate the [keyframe interpolation](/annotation-tool/key-features/keyframe-interpolation) feature in the tool, allowing seamless interpolation across [frames](/project-setup/pre-process-data#frame). Leaving this toggle button ON for single-frame [batches](/project-setup/pre-process-data#batch) has no adverse effect on the annotator's experience.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Assign all [frames](/project-setup/pre-process-data#frame) of a sequence to a single annotator. This ensures they have object context from adjacent [frames](/project-setup/pre-process-data#frame), aiding in identifying objects that may be unclear in the current [frame](/project-setup/pre-process-data#frame).
{% endhint %}

## Reference Images

Toggle this option ON if the task requires referencing camera images for object identification or labeling. Enabling this will display an [image panel](https://docs.imerit-prod.io/project-setup/create-recipe/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel) within the [annotation tool](/annotation-tool) for easy reference.

{% hint style="warning" %}
Calibration files of images will be needed at the time of [data import](/project-setup/build-jobs/2.-data-import). Learn how to prepare the [calibration file](/project-setup/pre-process-data#step-3-create-calibration-folder).&#x20;
{% endhint %}

## Overlapping of Annotations

Toggle this option ON to allow two annotations to overlap without conflict detection. Turning it OFF will enable the tool to identify overlapping annotations and display a conflict alert. When a conflict is detected, the user will have the option to override the first classification at the overlapping instance.

## Tracking in Multi-Sensor

Enable this option to track an object across multiple sensors within a [frame](/project-setup/pre-process-data#frame) or across [frames](/project-setup/pre-process-data#frame) in a [batch](/project-setup/pre-process-data#batch). When toggled ON, the tool will assign a unique ID to the object, allowing the identifier to be shared across visible sensors seamlessly.

## Segmentation Mode

Toggle this option ON to enable the segmentation tool. This will disable the geometry tool and allow annotators to segment points within the point cloud and pixels in the camera sensor images.

## Relationship Sensor Dependent

* Toggle this option ON to allow relationships to be defined independently within each sensor view. This means the same objects can have different relationships (or none at all) depending on the sensor perspective, giving you more granular control in multi-sensor scenarios. Toggle it OFF to create frame-level relationships that automatically apply across all sensor views.
* By default, the tool supports the toggle ON option.

[Learn how to use](/annotation-tool/key-features/relationship-sensor-independent)


# 2. Classes

Define [new classes](#create-classes) and link them to a drawable from the right-highlighted section below. The saved classes will appear in rows highlighted on the left.

<figure><img src="/files/01IPzqAz9Do54qToeSH2" alt=""><figcaption></figcaption></figure>

## Create Classes

Provide the following details to create a new class:

### **Name**

* **Name**: Name of the class shown in the output data to be entered here.
* **Display Name**:  Class name displayed on the annotation tool to be entered here.
* **Abbreviated Name**: Define the short form of the *class* name which gets displayed in data columns with space constraint.

Based on the selection in Step 1 Basic Details, [Segmentation Mode](/project-setup/create-recipe/1.-basic-details#segmentation-mode), drawable tools will appear.

<figure><img src="/files/n97tciqBwuL6zXFW339t" alt=""><figcaption></figcaption></figure>

***

## **Geometry Drawing Tools**

Select the [drawing tools](/annotation-tool/drawing-tools) that need to be enabled for marking areas or points of the object falling under this class on the annotation tool. This is a multi-select option:

### **Polygon (3D)**

A **Polygon 3D** is an annotation tool that allows users to draw a closed shape in 3D space by connecting multiple points or vertices. These points (3 or more) are joined together to form a polygonal surface, typically used to annotate complex, irregularly shaped objects or surfaces within a point cloud.

[Learn how to use](/annotation-tool/drawing-tools/polygon-3d)

### **Polyline (3D)**

A **3D Polyline** is a flexible annotation tool that allows users to draw a continuous line in 3D space with a starting point, an endpoint, and an unlimited number of joints or nodes in between. Each node marks a point in space where the line changes direction, enabling annotators to outline complex shapes or paths.&#x20;

[Learn how to use](/annotation-tool/drawing-tools/polyline-3d)

### **Cuboid (3D)**

A **3D Cuboid** is a three-dimensional annotation tool used in point cloud and image data labeling to enclose objects within a cube-like shape. By specifying the length, width, and height of the cuboid, annotators can create a box around an object, helping to define its spatial dimensions and orientation in 3D space.

[Learn how to use](/annotation-tool/drawing-tools/cuboid)

#### **Dynamic Dimension**

This input appears only when the drawing tool selected is a **cuboid** and the [Has Instance](#has-instances) toggle is switched **ON**.&#x20;

* By indicating dimension as dynamic (toggle **ON**), a marked annotation for an object can vary in dimension across the sequence of [frames](/project-setup/pre-process-data#frame). With this feature, tracking a pedestrian from a sitting position to a standing position, becomes very easy.
  * [**Uniform Dimension**](/annotation-tool/key-features/unify-dimension) -  This feature takes the box size in the current [frame](/project-setup/pre-process-data#frame) and applies it to all [frames](/project-setup/pre-process-data#frame) (where the object is visible).&#x20;

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> Dynamic Dimension ON feature is best utilized when the annotator identifies the [frame](/project-setup/pre-process-data#frame) where the cuboid is most visible (containing the maximum points). Using it in such instances ensures a more efficient annotation process.
{% endhint %}

* By indicating dimension as non-dynamic (toggle **OFF**), a marked annotation's dimension for an object remains constant across the sequence of [frames](/project-setup/pre-process-data#frame). Any change in dimension would reflect across all its occurrences. With this feature, annotating a lamp post becomes easy.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfKlA_LSOIzcMtSnBRFWqZLd3luumFPFr1cGzNW6UObc6YofV2esVq8HJBV2bqNJI8jOcBjrzd0tkazlFcljYNLyFuK5wXg1zGSBDo85pgxtnOOovg5xVuELtYU-WNfiOrD3X63s1dGbp7qfkiGLpWJwO3j?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

#### **Preset Cuboid Dimension**

[Preset Cuboid Dimension](/annotation-tool/key-features/preset-cuboid-dimensions) toggle input appears only when the drawing tool selected is a **cuboid**.

* By indicating Preset Cuboid Dimension toggle **ON**, allows teams to define a standard cuboid size per class—particularly useful for objects with known and consistent dimensions.
* By indicating Preset Cuboid Dimension toggle **OFF**, a standard cube dimension is available.

<figure><img src="/files/JTCSIAVtaRyJav11OwaP" alt=""><figcaption></figcaption></figure>

### **Polygon (2D)**&#x20;

A **Polygon 2D** is an annotation tool used to draw a closed shape by connecting multiple points or vertices on a 2D plane, typically on an image. It allows users to outline irregular or complex objects with precision by placing a series of points around the object's boundary.

[Learn how to use](/annotation-tool/drawing-tools/polygon-2d)

### **Rectangle (2D)**

A **2D Bounding Box (BBox)** is a rectangular annotation tool used to enclose and label objects within a 2D image. It is defined by the top-left and bottom-right corners, creating a box that contains the object of interest.

[Learn how to use](/annotation-tool/drawing-tools/rectangle)

The following 3 inputs appear when the drawing tool has rectangle selected:

#### **Truncate**

If the rectangle extends beyond the image edge, it auto-truncates by snapping back to the edge. When this option is OFF, dimensions remain unchanged even if part of the rectangle lies outside the image.

#### **Keypoint with Vertical Line**

A line appears in the centre of the rectangle, enabling the marking of a key point within a rectangle.

Learn how to use the [keypoint with vertical line](/annotation-tool/drawing-tools/rectangle#key-point-with-vertical-line) within the rectangle.

#### **Edge Length Constraint:**

Add minimum and maximum dimension limits for the rectangle belonging to a class.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcAn0K4u_7flGhAEDInHIX9r0JEXY-0BxCCARVNNxXNsZT9HCU8E0zMYRnys1_GT2bjNkptnNgKxmZy-rlQzsZ8z-fcMrhQP3N3lcFNurGva1wtU7Vqa_1D3qKJOVJGl90e2-QT1tWcBand2Ts1uQdNhXJK?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### **Polyline (2D)**

A **Polyline 2D** is an annotation tool used to draw a series of connected straight lines (segments) on a 2D image. It consists of multiple points (or nodes) that define the shape, allowing annotators to mark irregular or elongated objects with more precision than a simple bounding box.

[Learn how to use](/annotation-tool/drawing-tools/polyline-2d)

***

## **Has Instances**

Instance Tracking should be toggled **ON** to enable object tracking when multiple objects of the same class appear within a [frame](/project-setup/pre-process-data#frame). Each object instance is assigned a unique identifier for differentiation. For example, the class 'Car' will have multiple instances such as car\_1, car\_2, car\_3, whereas a class like 'Vegetation' may typically be represented as a single instance encompassing the entire [frame](/project-setup/pre-process-data#frame).

***

## **Color**

Color to be represented for the annotation after marking it with the drawing tool. Users can select from the color picker or provide a HEX code.

***

## Segmentation Drawing Tools

### Brush Sphere

**Paintbrush 3D** is a tool used in 3D point cloud annotation that allows annotators to "paint" over specific areas of the 3D space.&#x20;

[Learn how to use](/annotation-tool/drawing-tools/brush-sphere).


# 3. Attributes

Define attributes on the right highlighted section below. The saved attribute(s) will appear in rows highlighted on the left of the image.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXesAhM050CAuyANM_xx-XE5AgO0_6Pt1KEk6AtpRZtTX3yszfyg-68tRaBmMMlkuVOVuhQ617PiJnB4eBtpBz7Fizd2HjtRs4Fd2qckA-dzCkCK_v0JRO5jjWERbABihyqK2qp1OQJEWA60617jcofSe8dL?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Create Attributes

To create a new attribute, the user has to give details of the following three sections:

1. [Attribute Type](#id-1.-attribute-type)
2. [UI Component](#id-2.-ui-component)
3. [Identity](#id-3.-identity)

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXejrsRwUWfcaxR4jALMUrvfsoni0LYvb4A4J0HUAS43iNHfJE_cGI5DPUA356l775vo6AOq7TVlx-h4KKshHs3yVqg4g1XltUAS_1QpbIf1QvZkhtXHKx7ytuf6CnWD2xwtFImanNsttOJcGdQW4PwjFsM?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

***

## 1. Attribute Type

### **A. Class Level**

Select this if the attribute is linked to a [class](/project-setup/create-recipe/2.-classes). The user must give the following inputs if the attribute type belongs to this one:

#### **Global Attribute: ON / OFF**

If this attribute is associated with all the classes created, toggle this **ON**.  For example, there are 2 classes: ‘Car’ and ‘Truck’. The ‘Headlight’ attribute can be marked as **Global** to link it to both the created classes. If the attribute is associated with only one or a few classes, leave this toggle **OFF**.  These can be linked to the specific classes in the [association](/project-setup/create-recipe/4.-associations) tab in the next step.&#x20;

<figure><img src="/files/LKIP1T6WkouQOOaYtKt2" alt="" width="375"><figcaption></figcaption></figure>

#### **Attribute Mode**

Specify which of the following mode it belongs to:

* **Constant:** Toggle this **ON** if the attribute value remains constant within a [frame](/project-setup/pre-process-data#frame) and across [frames](/project-setup/pre-process-data#frame) (i.e. the [batch](/project-setup/pre-process-data#batch)). For example, the value of a vehicle's *color* attribute cannot change across [frames](/project-setup/pre-process-data#frame). Continuing with this example, consider the below representation of object Car\_1 and attribute *color,*
  * The checkmarks indicate the presence of the Car\_1 object and its corresponding annotation on the specified sensor.
  * The **singular** color-filled boxes indicate that the constant attribute value remains **uniform** across the [batch](/project-setup/pre-process-data#batch) and within each [frame](/project-setup/pre-process-data#frame).

<figure><img src="/files/vwx1q8gz0fs6W3oegafO" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The constant attribute value will remain consistent across the entire sequence.
{% endhint %}

* **Time-Varying:** Toggle this **ON** if the attribute value remains constant within a [frame](/project-setup/pre-process-data#frame) but changes across the [frames](/project-setup/pre-process-data#frame) (i.e. the [batch](/project-setup/pre-process-data#batch)). For example, the value of a vehicle's *headlight* attribute will remain uniform within a [frame](/project-setup/pre-process-data#frame), however, can change across [frames](/project-setup/pre-process-data#frame). Continuing with this example, consider the below representation of object Car\_1 and attribute *headlight,* &#x20;
  * The checkmarks indicate the presence of the Car\_1 object and its corresponding annotation on the specified sensor.
  * The **singular** color-filled boxes within the [frame](/project-setup/pre-process-data#frame) indicate that the value remains **uniform.**
  * The **multiple** color-filled boxes across the [frame](/project-setup/pre-process-data#frame) indicate that the value can change with time.&#x20;

<figure><img src="/files/YopzS2rSOds2tC8eQF35" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The time-varying attribute value will stay consistent across different sensors within a single [frame](/project-setup/pre-process-data#frame) but may change across the sequence.
{% endhint %}

* **Sensor Specific:** Toggle this **ON** if the attribute changes both within a [frame](/project-setup/pre-process-data#frame) and across the [frames](/project-setup/pre-process-data#frame) (i.e. the [batch](/project-setup/pre-process-data#batch)). For example, the value of a vehicle's *occlusion* attribute will change both within and across [frames](/project-setup/pre-process-data#frame). Continuing with this example, consider the below representation of object Car\_1 and attribute *occlusion*, &#x20;
  * The checkmarks indicate the presence of the Car\_1 object and its corresponding annotation on the specified sensor.
  * The **multiple** color-filled boxes within the [frame](/project-setup/pre-process-data#frame) indicate that the value can change.
  * The **multiple** color-filled boxes across the [frame](/project-setup/pre-process-data#frame) indicate that the value can change with time.

<figure><img src="/files/0DWhXqDF0ZPZTfSevV9K" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
The sensor specific attribute value may change across different sensors within a single [frame](/project-setup/pre-process-data#frame) AND may change throughout the sequence.
{% endhint %}

***

<figure><img src="/files/7GMbMT61Ce9AGwjkwQZZ" alt=""><figcaption></figcaption></figure>

### **B. Task Level**

Choose this option if the attribute is associated with a specific [frame](/project-setup/pre-process-data#frame). For instance, the attribute ‘Foggy’ can be used by annotators to label a particular frame as ‘Foggy,’ indicating the scene's condition in that specific frame within the [batch](/project-setup/pre-process-data#batch).

There are two type of modes,

1. Time-Varying : This type of attribute propagates the value across the sequence to reduce the subject expert having to set it everytime on each frame.  However, when the user changes the value in the following frames, it will propagate it forward.

[Learn how to use](/annotation-tool/key-features/task-level-attribute-propagation#time-varying-task-level-attribute).

2. Manual : This type of attribute requires the subject expert to set the task level attribute for each frame manually.

[Learn how to use](/annotation-tool/key-features/task-level-attribute-propagation#manual-task-level-attribute).

### **C. Batch Level**

Choose this option if the attribute applies to all the [frames](/project-setup/pre-process-data#frame) within a [batch](/project-setup/pre-process-data#batch). For instance, the attribute ‘Time of Day’ can be used by annotators to highlight a specific time of day for the entire sequence.

***

## 2. UI Component

Indicate how the annotator should enter the values of the attribute created and whether it is optional for marking or not.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe6reXiinU09hdioQvezXdhE2Nyk_1cpqYbDbLp20xpTPPtLttdikTv9GcyTexh8MiBsqx6bR3iV4IpeFu5k-YbR_FFFJzSxcIqOk4SeXP2sE_yWkmZrBspdlbe4CCbv626KLrwKq7gr4Nspx7O2WOtemc?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

### **Boolean**&#x20;

The value of this attribute can either be true or false. When selected, a toggle appears at the end of the form called ‘**Default Value**’. To decide the default behaviour of the boolean attribute on the annotation tool toggle the Default Value switch;

* When switched off, the value is false on the annotation tool.
* When switched on, the value is true on the annotation tool.

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXc0WnFzbALcF6ZXSyfEONLXP4TsM5Nl70veh1CA2rohD8yM3ZcHRFknsbELxDts1a9DLKivfaRfSV6POxfD1DFA-XkBnrsoXj0_-ZCWbyQH-4s39GXuZwaB9r-NbwWN758n6hwlSHSgbwqlxQE5yiLY2LXC?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe8HpyIAqSjcuudrXDVWj_SHjO87ygJDx3i2GVEvPlBA8FQ7VriNf5__DkhBnYLK9gV0EK_3hMEhT5fGTdjtqXluz2joJeXpgLMOpj5fHhISCwj0dYhheFi6AvQa9xiiagaxJVTSihEGo-hqOhWERiuTKxj?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="188"><figcaption></figcaption></figure>

### **Inputbox**

Select this when the value is to be entered in an Input Box and define the condition of the text by selecting the input type. A toggle appears to mark this Input as Optional or not at the end of the form. **Note**: ‘Float’ in Input Type allows any numbers with decimal points.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdNj7nO5LTDyhs8a-lu-0QfWFqMz4uyezyamS6-FKSVFcROlDaucKCv-yNKb1Eai5qxPgpE-vwU5Urp9yH4TQ-Mcy29_YvNjyImvHzl2JD2lAoL60SFkf7nQG4Is0X-z88VZ-XeOg6XZWR4BD6mAj7HlnI?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="188"><figcaption></figcaption></figure>

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXc-c1E6Qvec-7hDqWCf4-leNl4Z71-wQNEbCqym4qZGPW48moyKdh2Lc1i9UeOdsdRZZVSxY3pMo9KkSu-gh8WF58rP_JHs0m_wsqf2-m003PVcdpZHgEzOpdGck4rspu62jUOxRlrRGWdv21aKQ6BEnr2l?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

### **Multi-Select**

When Attributes can have multiple values, this option is selected. Define the option name (Value, Text, Abbr.)

* Value: Enter the option name reflected in the output data
* Text: Enter the option name reflected in the [Annotation Tool](/annotation-tool)
* Abbreviation: Abbreviation reflecting in case of less space.&#x20;

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdq2djYnljFfYr_W3Gy-f1mOFvXMEY6H2UPE9TD0HCTbXPC5zFiu2c8QYNL2meEOIZGAbSz-hA9NVqmdsxi-Xu5NbCQ3GoN9KzpEExnVXdgGGsBmExpA8AYJjItBPev1Hd88SxJzIeYyBjgY8iI5lAOZh4?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

### **Select**

When attributes have a single value, this option is selected. The options will need to be defined like above. (Value, Text, Abbr)&#x20;


# 4. Associations

## Create Associations

This section allows the recipe creator to associate/link [attributes](/project-setup/create-recipe/3.-attributes) with [classes](/project-setup/create-recipe/2.-classes). This is helpful when a class is to be linked to one or more than one attribute and not all.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> If an attribute is associated with all the classes, it much more convenient to mark it as a [global](/project-setup/create-recipe/3.-attributes#global-attribute-on-off) attribute while creating a [class level attribute](https://docs.imerit-prod.io/project-setup/create-recipe/pages/8y4xwQ0lyWeilUzIlS9g#a.-class-level).&#x20;
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfGC_qHxTHbI_RTX_6qMRUbdSgmCKiqIiOnR9gjdp2DhZG_Jozx8BhsEaoGgxNjGNGSeNLTFdoJ6awD7lpim8VBqwWNq8r7dCYns459EoYK2ZpV-dzqQv4WLUSecITVX-tRigXDyZIXPBkE1OAKkEC7S4CX?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="188"><figcaption></figcaption></figure>

<figure><img src="/files/Dj5daxMV80Z2VHavuSsq" alt=""><figcaption></figcaption></figure>

* The *New Association* form on the right side (highlighted area in red) is used to create associations/links between [classes](/project-setup/create-recipe/2.-classes) and [attributes](/project-setup/create-recipe/3.-attributes) created in the prior steps.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeOw-g-Gl2YM-gE1iRqcND1B5QYVn2UD5f2-W4Xa-m_iPM0-nhvrZVqg1OZEFkSJaKx15ljTeFE0HYIDQvpieWUBu-SC8Uyn9RiBorgxdNjOALeWnMZkFrMptShPJZ_IOnEhX5kp-HNSzHf3PIT_JF3f3jb?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

* Users can select multiple [attributes](/project-setup/create-recipe/3.-attributes) and link them to a single [class](/project-setup/create-recipe/2.-classes). On saving, the association is reflected in rows on the left side (highlighted area in pink).
* All the class level attributes that were marked as [global](/project-setup/create-recipe/3.-attributes#attribute-type) during attribute creation are populated in the bottom left sections (highlighted area in yellow).
* Task level and batch level attributes that were created in the previous steps appear in their respective tabs in the bottom section (highlighted area in yellow).

***

## Create Relations

This section allows the recipe creator to create relationships between two classes with [instances](/project-setup/create-recipe/2.-classes#has-instances).&#x20;

{% hint style="warning" %}
Relations can be formed only between classes that have [instance](/project-setup/create-recipe/2.-classes#has-instances). Only these classes will appear in the selection dropdown of 'Subject' and 'Object' input.
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfN3SXI_m5wBrJzIBnyygVPPm3SfELfn7FhiPto7e5jlMApnl6S07ZCZj1Pk_jmW4jyAQPq50pW66pTWfC2Y5qwRZEItmJY1FGRdz2PUlWT4He_hnmC8iVCoT9qrllbFe018SpozqtoxiyDVQFO-sIg84A?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/UMy04CmZrFJ5R1WlMQcu" alt=""><figcaption></figcaption></figure>

* The *New Relation* form on the right side (highlighted area in red) is used to create a relationship between two classes. On saving changes, the relationship will get reflected in rows on the left side (highlighted area in pink).

  1. Enter Relation Name
  2. Choose a subject (child/following) class from the dropdown. For example, *Rider*
  3. Choose a object (parent/leading) class from the dropdown. For example, *Bicycle*

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcH7XOWylLOHDfFdOt4smajRJkOymTTn1rdHv3X8U9YJP9iByjILF8QL-nyy53Xz82Q_VFKqpTNIEzWsEnNoA6BheujTxDcDLjFCZmJLriUx0IbkbnG-43nxemu6bv4xpq4rLxXtq3Ogs5fNLhDy4KqySDJ?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

[Learn how to use Relationship](/annotation-tool/key-features/relationship).<br>


# 5. Publish Recipe

Once the Recipe is finalised, click ‘Mark Published’ so the recipe can be used in [Creating Taskflows](/project-setup/create-taskflow).

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeQD9x7OLoUuf6DNbWPP6aX6pzXDyEElZnY9K6ZRgJo4d7x-hcG76mxjx1HEeDUoOQqPjst9AhmNrVHzLAP30AI-YwYIsTKvvVq-zPxXX_Rwcqrr3927gi0-hYxgGiQTJlpvZQdw6OFlNLzHPPx8qxdYKA?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

* A recipe can be *cloned* to make edits and saved as a *New Recipe* draft.&#x20;
* Each recipe must have a unique name.
* Users can Clone or Archive recipes, from the gear icon on the Recipes listed on the Recipe Generator or from the Dashboard through the gear icon of the Solution.<br>


# Create Taskflow

A taskflow is defined as a channel used to ensure the labeling [task](/project-setup/pre-process-data#task) is executed in a defined order by experts mapped to the pipeline. This is built using *nodes* that allow defining number of rounds a [task](/project-setup/pre-process-data#task) would undergo in a specific sequence.&#x20;

Note: The system allows upto 3 *nodes*. User can name these nodes as per their desire. The system provides 3 samples as *templates*.

## How to Get Here

1. Go to the *Manage Taskflows* from the Solution listed on the [QuickServe Dashboard](/quickserve-platform) (from the gear icon).
2. User is taken to the *Taskflow Builder* section, where they can view all the taskflows created within the Solution and create new ones (if the user role permits).&#x20;
3. Click on the *+ New Taskflow* button on the top right.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXedsHcaLvWOyWATso9Jmi7wOXyp7Mt7bPudP4EkzMCdWsf_yVdBJWeZlxBBLj-n8jhNSCaxoJiQbjKF4C5btpJ_X8ybAHji-5WI7KSmpzeW1l-orZMIaRSlnTIXn94sF_4nOocFHDulKwOi0cFQxxigEzF4?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="188"><figcaption></figcaption></figure>

<figure><img src="/files/oUtY0WWjM9VNhUAoFM2c" alt=""><figcaption></figcaption></figure>


# 1. Taskflow Details

Users must fill in the taskflow details on the left (highlighted red area). The user has to define the taskflow order and function on the right.

<figure><img src="/files/pX1MT3aOmcnCA2MION5h" alt=""><figcaption></figcaption></figure>

## Taskflow Basic Details

### **Annotation Tool Selection**

* By default, the same tool is selected at the time of [creating recipe](/project-setup/create-recipe) i.e.  *iMerit LiDAR (Multisensor)*.&#x20;

  &#x20;

  <figure><img src="/files/I0gmNL0XljQR9DC4FXpX" alt="" width="375"><figcaption></figcaption></figure>

***

### **Select Taskflow Template**

On tool selection, the options to select a *Workflow Template* will appear right below. Selecting a template will define the number of *nodes* the [task](/project-setup/pre-process-data#task) will pass through in the labeling process. Learn how to [select a template](#taskflow-templates) (below).

***

### **Additional Information**

Give a Name and Description to the Taskflow.

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfrnkPNBC-DxiOXaG8dzguakru3gK02wm2KYXc24EYiIxssmweVTcKwJ3pywURVxnwSpRpyXMI9Kaiy4emr0Y2yAHgKjQdjpAq2LP4_JUiZxQoyq_F-5Xy3nH8G-_T8c8ZuOrmUkSy87TOxebqDvG31t3Qo?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

***

## Advanced Feature

<figure><img src="/files/bsXZeSijRTQDQpkJRESj" alt="" width="375"><figcaption></figcaption></figure>

### Timeout

The tool by default tracks an individual's time on each [frame](/project-setup/pre-process-data#frame).  However, this feature waits for x mins of idle time before the [time tracker](/annotation-tool/tool-layout#time-tracker) in the [annotation tool](/annotation-tool) comes to a stop till any activity is detected on the tool.

### Audit Errors

This UI helps manage the visibility of Issue Types for Auditors in the [Audit tool](/audit-tool). The Solution Owner can navigate to the UI and configure the Issue Types.

#### + New

*+ New* enables a user to create a new template.

<figure><img src="/files/rWc8m1UbyKkhD0wGTcCM" alt="" width="375"><figcaption></figcaption></figure>

1. Category: Errors are to be grouped so that they can be easily distinguishable on the UI and analytics can be prepared based on this category.
2. Color: A category is assigned a color so that on the Audit tool, an Auditor can associate which Issue(s) belong to the same category when they select an Issue from the list.
3. Add an [Issue Type](/audit-tool#issue-type-selection), that will be visible on the Audit tool
4. If a taskflow is
   1. being created, click on Publish Taskflow
   2. being modified, click on Update

#### Default Template

A default template is provided by QuickServe. A user can modify it to create a new template out of it.

<figure><img src="/files/sYPbAIqVkpBOCI53rgHG" alt="" width="375"><figcaption></figcaption></figure>

1. Select *Default Template*
2. Make modifications as needed
3. If a taskflow is
   1. being created, click on Publish Taskflow
   2. being modified, click on Update

#### Import Existing

Using an existing taskflow, the user can import the Audit Error template and continue modifying it.

<figure><img src="/files/3MxNkIDoHcybqKbxnDx3" alt="" width="375"><figcaption></figcaption></figure>

1. Select Import Existing
2. Select the taskflow from which to import
3. If a taskflow is
   1. being created, click on Publish Taskflow
   2. being modified, click on Update

### Validation Script

[Quickserve](/quickserve-platform) allows users to add and manage validation scripts in taskflows, ensuring validation at multiple stages like OP, QC, and Audit. You can create, edit, and track validation scripts both before and after publishing a taskflow. The system supports script version management, tracking all revisions post-publishing, accessing revision history and restoring previous versions.

<figure><img src="/files/8SgXIz57OtFYGuSrwH2H" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="info" %}
In case of any syntactical error, the platform will identify it and ask the user for resolution.
{% endhint %}

#### **Attaching a Validation Script - While Publishing Taskflow**

1. [Navigate](/project-setup/create-recipe#how-to-get-here) to the Advanced Features section.
2. Expand Validation Script section
3. Insert validation logic using appropriate decorators and function structures to specify the type of validation, such as frame-wise, class-wise, or task attribute validation.
4. Click Save

#### **After Publishing the Taskflow - After Publishing Taskflow**  <a href="#after-publishing-the-taskflow" id="after-publishing-the-taskflow"></a>

1. [Navigate](/project-setup/create-recipe#how-to-get-here) to the Advanced Features section.
2. Expand Validation Script section
3. Edit the validation script
4. Click Save

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Post-publication edits to the validation script will take affect to batches where the user will explicitly trigger the ‘Validation' feature again.
{% endhint %}

<figure><img src="/files/qTAyT7EPmj0C2j4nNI2B" alt="" width="375"><figcaption></figcaption></figure>

#### **Types of Validation Scripts** <a href="#types-of-validation-scripts" id="types-of-validation-scripts"></a>

Validation scripts are executed using a decorator-based approach. Each type of validation uses specific decorators to target different elements like frames, classes, or task attributes.

#### **1. Frame-wise Validation**

Frame-wise validation ensures that each individual frame is validated according to specific rules. A decorator for this type of validation specifies that the function will process one frame at a time.

**Decorator Usage:**

* The decorator `@dec({"type": "frame"})` tells the system that the function is working on individual frame data.

**Function Definition:**

* The function receives one parameter, which is the data for a specific frame.
* The function processes this frame and can return an error log if any issue is found.

#### **2. Class Validation Across Multiple Frames**

Class validation checks specific classes across multiple frames. This ensures that particular classes (e.g., "Vehicle", "Trucks", etc.) are consistently annotated across all frames.

**Decorator Usage:**

* The decorator `@dec({"type": "object", "selector": "class", "value": ["<class1>", "<class2>"]})` tells the system to pass annotations of the specified classes across all frames into the function.

**Function Definition:**

* The function receives one parameter for each specified class. If you validate two classes, you need two parameters.
* The function compares or processes the classes across multiple frames.

#### **3. Task-wise Attribute Validation Across Frames**

This type of validation ensures that attributes related to a task are validated across all frames in the task.

**Decorator Usage:**

* The decorator `@dec({"type": "attribute", "selector": "task"})` indicates that the function will work with task-level attributes across multiple frames.

**Function Definition:**

* The function receives one parameter that includes all attributes related to the task, across all frames.

[Learn how to use](/annotation-tool/key-features/interactive-validations)

***

## Taskflow Templates

On tool selection, the options to select a workflow template will appear. Selecting a Template will define the number of Nodes the Task will pass through in the labeling Process.&#x20;

{% hint style="info" %}
A **Node** defines the number of rounds and the order in which a task passes through the labelling process.&#x20;
{% endhint %}

Users can start building their Taskflow by picking one of the 3 Templates: 1-3 Node Templates available.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcyKCaPgM-sefdsWNrOZNFjVL8E_KEvuKz9Hx5glRgeXQ37teZolLT3WRe5-DiHABBAx2XuYo-GtAkgRYq1xJU6d798lxwOh4h2N-j9owPvRgVFNxE7UkOF3Z9HKB7S-ETkkcADd8xesRuCFthrsDDqVjdt?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

### Choosing a Template based on Nodes:&#x20;

1. Choose the template based on the number of rounds a task pass through the labelling process.&#x20;
2. A maximum of three nodes can be defined.
3. Multiple users can work simultaneously on the first node in different [batches](/project-setup/pre-process-data#batch).
4. Example of choosing Templates:
   * Choose 3 Node Template if there is a need for the to undergo 3 rounds.

     Eg: 1 to Create, 2 to Check & Edit.
   * Choose 2 Node Templates if there is a need for 2 rounds.

     Eg: 1 to Create annotations and 1 to Check.
   * Choose 1 Node Template if multiple rounds are not required and one is enough.

{% hint style="info" %}
The templates use **dummy node names:** OP(Operator), QC (Quality Check), Super QC. After picking the template the user can see its reflection on the pink highlighted area where they can rename and define functions at each node.
{% endhint %}

<figure><img src="/files/EOfJ2iOmAi9voVQI4uQP" alt="" width="375"><figcaption></figcaption></figure>


# 2. Taskflow Preview & Edit

## Taskflow Preview&#x20;

The template selected will reflect on the right, under Preview. The [Nodes](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) are represented in Top to Bottom order (Red, Blue, Black) through which the Task will flow.&#x20;

* 3 Node Representation&#x20;

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfcvbTyAljsZYpu1HPS68rpsecvPNMkgqMI3RFXkn5VeJqyCbUDaZNOHPrzsYCkaTH7iZo6Q3Ue9ZmIYBFqRjgOtmo4k_xO506zHClqwb6SMYc3JlIWcQqn37iV8DOIR23sb_UMpNQgm1pDtT7sSVdQiEOF?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure></div>
* 2 Node Representation

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdneqb6GB1zHd5TsFO0VHReUnJoTlMCC9ImMgnfv7ngzgLlyDHD3tgXwWtndintVtCcPUdsc2yEEz_pWvKFALxfSZhJn6SZlXmDYxdtvM2AszolIcZzZK-z3bqQml75s5ze3d5LRFXeeKlZwgKjYivhL_Lx?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure></div>
* Single Node Representation

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXciNoDQ_kNHfjcJQZCEKfPzG7YxY3aNpo-tVpq5iguKgUwL_WvZQ1FsR6kzOpSOno8EXQRL8hFHahwnkNN_epspnY05YzKCqhVMXEuf2DjzSh6dgnvt_b5kbwCKix_ViezhjDZZsgy421xtMgjxYw3u5DAs?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure></div>

## Editing Templates

Double-click on each Node on the preview, to add its details in the 'Node Details' Panel which opens to the right.&#x20;

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdoKxfLs3nAP6DZAXj_isx7JaLfk8FtRH1TWww29xGxcyuYq4BxnhkkdYM47WzNBiNnjUVfgORaZR_eJoviKg_Ap5bqT6xyN8WkZf0xQUUOJ6hxFCN7HIgiFaxLMew6RdaKsvqJBDdEd4f-9izIz9_aK12N?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure></div>

* The Node Name and Description can be edited here.
* **Recipe Selection**: All the recipes within the Solution belonging to the *iMerit LiDAR (Multisensor)* recipe will appear in the dropdown. Select the desired recipe.
* **Deliverable Type**: Specify the desired format of the output. (Jason, LASer)
* **Deliverable Option**: Specify the grouping/ non-grouping of the output file structure. The output file gets generated per [frame](/project-setup/pre-process-data#frame).
* **Skip Frames**: The annotation tool restricts annotators to attempt all tasks, frame by frame, in chronological order. By toggling this ON, annotators will be able to jump between frame ranges.

  For example, in a batch with 10 frames, if skipping is enabled, user will be able to jump from frame 1 directly to frame 7. Else the user will have to submit the 1st frame to access the 2nd one.&#x20;
* **Revert Task**: This Input only appears for the last node defined. Enabling this will allow reverting of task to the previous Node.
* **Countdown Timer**:  Toggle this ON to put a time limit to the [batch](/project-setup/pre-process-data#data-terminology) of [frames](/project-setup/pre-process-data#frame) that loads on the [annotation tool](/annotation-tool)

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfP_a0knFmOT5BsNdYglb9Frsc_Re8LVfIwM0mItxqUZouDIsM-IqwPHa8rljWYb4J5S0LUfkgwv9Lf5V2UG66kg-jcqktCDce94EicVch82zYoWDHk6ft18-lyDmi9Yqnt-GePkD8TNHh9YSVU4P_XdoZQ?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

  <div align="center"><figure><img src="/files/wj041jnWvR7zxa47mlY7" alt="" width="563"><figcaption></figcaption></figure></div>


# 3. Publish Taskflow

Once the Taskflow is configured, click the *Mark Published* so it can be used in task flows by hitting the button *Mark Published* button.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdOMHwWiovRnQBGV8hEJJD0sgreJ8HimTv-yIuHoo3HoUF9Yxd0zEQR4EgTE0qCM7SQjBhGfuAFOKOcGBeIA8E6UKMsrtmWgavXCS12e_bL3JWfX7LiOzq06DPgEsTw6LJPMOQq3hShfcPzJ2FcFLZZ_lE_?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>


# Build Jobs

A Job is defined as the labelling work created by linking a [taskflow](/project-setup/create-taskflow) with the [recipe](/project-setup/create-recipe) and importing the segregated data.

## How to Get Here

1. Go to the *Job Builder* from the Solution listed on the [QuickServe Dashboard](/quickserve-platform) (from the gear icon).

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfSHf0GWQCXg1QzH55SohvUS-AN2JgpxOER2FFbKr1HFuiVM6i7Rv2oXrHy4kv3h-Axc4ASNyQtGAIzVknBTnOW7MgK1GpV0vU5oPkAUjne5nMOgXE3Np66FofR1UwIIalnVkvInkIsuerA7YUviW_yycGS?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

2. User is taken to the Job Builder section, where they can view all the Jobs built within the Solution and build new ones (provided the user role permits).&#x20;
3. Click on the *+ New Job* button on the top right.

<figure><img src="/files/mXGZjNCCQUiYXk9dbPH9" alt=""><figcaption></figcaption></figure>


# 1. Job Details

The user must fill in the basic details of the [Job](/project-setup/build-jobs) and link [taskflow](/project-setup/create-taskflow) to it before importing the data.

<figure><img src="/files/DXAgBUf17WygSz7MwkV5" alt=""><figcaption></figcaption></figure>

## **Taskflow Selection**:

Link *taskflow* from the task selection drop-down. All the published taskflows within the Solution  appear here.

## **Name and Description**:&#x20;

Give a unique name to the Job. The description of the Job is optional for internal understanding.


# 2. Data Import

After the [Job details](/project-setup/build-jobs/1.-job-details) are saved in [Job Details](/project-setup/build-jobs/1.-job-details) step, the user can proceed to the *New Import* tab on the left navigation to start importing data.

<figure><img src="/files/AqTaFJOSdrbIo2WL2uT3" alt=""><figcaption></figcaption></figure>

## Data Upload

It is necessary to arrange the data in the tool ingestible format. View [how to pre-process data](/project-setup/pre-process-data) before you upload the data using the [S3 Bucket](https://docs.imerit-prod.io/project-setup/build-jobs/pages/egv6MSBkKqcIBNPxkVlW#id-3.-data-storage).

<figure><img src="/files/8geglSFJCxpSd40YTFHy" alt=""><figcaption></figcaption></figure>

## Data Grouping

Define the limit of [frames](/project-setup/pre-process-data#frame) that will get loaded in the form of [batches](/project-setup/pre-process-data#batch) for the SME (subject matter expert) using the *annotation tool*. This can be done by selecting one of the two options:

### A. Group by Folder &#x20;

The [frames](/project-setup/pre-process-data#frame) will load as a single [batch](/project-setup/pre-process-data#batch) based on the data folders created during [data segregation](https://docs.imerit-prod.io/project-setup/build-jobs/pages/egv6MSBkKqcIBNPxkVlW#id-2.-segregate-data-in-folder-s).  For example, if the *data folder* uploaded has 1 folder with 100 frames data, 1 batch is created with 100 frames.

### B. Group with Limit

The number of [frames](/project-setup/pre-process-data#frame) that will load within a [batch](/project-setup/pre-process-data#batch) is based on the desired limit set. For example, if the *data folder* uploaded has 1 folder with 100 frames data, and the batch limit is set to 30, the task delegation platform will create 3 batches of 30 frames each and 1 batch of 10 frames.

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe2bMxrdyTQEWgm5O2Aw49fVGjcOAnU4QNlSMhm7L2wV7afwzl5uhpQrw5va-xoZqhiJ8wggRIIBrxFvDTkDSYc3tyUyLIH0Bmv8PVTz_lPHltNDNs3l55R4ToXksQhZT0ueNnvJ0qzDZbYSD7lYId5x-Q?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>


# 3. Data Upload Status

The uploading status of the data is visible in the *Import Status* tab from the left navigation.

<figure><img src="/files/Q2ksiM4BB8Z8ih4ET95V" alt=""><figcaption></figcaption></figure>

The table reflects the uploading status. The tabs over the table represent the stage of the upload:

* Pending: Queued and waiting to be processed
* In Progress: Ongoing uploads
* Completed: Upload successful
* Failed: Failed Uploads&#x20;

The report can also be downloaded in CSV format by clicking the *Download Report* button on the top right.


# 4. Launch Task

After the Jobs are uploaded, one can access the [annotation tool](/annotation-tool) by clicking on *All Batches* from the left navigation followed by *Launch Task*.&#x20;

<figure><img src="/files/L8UwweVANOxhSaU49RHu" alt=""><figcaption></figcaption></figure>

* Access to the *annotation tool* for each of the *nodes* defined will have separate access. &#x20;
* For the above screen example, the *taskflow template* has 3 *nodes* defined. Hence there are 3 buttons for *launching* the task for each of the nodes.

  <figure><img src="/files/6EUnBC5Xt9jFaI3jEZMV" alt=""><figcaption></figcaption></figure>

Learn how to use the Tool here: [Annotation Tool Guide](/annotation-tool)


# Batch Export

After a task gets submitted in any of the [nodes](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) it is ready for export. Click on *Batch Export* from the left navigation.

<figure><img src="/files/FYpfFfPRl3ENd4H5XUBh" alt=""><figcaption></figcaption></figure>

* The table on the right reflects all the [batches](/project-setup/pre-process-data#batch) along with their status. The batches can be filtered by [nodes](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) and Progress Status

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeHlcEGwAvYJW4Dxu1t2dbbMuTYPxGRUOYosRWSIAbwKkYWLUNVTyiWLLPm4yTBaeEJCSARseMU3oiWcZjMxNR-sWN_PjT5CZbYIfEVnWlE5SWAyW6EpSvIYKnEef7zwQYNthUoAcflbIM_mscYz1HBg2Y?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

* Batches with the status ‘Ready for Export’ are the only ones that can be exported.
  1. Select the ones you would like to export and click on ‘Request Export’
  2. This action sends an email to the user’s registered iMerit email ID which contains an AWS-signed URL valid for 1 hour for download.
  3. The output files are in the format specified in the Taskflow configuration.

## JSON Schema of Tool Output

Below attached file contains the schema definition of the output generated from the system on which Jinja template will be applied to get custom output.

<details>

<summary>JSON Schema of Tool Output</summary>

<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FFEHYVvnZVh4OAP5mQ2EN%2FjsonSchema_New.json?alt=media&token=ae67064c-5613-467c-8449-ec8133c5b44e>

```json
{
    "$schema": "https://json-schema.org/draft/2019-09/schema",
    "type": "object",
    "default": {},
    "title": "PointCloud Tool Output Schema",
    "required": [
        "operation",
        "output"
    ],
    "properties": {
        "operation": {
            "type": "object",
            "default": {},
            "title": "The operation Schema",
            "required": [
                "batch_code",
                "customData",
                "emp_code",
                "engagement_code",
                "job_code"
            ],
            "properties": {
                "batch_code": {
                    "type": "string",
                    "default": "",
                    "title": "The batch_code Schema",
                    "examples": [
                        "BC-66c4a48851017200011cc9b4"
                    ]
                },
                "customData": {
                    "type": "array",
                    "default": [],
                    "title": "The customData Schema",
                    "items": {
                        "type": "object",
                        "default": {},
                        "title": "A Schema",
                        "properties": {
                            "key": {
                                "type": "string",
                                "default": "",
                                "title": "The key Schema"
                            },
                            "data": {
                                "type": "object",
                                "default": {},
                                "title": "The data Schema",
                                "examples": [{
                                    "B1": 2
                                }]
                            }
                        },
                        "examples": [{
                            "key": "batchAttributes",
                            "data": {
                                "B1": 2
                            }
                        }]
                    },
                    "examples": [
                        [{
                            "key": "batchAttributes",
                            "data": {
                                "B1": 2
                            }
                        }]
                    ]
                },
                "emp_code": {
                    "type": "string",
                    "default": "",
                    "title": "The emp_code Schema",
                    "examples": [
                        "I1054"
                    ]
                },
                "engagement_code": {
                    "type": "string",
                    "default": "",
                    "title": "The engagement_code Schema",
                    "examples": [
                        "SC-6684130e9ffabb00010d5191"
                    ]
                },
                "job_code": {
                    "type": "string",
                    "default": "",
                    "title": "The job_code Schema",
                    "examples": [
                        "JC-66b4a2c3498bb0a056276479"
                    ]
                }
            },
            "examples": [{
                "batch_code": "BC-66c4a48851017200011cc9b4",
                "customData": [{
                    "key": "batchAttributes",
                    "data": {
                        "B1": 2
                    }
                }],
                "emp_code": "I1054",
                "engagement_code": "SC-6684130e9ffabb00010d5191",
                "job_code": "JC-66b4a2c3498bb0a056276479"
            }]
        },
        "output": {
            "type": "array",
            "default": [],
            "title": "The output Schema",
            "items": {
                "oneOf": [
                    {
                        "type": "object",
                        "default": {},
                        "title": "The relationship Schema",
                        "required": [
                            "seq_no",
                            "key",
                            "relationship"
                        ],
                        "properties": {
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            },
                            "key": {
                                "type": "string",
                                "default": "",
                                "title": "The key Schema",
                                "examples": [
                                    "relationship_1"
                                ]
                            },
                            "relationship": {
                                "type": "array",
                                "default": [],
                                "title": "The relationship Schema",
                                "items": {
                                    "type": "object",
                                    "default": {},
                                    "title": "A Schema",
                                    "required": [
                                        "label",
                                        "peers"
                                    ],
                                    "properties": {
                                        "label": {
                                            "type": "string",
                                            "default": "",
                                            "title": "The label Schema",
                                            "examples": [
                                                "Joined"
                                            ]
                                        },
                                        "peers": {
                                            "type": "array",
                                            "default": [],
                                            "title": "The peers Schema",
                                            "items": {
                                                "type": "object",
                                                "default": {},
                                                "title": "A Schema",
                                                "required": [
                                                    "objectClass",
                                                    "subjectClasses"
                                                ],
                                                "properties": {
                                                    "objectClass": {
                                                        "type": "string",
                                                        "default": "",
                                                        "title": "The objectClass Schema",
                                                        "examples": [
                                                            "8f4614de-bc3e-40cf-b2a6-1a331e888043"
                                                        ]
                                                    },
                                                    "subjectClasses": {
                                                        "type": "array",
                                                        "default": [],
                                                        "title": "The subjectClasses Schema",
                                                        "items": {
                                                            "type": "string",
                                                            "default": "",
                                                            "title": "A Schema",
                                                            "examples": [
                                                                "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                                            ]
                                                        },
                                                        "examples": [
                                                            [
                                                                "6baf12db-a939-4fa2-8803-a37514dcf6ec"]
                                                        ]
                                                    }
                                                },
                                                "examples": [{
                                                    "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                                                    "subjectClasses": [
                                                        "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                                    ]
                                                }]
                                            },
                                            "examples": [
                                                [{
                                                    "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                                                    "subjectClasses": [
                                                        "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                                    ]
                                                }]
                                            ]
                                        }
                                    },
                                    "examples": [{
                                        "label": "Joined",
                                        "peers": [{
                                            "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                                            "subjectClasses": [
                                                "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                            ]
                                        }]
                                    }]
                                },
                                "examples": [
                                    [{
                                        "label": "Joined",
                                        "peers": [{
                                            "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                                            "subjectClasses": [
                                                "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                            ]
                                        }]
                                    }]
                                ]
                            }
                        },
                        "examples": [{
                            "seq_no": "1",
                            "key": "relationship_1",
                            "relationship": [{
                                "label": "Joined",
                                "peers": [{
                                    "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                                    "subjectClasses": [
                                        "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                    ]
                                }]
                            }]
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "formInput Schema",
                        "required": [
                            "key",
                            "seq_no",
                            "timeSpent",
                            "taskAttribute"
                        ],
                        "properties": {
                            "key": {
                                "type": "string",
                                "default": "",
                                "title": "The key Schema",
                                "examples": [
                                    "formInput_1"
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            },
                            "timeSpent": {
                                "type": "integer",
                                "default": 0,
                                "title": "The timeSpent Schema",
                                "examples": [
                                    299
                                ]
                            },
                            "taskAttribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taskAttribute Schema",
                                "required": [
                                ],
                                "properties": {
                                },
                                "examples": [{
                                    "Grass": "test"
                                }]
                            }
                        },
                        "examples": [{
                            "key": "formInput_1",
                            "seq_no": "1",
                            "timeSpent": 299,
                            "taskAttribute": {
                                "Grass": "test"
                            }
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "polyline2d Schema",
                        "required": [
                            "id",
                            "object_type",
                            "class",
                            "taxonomy_attribute",
                            "identity",
                            "classColor",
                            "key",
                            "seq_no",
                            "geometry",
                            "order",
                            "referenceIndex"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "4fd215a4-784d-475c-a84a-c6dbead310b4"
                                ]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "polyline2d"
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "stop_line"
                                ]
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    1
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#F57F66"
                                ]
                            },
                            "key": {
                                "type": "string",
                                "default": "",
                                "title": "The key Schema",
                                "examples": [
                                    "1_4fd215a4-784d-475c-a84a-c6dbead310b4"
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "coordinates"
                                ],
                                "properties": {
                                    "coordinates": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The coordinates Schema",
                                        "items": {
                                            "type": "object",
                                            "title": "A Schema",
                                            "required": [
                                                "x",
                                                "y"
                                            ],
                                            "properties": {
                                                "x": {
                                                    "type": "number",
                                                    "title": "The x Schema",
                                                    "examples": [
                                                        960.0267300009727,
                                                        1014.4160354733467,
                                                        1048.7671796679497
                                                    ]
                                                },
                                                "y": {
                                                    "type": "number",
                                                    "title": "The y Schema",
                                                    "examples": [
                                                        57.251907885074615,
                                                        141.22137520462275,
                                                        263.3587773889303
                                                    ]
                                                }
                                            },
                                            "examples": [{
                                                "x": 960.0267300009727,
                                                "y": 57.251907885074615
                                            },
                                            {
                                                "x": 1014.4160354733467,
                                                "y": 141.22137520462275
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            }]
                                        },
                                        "examples": [
                                            [{
                                                "x": 960.0267300009727,
                                                "y": 57.251907885074615
                                            },
                                            {
                                                "x": 1014.4160354733467,
                                                "y": 141.22137520462275
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            },
                                            {
                                                "x": 1048.7671796679497,
                                                "y": 263.3587773889303
                                            }]
                                        ]
                                    }
                                },
                                "examples": [{
                                    "coordinates": [{
                                        "x": 960.0267300009727,
                                        "y": 57.251907885074615
                                    },
                                    {
                                        "x": 1014.4160354733467,
                                        "y": 141.22137520462275
                                    },
                                    {
                                        "x": 1048.7671796679497,
                                        "y": 263.3587773889303
                                    },
                                    {
                                        "x": 1048.7671796679497,
                                        "y": 263.3587773889303
                                    },
                                    {
                                        "x": 1048.7671796679497,
                                        "y": 263.3587773889303
                                    }]
                                }]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    0
                                ]
                            }
                        },
                        "examples": [{
                            "id": "4fd215a4-784d-475c-a84a-c6dbead310b4",
                            "object_type": "polyline2d",
                            "class": "stop_line",
                            "taxonomy_attribute": {},
                            "identity": 1,
                            "classColor": "#F57F66",
                            "key": "1_4fd215a4-784d-475c-a84a-c6dbead310b4",
                            "seq_no": "1",
                            "geometry": {
                                "coordinates": [{
                                    "x": 960.0267300009727,
                                    "y": 57.251907885074615
                                },
                                {
                                    "x": 1014.4160354733467,
                                    "y": 141.22137520462275
                                },
                                {
                                    "x": 1048.7671796679497,
                                    "y": 263.3587773889303
                                },
                                {
                                    "x": 1048.7671796679497,
                                    "y": 263.3587773889303
                                },
                                {
                                    "x": 1048.7671796679497,
                                    "y": 263.3587773889303
                                }]
                            },
                            "order": 0,
                            "referenceIndex": 0
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "cuboid Schema",
                        "required": [
                            "id",
                            "identity",
                            "class",
                            "color",
                            "classColor",
                            "geometry",
                            "object_type",
                            "taxonomy_attribute",
                            "order",
                            "verticalLimit",
                            "groundClippingMode",
                            "referenceIndex",
                            "key",
                            "seq_no"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                ]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    1
                                ]
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "traffic_light"
                                ]
                            },
                            "color": {
                                "type": "string",
                                "default": "",
                                "title": "The color Schema",
                                "examples": [
                                    ""
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#90668E"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "boxSize",
                                    "position",
                                    "rotation",
                                    "clipTask",
                                    "referenceSourceIds"
                                ],
                                "properties": {
                                    "boxSize": {
                                        "type": "object",
                                        "default": {},
                                        "title": "The boxSize Schema",
                                        "required": [
                                            "x",
                                            "y",
                                            "z"
                                        ],
                                        "properties": {
                                            "x": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The x Schema",
                                                "examples": [
                                                    4.129600195331778
                                                ]
                                            },
                                            "y": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The y Schema",
                                                "examples": [
                                                    4.129600195331778
                                                ]
                                            },
                                            "z": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The z Schema",
                                                "examples": [
                                                    4.129600195331778
                                                ]
                                            }
                                        },
                                        "examples": [{
                                            "x": 4.129600195331778,
                                            "y": 4.129600195331778,
                                            "z": 4.129600195331778
                                        }]
                                    },
                                    "position": {
                                        "type": "object",
                                        "default": {},
                                        "title": "The position Schema",
                                        "required": [
                                            "x",
                                            "y",
                                            "z"
                                        ],
                                        "properties": {
                                            "x": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The x Schema",
                                                "examples": [
                                                    -10.400499916076654
                                                ]
                                            },
                                            "y": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The y Schema",
                                                "examples": [
                                                    10.498999786376956
                                                ]
                                            },
                                            "z": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The z Schema",
                                                "examples": [
                                                    -0.8000000000000003
                                                ]
                                            }
                                        },
                                        "examples": [{
                                            "x": -10.400499916076654,
                                            "y": 10.498999786376956,
                                            "z": -0.8000000000000003
                                        }]
                                    },
                                    "rotation": {
                                        "type": "object",
                                        "default": {},
                                        "title": "The rotation Schema",
                                        "required": [
                                            "x",
                                            "y",
                                            "z"
                                        ],
                                        "properties": {
                                            "x": {
                                                "type": "integer",
                                                "default": 0,
                                                "title": "The x Schema",
                                                "examples": [
                                                    0
                                                ]
                                            },
                                            "y": {
                                                "type": "integer",
                                                "default": 0,
                                                "title": "The y Schema",
                                                "examples": [
                                                    0
                                                ]
                                            },
                                            "z": {
                                                "type": "integer",
                                                "default": 0,
                                                "title": "The z Schema",
                                                "examples": [
                                                    0
                                                ]
                                            }
                                        },
                                        "examples": [{
                                            "x": 0,
                                            "y": 0,
                                            "z": 0
                                        }]
                                    },
                                    "clipTask": {
                                        "type": "integer",
                                        "default": 0,
                                        "title": "The clipTask Schema",
                                        "examples": [
                                            1
                                        ]
                                    },
                                    "referenceSourceIds": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The referenceSourceIds Schema",
                                        "items": {},
                                        "examples": [
                                            []
                                        ]
                                    }
                                },
                                "examples": [{
                                    "boxSize": {
                                        "x": 4.129600195331778,
                                        "y": 4.129600195331778,
                                        "z": 4.129600195331778
                                    },
                                    "position": {
                                        "x": -10.400499916076654,
                                        "y": 10.498999786376956,
                                        "z": -0.8000000000000003
                                    },
                                    "rotation": {
                                        "x": 0,
                                        "y": 0,
                                        "z": 0
                                    },
                                    "clipTask": 1,
                                    "referenceSourceIds": []
                                }]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "cuboid"
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "required": [
                                ],
                                "properties": {
                                },
                                "examples": [{
                                    "traffic_light_activity_state": [],
                                    "traffic_light_is_occluded": false
                                }]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "verticalLimit": {
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 2,
                                "title": "The verticalLimit Schema",
                                "items": {
                                    "type": "number",
                                    "title": "A Schema",
                                    "examples": [
                                        -16.6,
                                        2.9000007629394524
                                    ]
                                },
                                "examples": [
                                    [-16.6,
                                        2.9000007629394524
                                    ]
                                ]
                            },
                            "groundClippingMode": {
                                "type": "integer",
                                "default": 0,
                                "title": "The groundClippingMode Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    -1
                                ]
                            },
                            "key": {
                                "type": "string",
                                "default": "",
                                "title": "The key Schema",
                                "examples": [
                                    "1_6baf12db-a939-4fa2-8803-a37514dcf6ec"
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            }
                        },
                        "examples": [{
                            "id": "6baf12db-a939-4fa2-8803-a37514dcf6ec",
                            "identity": 1,
                            "class": "traffic_light",
                            "color": "",
                            "classColor": "#90668E",
                            "geometry": {
                                "boxSize": {
                                    "x": 4.129600195331778,
                                    "y": 4.129600195331778,
                                    "z": 4.129600195331778
                                },
                                "position": {
                                    "x": -10.400499916076654,
                                    "y": 10.498999786376956,
                                    "z": -0.8000000000000003
                                },
                                "rotation": {
                                    "x": 0,
                                    "y": 0,
                                    "z": 0
                                },
                                "clipTask": 1,
                                "referenceSourceIds": []
                            },
                            "object_type": "cuboid",
                            "taxonomy_attribute": {
                                "traffic_light_activity_state": [],
                                "traffic_light_is_occluded": false
                            },
                            "order": 0,
                            "verticalLimit": [
                                -16.6,
                                2.9000007629394524
                            ],
                            "groundClippingMode": 0,
                            "referenceIndex":
                                -1,
                            "key": "1_6baf12db-a939-4fa2-8803-a37514dcf6ec",
                            "seq_no": "1"
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "rectangle Schema",
                        "required": [
                            "id",
                            "object_type",
                            "class",
                            "taxonomy_attribute",
                            "drawable_attribute",
                            "identity",
                            "classColor",
                            "seq_no",
                            "geometry",
                            "order",
                            "referenceIndex"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "20f279ac-e415-4ba2-8cb5-53d7e53e7cc1"
                                ]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "rectangle"
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "yield_line"
                                ]
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "drawable_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The drawable_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    1
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#B4C3F0"
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "coordinates",
                                    "pointCoordinates"
                                ],
                                "properties": {
                                    "coordinates": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The coordinates Schema",
                                        "items": {
                                            "type": "object",
                                            "title": "A Schema",
                                            "required": [
                                                "x",
                                                "y"
                                            ],
                                            "properties": {
                                                "x": {
                                                    "type": "number",
                                                    "title": "The x Schema",
                                                    "examples": [
                                                        636.5534354522824,
                                                        732.9274794012308
                                                    ]
                                                },
                                                "y": {
                                                    "type": "number",
                                                    "title": "The y Schema",
                                                    "examples": [
                                                        346.3740460574627,
                                                        266.2213761359453
                                                    ]
                                                }
                                            },
                                            "examples": [{
                                                "x": 636.5534354522824,
                                                "y": 346.3740460574627
                                            },
                                            {
                                                "x": 636.5534354522824,
                                                "y": 266.2213761359453
                                            },
                                            {
                                                "x": 732.9274794012308,
                                                "y": 266.2213761359453
                                            },
                                            {
                                                "x": 732.9274794012308,
                                                "y": 346.3740460574627
                                            }]
                                        },
                                        "examples": [
                                            [{
                                                "x": 636.5534354522824,
                                                "y": 346.3740460574627
                                            },
                                            {
                                                "x": 636.5534354522824,
                                                "y": 266.2213761359453
                                            },
                                            {
                                                "x": 732.9274794012308,
                                                "y": 266.2213761359453
                                            },
                                            {
                                                "x": 732.9274794012308,
                                                "y": 346.3740460574627
                                            }]
                                        ]
                                    },
                                    "pointCoordinates": {
                                        "type": "object",
                                        "default": {},
                                        "title": "The pointCoordinates Schema",
                                        "required": [
                                            "x",
                                            "y"
                                        ],
                                        "properties": {
                                            "x": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The x Schema",
                                                "examples": [
                                                    684.7404597401619
                                                ]
                                            },
                                            "y": {
                                                "type": "number",
                                                "default": 0.0,
                                                "title": "The y Schema",
                                                "examples": [
                                                    306.2977083027363
                                                ]
                                            }
                                        },
                                        "examples": [{
                                            "x": 684.7404597401619,
                                            "y": 306.2977083027363
                                        }]
                                    }
                                },
                                "examples": [{
                                    "coordinates": [{
                                        "x": 636.5534354522824,
                                        "y": 346.3740460574627
                                    },
                                    {
                                        "x": 636.5534354522824,
                                        "y": 266.2213761359453
                                    },
                                    {
                                        "x": 732.9274794012308,
                                        "y": 266.2213761359453
                                    },
                                    {
                                        "x": 732.9274794012308,
                                        "y": 346.3740460574627
                                    }],
                                    "pointCoordinates": {
                                        "x": 684.7404597401619,
                                        "y": 306.2977083027363
                                    }
                                }]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    0
                                ]
                            }
                        },
                        "examples": [{
                            "id": "20f279ac-e415-4ba2-8cb5-53d7e53e7cc1",
                            "object_type": "rectangle",
                            "class": "yield_line",
                            "taxonomy_attribute": {},
                            "drawable_attribute": {},
                            "identity": 1,
                            "classColor": "#B4C3F0",
                            "seq_no": "1",
                            "geometry": {
                                "coordinates": [{
                                    "x": 636.5534354522824,
                                    "y": 346.3740460574627
                                },
                                {
                                    "x": 636.5534354522824,
                                    "y": 266.2213761359453
                                },
                                {
                                    "x": 732.9274794012308,
                                    "y": 266.2213761359453
                                },
                                {
                                    "x": 732.9274794012308,
                                    "y": 346.3740460574627
                                }],
                                "pointCoordinates": {
                                    "x": 684.7404597401619,
                                    "y": 306.2977083027363
                                }
                            },
                            "order": 0,
                            "referenceIndex": 0
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "Polygon2d Schema",
                        "required": [
                            "id",
                            "object_type",
                            "class",
                            "taxonomy_attribute",
                            "drawable_attribute",
                            "identity",
                            "classColor",
                            "seq_no",
                            "geometry",
                            "order",
                            "referenceIndex"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "8a1ac207-fc34-4bcb-a6c4-bb9adc2598aa"
                                ]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "polygon2d"
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "construction_vehicle"
                                ]
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "examples": [{
                                    "occlusion": false,
                                    "towing": [],
                                    "left_turn_signal": false,
                                    "right_turn_signal": false
                                }]
                            },
                            "drawable_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The drawable_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    1
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#0FDF62"
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "coordinates"
                                ],
                                "properties": {
                                    "coordinates": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The coordinates Schema",
                                        "items": {
                                            "type": "object",
                                            "title": "A Schema",
                                            "required": [
                                                "x",
                                                "y"
                                            ],
                                            "properties": {
                                                "x": {
                                                    "type": "number",
                                                    "title": "The x Schema",
                                                    "examples": [
                                                        733.8816757947206,
                                                        739.6068726629019,
                                                        834.0725284516811,
                                                        903.7290132343769,
                                                        908.4999952018261
                                                    ]
                                                },
                                                "y": {
                                                    "type": "number",
                                                    "title": "The y Schema",
                                                    "examples": [
                                                        90.64885228872299,
                                                        177.48091625981033,
                                                        310.1145029067993,
                                                        185.11450389632955,
                                                        96.37404419481754
                                                    ]
                                                }
                                            },
                                            "examples": [{
                                                "x": 733.8816757947206,
                                                "y": 90.64885228872299
                                            },
                                            {
                                                "x": 739.6068726629019,
                                                "y": 177.48091625981033
                                            },
                                            {
                                                "x": 834.0725284516811,
                                                "y": 310.1145029067993
                                            },
                                            {
                                                "x": 834.0725284516811,
                                                "y": 310.1145029067993
                                            },
                                            {
                                                "x": 903.7290132343769,
                                                "y": 185.11450389632955
                                            },
                                            {
                                                "x": 908.4999952018261,
                                                "y": 96.37404419481754
                                            }]
                                        },
                                        "examples": [
                                            [{
                                                "x": 733.8816757947206,
                                                "y": 90.64885228872299
                                            },
                                            {
                                                "x": 739.6068726629019,
                                                "y": 177.48091625981033
                                            },
                                            {
                                                "x": 834.0725284516811,
                                                "y": 310.1145029067993
                                            },
                                            {
                                                "x": 834.0725284516811,
                                                "y": 310.1145029067993
                                            },
                                            {
                                                "x": 903.7290132343769,
                                                "y": 185.11450389632955
                                            },
                                            {
                                                "x": 908.4999952018261,
                                                "y": 96.37404419481754
                                            }]
                                        ]
                                    }
                                },
                                "examples": [{
                                    "coordinates": [{
                                        "x": 733.8816757947206,
                                        "y": 90.64885228872299
                                    },
                                    {
                                        "x": 739.6068726629019,
                                        "y": 177.48091625981033
                                    },
                                    {
                                        "x": 834.0725284516811,
                                        "y": 310.1145029067993
                                    },
                                    {
                                        "x": 834.0725284516811,
                                        "y": 310.1145029067993
                                    },
                                    {
                                        "x": 903.7290132343769,
                                        "y": 185.11450389632955
                                    },
                                    {
                                        "x": 908.4999952018261,
                                        "y": 96.37404419481754
                                    }]
                                }]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    0
                                ]
                            }
                        },
                        "examples": [{
                            "id": "8a1ac207-fc34-4bcb-a6c4-bb9adc2598aa",
                            "object_type": "polygon2d",
                            "class": "construction_vehicle",
                            "taxonomy_attribute": {
                                "occlusion": false,
                                "towing": [],
                                "left_turn_signal": false,
                                "right_turn_signal": false
                            },
                            "drawable_attribute": {},
                            "identity": 1,
                            "classColor": "#0FDF62",
                            "seq_no": "1",
                            "geometry": {
                                "coordinates": [{
                                    "x": 733.8816757947206,
                                    "y": 90.64885228872299
                                },
                                {
                                    "x": 739.6068726629019,
                                    "y": 177.48091625981033
                                },
                                {
                                    "x": 834.0725284516811,
                                    "y": 310.1145029067993
                                },
                                {
                                    "x": 834.0725284516811,
                                    "y": 310.1145029067993
                                },
                                {
                                    "x": 903.7290132343769,
                                    "y": 185.11450389632955
                                },
                                {
                                    "x": 908.4999952018261,
                                    "y": 96.37404419481754
                                }]
                            },
                            "order": 0,
                            "referenceIndex": 0
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "Polygon Schema",
                        "required": [
                            "id",
                            "identity",
                            "class",
                            "color",
                            "classColor",
                            "geometry",
                            "object_type",
                            "taxonomy_attribute",
                            "order",
                            "verticalLimit",
                            "groundClippingMode",
                            "referenceIndex",
                            "seq_no"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "137c5ed7-4d32-4ce5-8b3a-c51a82fac68d"
                                ]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    2
                                ]
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "alt_equipment"
                                ]
                            },
                            "color": {
                                "type": "string",
                                "default": "",
                                "title": "The color Schema",
                                "examples": [
                                    ""
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#7E3E72"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "polygons"
                                ],
                                "properties": {
                                    "polygons": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The polygons Schema",
                                        "items": {
                                            "type": "object",
                                            "default": {},
                                            "title": "A Schema",
                                            "required": [
                                                "geometry",
                                                "mode"
                                            ],
                                            "properties": {
                                                "geometry": {
                                                    "type": "object",
                                                    "default": {},
                                                    "title": "The geometry Schema",
                                                    "required": [
                                                        "matrixWorldInverse",
                                                        "projectionMatrix",
                                                        "points",
                                                        "referenceSourceIds"
                                                    ],
                                                    "properties": {
                                                        "matrixWorldInverse": {
                                                            "type": "array",
                                                            "default": [],
                                                            "title": "The matrixWorldInverse Schema",
                                                            "items": {
                                                                "anyOf": [{
                                                                    "type": "number",
                                                                    "title": "A Schema",
                                                                    "examples": [
                                                                        1.9992176181164368e-16,
                                                                        0.5144957554275266,
                                                                        -0.8574929257125443,
                                                                        1.6184142622847344e-16,
                                                                        -1.6184142622847344e-16,
                                                                        9.520083895792555e-18,
                                                                        0.8574929257125443,
                                                                        4.855242786854203e-15,
                                                                        -5.54667823983524e-31,
                                                                        -29.15475947422651
                                                                    ]
                                                                },
                                                                {
                                                                    "type": "integer",
                                                                    "title": "A Schema",
                                                                    "examples": [
                                                                        0,
                                                                        -1,
                                                                        1
                                                                    ]
                                                                }]
                                                            },
                                                            "examples": [
                                                                [1.9992176181164368e-16,
                                                                    0.5144957554275266,
                                                                    -0.8574929257125443,
                                                                    0,
                                                                    -1,
                                                                    1.6184142622847344e-16,
                                                                    -1.6184142622847344e-16,
                                                                    0,
                                                                    9.520083895792555e-18,
                                                                    0.8574929257125443,
                                                                    0.5144957554275266,
                                                                    0,
                                                                    4.855242786854203e-15,
                                                                    -5.54667823983524e-31,
                                                                    -29.15475947422651,
                                                                    1
                                                                ]
                                                            ]
                                                        },
                                                        "projectionMatrix": {
                                                            "type": "array",
                                                            "default": [],
                                                            "title": "The projectionMatrix Schema",
                                                            "items": {
                                                                "anyOf": [{
                                                                    "type": "number",
                                                                    "title": "A Schema",
                                                                    "examples": [
                                                                        0.816371333415685,
                                                                        1.7320508075688774,
                                                                        -1.0000844916030764,
                                                                        -0.844951724919532
                                                                    ]
                                                                },
                                                                {
                                                                    "type": "integer",
                                                                    "title": "A Schema",
                                                                    "examples": [
                                                                        0,
                                                                        -1
                                                                    ]
                                                                }]
                                                            },
                                                            "examples": [
                                                                [0.816371333415685,
                                                                    0,
                                                                    0,
                                                                    0,
                                                                    0,
                                                                    1.7320508075688774,
                                                                    0,
                                                                    0,
                                                                    0,
                                                                    0,
                                                                    -1.0000844916030764,
                                                                    -1,
                                                                    0,
                                                                    0,
                                                                    -0.844951724919532,
                                                                    0
                                                                ]
                                                            ]
                                                        },
                                                        "points": {
                                                            "type": "array",
                                                            "default": [],
                                                            "title": "The points Schema",
                                                            "items": {
                                                                "type": "object",
                                                                "title": "A Schema",
                                                                "required": [
                                                                    "position"
                                                                ],
                                                                "properties": {
                                                                    "position": {
                                                                        "type": "object",
                                                                        "title": "The position Schema",
                                                                        "required": [
                                                                            "x",
                                                                            "y",
                                                                            "z"
                                                                        ],
                                                                        "properties": {
                                                                            "x": {
                                                                                "type": "number",
                                                                                "title": "The x Schema",
                                                                                "examples": [
                                                                                    -0.49190556460246765,
                                                                                    -0.34519392885204847,
                                                                                    -0.26762225937481315
                                                                                ]
                                                                            },
                                                                            "y": {
                                                                                "type": "number",
                                                                                "title": "The y Schema",
                                                                                "examples": [
                                                                                    -0.8855098389982033,
                                                                                    -0.6279069767441842,
                                                                                    -0.9499105545617116
                                                                                ]
                                                                            },
                                                                            "z": {
                                                                                "type": "number",
                                                                                "title": "The z Schema",
                                                                                "examples": [
                                                                                    6.176079583119211e-15,
                                                                                    1.9710892286550758e-15
                                                                                ]
                                                                            }
                                                                        },
                                                                        "examples": [{
                                                                            "x": -0.49190556460246765,
                                                                            "y": -0.8855098389982033,
                                                                            "z": 6.176079583119211e-15
                                                                        },
                                                                        {
                                                                            "x": -0.34519392885204847,
                                                                            "y": -0.6279069767441842,
                                                                            "z": 1.9710892286550758e-15
                                                                        },
                                                                        {
                                                                            "x": -0.26762225937481315,
                                                                            "y": -0.9499105545617116,
                                                                            "z": 6.176079583119211e-15
                                                                        }]
                                                                    }
                                                                },
                                                                "examples": [{
                                                                    "position": {
                                                                        "x": -0.49190556460246765,
                                                                        "y": -0.8855098389982033,
                                                                        "z": 6.176079583119211e-15
                                                                    }
                                                                },
                                                                {
                                                                    "position": {
                                                                        "x": -0.34519392885204847,
                                                                        "y": -0.6279069767441842,
                                                                        "z": 1.9710892286550758e-15
                                                                    }
                                                                },
                                                                {
                                                                    "position": {
                                                                        "x": -0.26762225937481315,
                                                                        "y": -0.9499105545617116,
                                                                        "z": 6.176079583119211e-15
                                                                    }
                                                                }]
                                                            },
                                                            "examples": [
                                                                [{
                                                                    "position": {
                                                                        "x": -0.49190556460246765,
                                                                        "y": -0.8855098389982033,
                                                                        "z": 6.176079583119211e-15
                                                                    }
                                                                },
                                                                {
                                                                    "position": {
                                                                        "x": -0.34519392885204847,
                                                                        "y": -0.6279069767441842,
                                                                        "z": 1.9710892286550758e-15
                                                                    }
                                                                },
                                                                {
                                                                    "position": {
                                                                        "x": -0.26762225937481315,
                                                                        "y": -0.9499105545617116,
                                                                        "z": 6.176079583119211e-15
                                                                    }
                                                                }]
                                                            ]
                                                        },
                                                        "referenceSourceIds": {
                                                            "type": "array",
                                                            "default": [],
                                                            "title": "The referenceSourceIds Schema",
                                                            "items": {},
                                                            "examples": [
                                                                []
                                                            ]
                                                        }
                                                    },
                                                    "examples": [{
                                                        "matrixWorldInverse": [
                                                            1.9992176181164368e-16,
                                                            0.5144957554275266,
                                                            -0.8574929257125443,
                                                            0,
                                                            -1,
                                                            1.6184142622847344e-16,
                                                            -1.6184142622847344e-16,
                                                            0,
                                                            9.520083895792555e-18,
                                                            0.8574929257125443,
                                                            0.5144957554275266,
                                                            0,
                                                            4.855242786854203e-15,
                                                            -5.54667823983524e-31,
                                                            -29.15475947422651,
                                                            1
                                                        ],
                                                        "projectionMatrix": [
                                                            0.816371333415685,
                                                            0,
                                                            0,
                                                            0,
                                                            0,
                                                            1.7320508075688774,
                                                            0,
                                                            0,
                                                            0,
                                                            0,
                                                            -1.0000844916030764,
                                                            -1,
                                                            0,
                                                            0,
                                                            -0.844951724919532,
                                                            0
                                                        ],
                                                        "points": [{
                                                            "position": {
                                                                "x": -0.49190556460246765,
                                                                "y": -0.8855098389982033,
                                                                "z": 6.176079583119211e-15
                                                            }
                                                        },
                                                        {
                                                            "position": {
                                                                "x": -0.34519392885204847,
                                                                "y": -0.6279069767441842,
                                                                "z": 1.9710892286550758e-15
                                                            }
                                                        },
                                                        {
                                                            "position": {
                                                                "x": -0.26762225937481315,
                                                                "y": -0.9499105545617116,
                                                                "z": 6.176079583119211e-15
                                                            }
                                                        }],
                                                        "referenceSourceIds": []
                                                    }]
                                                },
                                                "mode": {
                                                    "type": "string",
                                                    "default": "",
                                                    "title": "The mode Schema",
                                                    "examples": [
                                                        "add"
                                                    ]
                                                }
                                            },
                                            "examples": [{
                                                "geometry": {
                                                    "matrixWorldInverse": [
                                                        1.9992176181164368e-16,
                                                        0.5144957554275266,
                                                        -0.8574929257125443,
                                                        0,
                                                        -1,
                                                        1.6184142622847344e-16,
                                                        -1.6184142622847344e-16,
                                                        0,
                                                        9.520083895792555e-18,
                                                        0.8574929257125443,
                                                        0.5144957554275266,
                                                        0,
                                                        4.855242786854203e-15,
                                                        -5.54667823983524e-31,
                                                        -29.15475947422651,
                                                        1
                                                    ],
                                                    "projectionMatrix": [
                                                        0.816371333415685,
                                                        0,
                                                        0,
                                                        0,
                                                        0,
                                                        1.7320508075688774,
                                                        0,
                                                        0,
                                                        0,
                                                        0,
                                                        -1.0000844916030764,
                                                        -1,
                                                        0,
                                                        0,
                                                        -0.844951724919532,
                                                        0
                                                    ],
                                                    "points": [{
                                                        "position": {
                                                            "x": -0.49190556460246765,
                                                            "y": -0.8855098389982033,
                                                            "z": 6.176079583119211e-15
                                                        }
                                                    },
                                                    {
                                                        "position": {
                                                            "x": -0.34519392885204847,
                                                            "y": -0.6279069767441842,
                                                            "z": 1.9710892286550758e-15
                                                        }
                                                    },
                                                    {
                                                        "position": {
                                                            "x": -0.26762225937481315,
                                                            "y": -0.9499105545617116,
                                                            "z": 6.176079583119211e-15
                                                        }
                                                    }],
                                                    "referenceSourceIds": []
                                                },
                                                "mode": "add"
                                            }]
                                        },
                                        "examples": [
                                            [{
                                                "geometry": {
                                                    "matrixWorldInverse": [
                                                        1.9992176181164368e-16,
                                                        0.5144957554275266,
                                                        -0.8574929257125443,
                                                        0,
                                                        -1,
                                                        1.6184142622847344e-16,
                                                        -1.6184142622847344e-16,
                                                        0,
                                                        9.520083895792555e-18,
                                                        0.8574929257125443,
                                                        0.5144957554275266,
                                                        0,
                                                        4.855242786854203e-15,
                                                        -5.54667823983524e-31,
                                                        -29.15475947422651,
                                                        1
                                                    ],
                                                    "projectionMatrix": [
                                                        0.816371333415685,
                                                        0,
                                                        0,
                                                        0,
                                                        0,
                                                        1.7320508075688774,
                                                        0,
                                                        0,
                                                        0,
                                                        0,
                                                        -1.0000844916030764,
                                                        -1,
                                                        0,
                                                        0,
                                                        -0.844951724919532,
                                                        0
                                                    ],
                                                    "points": [{
                                                        "position": {
                                                            "x": -0.49190556460246765,
                                                            "y": -0.8855098389982033,
                                                            "z": 6.176079583119211e-15
                                                        }
                                                    },
                                                    {
                                                        "position": {
                                                            "x": -0.34519392885204847,
                                                            "y": -0.6279069767441842,
                                                            "z": 1.9710892286550758e-15
                                                        }
                                                    },
                                                    {
                                                        "position": {
                                                            "x": -0.26762225937481315,
                                                            "y": -0.9499105545617116,
                                                            "z": 6.176079583119211e-15
                                                        }
                                                    }],
                                                    "referenceSourceIds": []
                                                },
                                                "mode": "add"
                                            }]
                                        ]
                                    }
                                },
                                "examples": [{
                                    "polygons": [{
                                        "geometry": {
                                            "matrixWorldInverse": [
                                                1.9992176181164368e-16,
                                                0.5144957554275266,
                                                -0.8574929257125443,
                                                0,
                                                -1,
                                                1.6184142622847344e-16,
                                                -1.6184142622847344e-16,
                                                0,
                                                9.520083895792555e-18,
                                                0.8574929257125443,
                                                0.5144957554275266,
                                                0,
                                                4.855242786854203e-15,
                                                -5.54667823983524e-31,
                                                -29.15475947422651,
                                                1
                                            ],
                                            "projectionMatrix": [
                                                0.816371333415685,
                                                0,
                                                0,
                                                0,
                                                0,
                                                1.7320508075688774,
                                                0,
                                                0,
                                                0,
                                                0,
                                                -1.0000844916030764,
                                                -1,
                                                0,
                                                0,
                                                -0.844951724919532,
                                                0
                                            ],
                                            "points": [{
                                                "position": {
                                                    "x": -0.49190556460246765,
                                                    "y": -0.8855098389982033,
                                                    "z": 6.176079583119211e-15
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -0.34519392885204847,
                                                    "y": -0.6279069767441842,
                                                    "z": 1.9710892286550758e-15
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -0.26762225937481315,
                                                    "y": -0.9499105545617116,
                                                    "z": 6.176079583119211e-15
                                                }
                                            }],
                                            "referenceSourceIds": []
                                        },
                                        "mode": "add"
                                    }]
                                }]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "polygongroup"
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "verticalLimit": {
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 2,
                                "title": "The verticalLimit Schema",
                                "items": {
                                    "type": "number",
                                    "title": "A Schema",
                                    "examples": [
                                        -16.6,
                                        2.9000007629394524
                                    ]
                                },
                                "examples": [
                                    [-16.6,
                                        2.9000007629394524
                                    ]
                                ]
                            },
                            "groundClippingMode": {
                                "type": "integer",
                                "default": 0,
                                "title": "The groundClippingMode Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    -1
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            }
                        },
                        "examples": [{
                            "id": "137c5ed7-4d32-4ce5-8b3a-c51a82fac68d",
                            "identity": 2,
                            "class": "alt_equipment",
                            "color": "",
                            "classColor": "#7E3E72",
                            "geometry": {
                                "polygons": [{
                                    "geometry": {
                                        "matrixWorldInverse": [
                                            1.9992176181164368e-16,
                                            0.5144957554275266,
                                            -0.8574929257125443,
                                            0,
                                            -1,
                                            1.6184142622847344e-16,
                                            -1.6184142622847344e-16,
                                            0,
                                            9.520083895792555e-18,
                                            0.8574929257125443,
                                            0.5144957554275266,
                                            0,
                                            4.855242786854203e-15,
                                            -5.54667823983524e-31,
                                            -29.15475947422651,
                                            1
                                        ],
                                        "projectionMatrix": [
                                            0.816371333415685,
                                            0,
                                            0,
                                            0,
                                            0,
                                            1.7320508075688774,
                                            0,
                                            0,
                                            0,
                                            0,
                                            -1.0000844916030764,
                                            -1,
                                            0,
                                            0,
                                            -0.844951724919532,
                                            0
                                        ],
                                        "points": [{
                                            "position": {
                                                "x": -0.49190556460246765,
                                                "y": -0.8855098389982033,
                                                "z": 6.176079583119211e-15
                                            }
                                        },
                                        {
                                            "position": {
                                                "x": -0.34519392885204847,
                                                "y": -0.6279069767441842,
                                                "z": 1.9710892286550758e-15
                                            }
                                        },
                                        {
                                            "position": {
                                                "x": -0.26762225937481315,
                                                "y": -0.9499105545617116,
                                                "z": 6.176079583119211e-15
                                            }
                                        }],
                                        "referenceSourceIds": []
                                    },
                                    "mode": "add"
                                }]
                            },
                            "object_type": "polygongroup",
                            "taxonomy_attribute": {},
                            "order": 0,
                            "verticalLimit": [
                                -16.6,
                                2.9000007629394524
                            ],
                            "groundClippingMode": 0,
                            "referenceIndex":
                                -1,
                            "seq_no": "1"
                        }]
                    },
                    {
                        "type": "object",
                        "default": {},
                        "title": "Polyline Schema",
                        "required": [
                            "id",
                            "identity",
                            "class",
                            "color",
                            "classColor",
                            "geometry",
                            "object_type",
                            "taxonomy_attribute",
                            "order",
                            "verticalLimit",
                            "groundClippingMode",
                            "referenceIndex",
                            "seq_no"
                        ],
                        "properties": {
                            "id": {
                                "type": "string",
                                "default": "",
                                "title": "The id Schema",
                                "examples": [
                                    "7ff69b76-a5d7-4ab3-8432-d38bdc69b3e7"
                                ]
                            },
                            "identity": {
                                "type": "integer",
                                "default": 0,
                                "title": "The identity Schema",
                                "examples": [
                                    1
                                ]
                            },
                            "class": {
                                "type": "string",
                                "default": "",
                                "title": "The class Schema",
                                "examples": [
                                    "unlabeled"
                                ]
                            },
                            "color": {
                                "type": "string",
                                "default": "",
                                "title": "The color Schema",
                                "examples": [
                                    ""
                                ]
                            },
                            "classColor": {
                                "type": "string",
                                "default": "",
                                "title": "The classColor Schema",
                                "examples": [
                                    "#2E5629"
                                ]
                            },
                            "geometry": {
                                "type": "object",
                                "default": {},
                                "title": "The geometry Schema",
                                "required": [
                                    "points",
                                    "thickness",
                                    "referenceSourceIds"
                                ],
                                "properties": {
                                    "points": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The points Schema",
                                        "items": {
                                            "type": "object",
                                            "title": "A Schema",
                                            "required": [
                                                "position"
                                            ],
                                            "properties": {
                                                "position": {
                                                    "type": "object",
                                                    "title": "The position Schema",
                                                    "required": [
                                                        "x",
                                                        "y",
                                                        "z"
                                                    ],
                                                    "properties": {
                                                        "x": {
                                                            "type": "number",
                                                            "title": "The x Schema",
                                                            "examples": [
                                                                -14.80049991607666,
                                                                -10.700499534606934,
                                                                -6.900749921798706
                                                            ]
                                                        },
                                                        "y": {
                                                            "type": "number",
                                                            "title": "The y Schema",
                                                            "examples": [
                                                                -2.4010000228881836,
                                                                -2.2009999752044678,
                                                                -1.9000000953674316
                                                            ]
                                                        },
                                                        "z": {
                                                            "type": "number",
                                                            "title": "The z Schema",
                                                            "examples": [
                                                                -1.699999904632569
                                                            ]
                                                        }
                                                    },
                                                    "examples": [{
                                                        "x": -14.80049991607666,
                                                        "y": -2.4010000228881836,
                                                        "z": -1.699999904632569
                                                    },
                                                    {
                                                        "x": -10.700499534606934,
                                                        "y": -2.2009999752044678,
                                                        "z": -1.699999904632569
                                                    },
                                                    {
                                                        "x": -6.900749921798706,
                                                        "y": -1.9000000953674316,
                                                        "z": -1.699999904632569
                                                    }]
                                                }
                                            },
                                            "examples": [{
                                                "position": {
                                                    "x": -14.80049991607666,
                                                    "y": -2.4010000228881836,
                                                    "z": -1.699999904632569
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -10.700499534606934,
                                                    "y": -2.2009999752044678,
                                                    "z": -1.699999904632569
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -6.900749921798706,
                                                    "y": -1.9000000953674316,
                                                    "z": -1.699999904632569
                                                }
                                            }]
                                        },
                                        "examples": [
                                            [{
                                                "position": {
                                                    "x": -14.80049991607666,
                                                    "y": -2.4010000228881836,
                                                    "z": -1.699999904632569
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -10.700499534606934,
                                                    "y": -2.2009999752044678,
                                                    "z": -1.699999904632569
                                                }
                                            },
                                            {
                                                "position": {
                                                    "x": -6.900749921798706,
                                                    "y": -1.9000000953674316,
                                                    "z": -1.699999904632569
                                                }
                                            }]
                                        ]
                                    },
                                    "thickness": {
                                        "type": "integer",
                                        "default": 0,
                                        "title": "The thickness Schema",
                                        "examples": [
                                            0
                                        ]
                                    },
                                    "referenceSourceIds": {
                                        "type": "array",
                                        "default": [],
                                        "title": "The referenceSourceIds Schema",
                                        "items": {},
                                        "examples": [
                                            []
                                        ]
                                    }
                                },
                                "examples": [{
                                    "points": [{
                                        "position": {
                                            "x": -14.80049991607666,
                                            "y": -2.4010000228881836,
                                            "z": -1.699999904632569
                                        }
                                    },
                                    {
                                        "position": {
                                            "x": -10.700499534606934,
                                            "y": -2.2009999752044678,
                                            "z": -1.699999904632569
                                        }
                                    },
                                    {
                                        "position": {
                                            "x": -6.900749921798706,
                                            "y": -1.9000000953674316,
                                            "z": -1.699999904632569
                                        }
                                    }],
                                    "thickness": 0,
                                    "referenceSourceIds": []
                                }]
                            },
                            "object_type": {
                                "type": "string",
                                "const": "polyline"
                            },
                            "taxonomy_attribute": {
                                "type": "object",
                                "default": {},
                                "title": "The taxonomy_attribute Schema",
                                "required": [],
                                "properties": {},
                                "examples": [{}]
                            },
                            "order": {
                                "type": "integer",
                                "default": 0,
                                "title": "The order Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "verticalLimit": {
                                "type": "array",
                                "minItems": 2,
                                "maxItems": 2,
                                "title": "The verticalLimit Schema",
                                "items": {
                                    "type": "number",
                                    "title": "A Schema",
                                    "examples": [
                                        -16.6,
                                        2.9000007629394524
                                    ]
                                },
                                "examples": [
                                    [-16.6,
                                        2.9000007629394524
                                    ]
                                ]
                            },
                            "groundClippingMode": {
                                "type": "integer",
                                "default": 0,
                                "title": "The groundClippingMode Schema",
                                "examples": [
                                    0
                                ]
                            },
                            "referenceIndex": {
                                "type": "integer",
                                "default": 0,
                                "title": "The referenceIndex Schema",
                                "examples": [
                                    -1
                                ]
                            },
                            "seq_no": {
                                "type": "string",
                                "default": "",
                                "title": "The seq_no Schema",
                                "examples": [
                                    "1"
                                ]
                            }
                        },
                        "examples": [{
                            "id": "7ff69b76-a5d7-4ab3-8432-d38bdc69b3e7",
                            "identity": 1,
                            "class": "unlabeled",
                            "color": "",
                            "classColor": "#2E5629",
                            "geometry": {
                                "points": [{
                                    "position": {
                                        "x": -14.80049991607666,
                                        "y": -2.4010000228881836,
                                        "z": -1.699999904632569
                                    }
                                },
                                {
                                    "position": {
                                        "x": -10.700499534606934,
                                        "y": -2.2009999752044678,
                                        "z": -1.699999904632569
                                    }
                                },
                                {
                                    "position": {
                                        "x": -6.900749921798706,
                                        "y": -1.9000000953674316,
                                        "z": -1.699999904632569
                                    }
                                }],
                                "thickness": 0,
                                "referenceSourceIds": []
                            },
                            "object_type": "polyline",
                            "taxonomy_attribute": {},
                            "order": 0,
                            "verticalLimit": [
                                -16.6,
                                2.9000007629394524
                            ],
                            "groundClippingMode": 0,
                            "referenceIndex":
                                -1,
                            "seq_no": "1"
                        }]
                    }
                    
                ]
            }
        }
    },
    "examples": [{
        "operation": {
            "batch_code": "BC-66c4a48851017200011cc9b4",
            "customData": [{
                "key": "batchAttributes",
                "source": "66c4a496b488bc00015a3124",
                "data": {
                    "B1": 2
                }
            }],
            "emp_code": "I1054",
            "engagement_code": "SC-6684130e9ffabb00010d5191",
            "job_code": "JC-66b4a2c3498bb0a056276479"
        },
        "output": [{
            "id": "4fd215a4-784d-475c-a84a-c6dbead310b4",
            "object_type": "polyline2d",
            "class": "stop_line",
            "taxonomy_attribute": {},
            "identity": 1,
            "classColor": "#F57F66",
            "key": "1_4fd215a4-784d-475c-a84a-c6dbead310b4",
            "seq_no": "1",
            "geometry": {
                "coordinates": [{
                    "x": 960.0267300009727,
                    "y": 57.251907885074615
                },
                {
                    "x": 1014.4160354733467,
                    "y": 141.22137520462275
                },
                {
                    "x": 1048.7671796679497,
                    "y": 263.3587773889303
                },
                {
                    "x": 1048.7671796679497,
                    "y": 263.3587773889303
                },
                {
                    "x": 1048.7671796679497,
                    "y": 263.3587773889303
                }]
            },
            "order": 0,
            "referenceIndex": 0
        },
        {
            "seq_no": "1",
            "key": "relationship_1",
            "relationship": [{
                "label": "Joined",
                "peers": [{
                    "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
                    "subjectClasses": [
                        "6baf12db-a939-4fa2-8803-a37514dcf6ec"
                    ]
                }]
            }]
        },
        {
            "id": "6baf12db-a939-4fa2-8803-a37514dcf6ec",
            "identity": 1,
            "class": "traffic_light",
            "color": "",
            "classColor": "#90668E",
            "geometry": {
                "boxSize": {
                    "x": 4.129600195331778,
                    "y": 4.129600195331778,
                    "z": 4.129600195331778
                },
                "position": {
                    "x": -10.400499916076654,
                    "y": 10.498999786376956,
                    "z": -0.8000000000000003
                },
                "rotation": {
                    "x": 0,
                    "y": 0,
                    "z": 0
                },
                "clipTask": 1,
                "referenceSourceIds": []
            },
            "object_type": "cuboid",
            "taxonomy_attribute": {
                "traffic_light_activity_state": [],
                "traffic_light_is_occluded": false
            },
            "order": 0,
            "verticalLimit": [
                -16.6,
                2.9000007629394524
            ],
            "groundClippingMode": 0,
            "referenceIndex":
                -1,
            "key": "1_6baf12db-a939-4fa2-8803-a37514dcf6ec",
            "seq_no": "1"
        },
        {
            "id": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
            "identity": 1,
            "class": "traffic_channelizer",
            "color": "",
            "classColor": "#1F7823",
            "geometry": {
                "boxSize": {
                    "x": 4.22225230857188,
                    "y": 4.22225230857188,
                    "z": 4.22225230857188
                },
                "position": {
                    "x": -10.400249958038316,
                    "y": -4.700250053405753,
                    "z": -1.6888738457140602
                },
                "rotation": {
                    "x": 0,
                    "y": 0,
                    "z": 0
                },
                "clipTask": 1,
                "referenceSourceIds": []
            },
            "object_type": "cuboid",
            "taxonomy_attribute": {},
            "order": 0,
            "verticalLimit": [
                -16.6,
                2.9000007629394524
            ],
            "groundClippingMode": 0,
            "referenceIndex":
                -1,
            "seq_no": "1",
            "key": "1_8f4614de-bc3e-40cf-b2a6-1a331e888043"
        },
        {
            "key": "formInput_1",
            "seq_no": "1",
            "timeSpent": 299,
            "taskAttribute": {
                "Grass": "test"
            }
        },
        {
            "id": "20f279ac-e415-4ba2-8cb5-53d7e53e7cc1",
            "object_type": "rectangle",
            "class": "yield_line",
            "taxonomy_attribute": {},
            "drawable_attribute": {},
            "identity": 1,
            "classColor": "#B4C3F0",
            "seq_no": "1",
            "geometry": {
                "coordinates": [{
                    "x": 636.5534354522824,
                    "y": 346.3740460574627
                },
                {
                    "x": 636.5534354522824,
                    "y": 266.2213761359453
                },
                {
                    "x": 732.9274794012308,
                    "y": 266.2213761359453
                },
                {
                    "x": 732.9274794012308,
                    "y": 346.3740460574627
                }],
                "pointCoordinates": {
                    "x": 684.7404597401619,
                    "y": 306.2977083027363
                }
            },
            "order": 0,
            "referenceIndex": 0
        },
        {
            "id": "8a1ac207-fc34-4bcb-a6c4-bb9adc2598aa",
            "object_type": "polygon2d",
            "class": "construction_vehicle",
            "taxonomy_attribute": {
                "occlusion": false,
                "towing": [],
                "left_turn_signal": false,
                "right_turn_signal": false
            },
            "drawable_attribute": {},
            "identity": 1,
            "classColor": "#0FDF62",
            "seq_no": "1",
            "geometry": {
                "coordinates": [{
                    "x": 733.8816757947206,
                    "y": 90.64885228872299
                },
                {
                    "x": 739.6068726629019,
                    "y": 177.48091625981033
                },
                {
                    "x": 834.0725284516811,
                    "y": 310.1145029067993
                },
                {
                    "x": 834.0725284516811,
                    "y": 310.1145029067993
                },
                {
                    "x": 903.7290132343769,
                    "y": 185.11450389632955
                },
                {
                    "x": 908.4999952018261,
                    "y": 96.37404419481754
                }]
            },
            "order": 0,
            "referenceIndex": 0
        },
        {
            "id": "137c5ed7-4d32-4ce5-8b3a-c51a82fac68d",
            "identity": 2,
            "class": "alt_equipment",
            "color": "",
            "classColor": "#7E3E72",
            "geometry": {
                "polygons": [{
                    "geometry": {
                        "matrixWorldInverse": [
                            1.9992176181164368e-16,
                            0.5144957554275266,
                            -0.8574929257125443,
                            0,
                            -1,
                            1.6184142622847344e-16,
                            -1.6184142622847344e-16,
                            0,
                            9.520083895792555e-18,
                            0.8574929257125443,
                            0.5144957554275266,
                            0,
                            4.855242786854203e-15,
                            -5.54667823983524e-31,
                            -29.15475947422651,
                            1
                        ],
                        "projectionMatrix": [
                            0.816371333415685,
                            0,
                            0,
                            0,
                            0,
                            1.7320508075688774,
                            0,
                            0,
                            0,
                            0,
                            -1.0000844916030764,
                            -1,
                            0,
                            0,
                            -0.844951724919532,
                            0
                        ],
                        "points": [{
                            "position": {
                                "x": -0.49190556460246765,
                                "y": -0.8855098389982033,
                                "z": 6.176079583119211e-15
                            }
                        },
                        {
                            "position": {
                                "x": -0.34519392885204847,
                                "y": -0.6279069767441842,
                                "z": 1.9710892286550758e-15
                            }
                        },
                        {
                            "position": {
                                "x": -0.26762225937481315,
                                "y": -0.9499105545617116,
                                "z": 6.176079583119211e-15
                            }
                        }],
                        "referenceSourceIds": []
                    },
                    "mode": "add"
                }]
            },
            "object_type": "polygongroup",
            "taxonomy_attribute": {},
            "order": 0,
            "verticalLimit": [
                -16.6,
                2.9000007629394524
            ],
            "groundClippingMode": 0,
            "referenceIndex":
                -1,
            "seq_no": "1"
        },
        {
            "id": "7ff69b76-a5d7-4ab3-8432-d38bdc69b3e7",
            "identity": 1,
            "class": "unlabeled",
            "color": "",
            "classColor": "#2E5629",
            "geometry": {
                "points": [{
                    "position": {
                        "x": -14.80049991607666,
                        "y": -2.4010000228881836,
                        "z": -1.699999904632569
                    }
                },
                {
                    "position": {
                        "x": -10.700499534606934,
                        "y": -2.2009999752044678,
                        "z": -1.699999904632569
                    }
                },
                {
                    "position": {
                        "x": -6.900749921798706,
                        "y": -1.9000000953674316,
                        "z": -1.699999904632569
                    }
                }],
                "thickness": 0,
                "referenceSourceIds": []
            },
            "object_type": "polyline",
            "taxonomy_attribute": {},
            "order": 0,
            "verticalLimit": [
                -16.6,
                2.9000007629394524
            ],
            "groundClippingMode": 0,
            "referenceIndex":
                -1,
            "seq_no": "1"
        }]
    }]
}
```

</details>

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FFEHYVvnZVh4OAP5mQ2EN%2FjsonSchema_New.json?alt=media&token=ae67064c-5613-467c-8449-ec8133c5b44e>" %}

### Sample Jinja Template

<details>

<summary>Sample Jinja Template</summary>

<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FC4HFVXjIV0ApS114g5jG%2Fpct_export_template.txt?alt=media&token=76d928c0-c0b3-4a15-8a23-1d3ff4c2e3f3>

```json
{
  "annotations": 
  [
    {% set ns = namespace(firstFound=false) %} 

    {% for annotation in data['annotations'] %}

    {% if annotation.class != undefined and annotation.object_type == "cuboid" or annotation.object_type == "polyline" or annotation.object_type == "polyline2d" or annotation.object_type == "polygongroup" or  annotation.object_type == "polygon2d" or annotation.object_type == "rectangle" %}

      {% if ns.firstFound == true %} , {% else %} {% set ns.firstFound = true %} {% endif %}
        {
          "label": "{{ annotation.class }}",
          "_id": "{{ annotation._id }}",
          "id": "{{ annotation.id }}",
          "object_type": "{{ annotation.object_type }}",
          "identity" : {{annotation.identity}},


          {% if annotation.object_type == "cuboid" %}
          
            "position": [ {{ annotation.geometry.position.x }} , {{ annotation.geometry.position.y }}, {{ annotation.geometry.position.z }} ],
            "orientation": {{ [ annotation.geometry.rotation.x, annotation.geometry.rotation.y, annotation.geometry.rotation.z ] | toQuaternion }}, 
            "dimension": [{{ annotation.geometry.boxSize.x }} , {{ annotation.geometry.boxSize.y }}, {{ annotation.geometry.boxSize.z }}],
          
          
          {% elif annotation.object_type == "polyline" %}

            "position": [ {{ annotation.geometry.position.x }} , {{ annotation.geometry.position.y }}, {{ annotation.geometry.position.z }} ],
            "orientation": {{ [ annotation.geometry.rotation.x, annotation.geometry.rotation.y, annotation.geometry.rotation.z ] | toQuaternion }}, 
            "points": [  {{ annotation.geometry.points | tojson }}  ],




          {% elif annotation.object_type == "polyline2d" %}

            "position": [ {{ annotation.geometry.position.x }} , {{ annotation.geometry.position.y }}, {{ annotation.geometry.position.z }} ],
            "orientation": {{ [ annotation.geometry.rotation.x, annotation.geometry.rotation.y, annotation.geometry.rotation.z ] | toQuaternion }}, 
            "points": [  
                        {% for polygons_position_obj in annotation.geometry.points %}
                              {{ polygons_position_obj | tojson }}
                            {% if not loop.last %} , {% endif %}
                        {% endfor %}
                  ],
           "coordinates": [  
                        {% for polygons_position_obj in annotation.geometry.coordinates %}
                              {{ polygons_position_obj | tojson }}
                            {% if not loop.last %} , {% endif %}
                        {% endfor %}
                  ],


          {% elif annotation.object_type == "polygongroup" %}

            "position": [ {{ annotation.geometry.position.x }} , {{ annotation.geometry.position.y }}, {{ annotation.geometry.position.z }} ],
            "orientation": {{ [ annotation.geometry.rotation.x, annotation.geometry.rotation.y, annotation.geometry.rotation.z ] | toQuaternion }}, 
            "points": [  
                  {% for polygons_val in annotation.geometry.polygons %}
                        {% for polygons_position_obj in polygons_val.geometry.points %}
                              {{ polygons_position_obj | tojson }}
                            {% if not loop.last %} , {% endif %}
                        {% endfor %}
                      {% if not loop.last %} , {% endif %}
                  {% endfor %}
          ],

          {# both objecttype coordinate data structure are same  annotation.object_type == "rectangle" or annotation.object_type == "polygon2d" #} 
          {% elif annotation.object_type == "rectangle" or annotation.object_type == "polygon2d" %}

                {% set content = data.tasks.metadata.help_images[annotation.referenceIndex].split("=")[-1] %}
                "image" : "{{ content.split("/")[-1] }}",
                "reference_folder": "{{content.split("/")[-2]}}",
                
                "coordinates":[

                                  {% for eachcoord in annotation.geometry.coordinates %}
                                    {
                                      {% for eachpointkey in eachcoord %}
                                          "{{ eachpointkey }}" : {{ eachcoord[eachpointkey] }}
                                          {% if not loop.last %} , {% endif %}
                                      {% endfor %}
                                    }
                                    {% if not loop.last %} , {% endif %}
                                  {% endfor %}
                        ],
              
                {% if annotation.geometry.pointCoordinates %}
                  "pointCoordinates": {{ annotation.geometry.pointCoordinates | tojson }},
                  {% endif %} 

          {% endif %}  

         
          "taxonomy_attribute" : 
                {
                  {% for key in annotation.taxonomy_attribute %}
                    {% if annotation.taxonomy_attribute[key] is boolean and key !="num_points" %}
                      "{{ key }}" : {{ annotation.taxonomy_attribute[key]|lower }}
                    {% elif annotation.taxonomy_attribute[key] is number and key !="num_points" %}
                        "{{ key }}" : {{ annotation.taxonomy_attribute[key] }}
                    {% elif annotation.taxonomy_attribute[key] is number and key =="num_points" %}
                        "{{ key }}" : {{ (annotation.classId | int , annotation.identity, data['path']) |countPoints }}
                    {% elif annotation.taxonomy_attribute[key].__class__.__name__ == 'list' %}
                    "{{ key }}":
                    [
                      {% for taxonomy in annotation.taxonomy_attribute[key] %}
                        "{{ taxonomy }}"
                      {% if not loop.last %} , {% endif %}
                    {% endfor %}
                    ]
                    {% else %}
                      "{{ key }}" : "{{ annotation.taxonomy_attribute[key] }}"
                    {% endif %}
                    {% if not loop.last %} , {% endif %}
                  {% endfor %}
              }

        }


      {% endif %}
    {% endfor %}  
  ],

{# Start attributes #}

  {# Start taxonomy_attribute #}
  
{# Start batchAttributes #}
"batch_attribute": {
            {% for batchAttribute in data.operation.customData %}
              {% if 'batchAttributes' in batchAttribute.key %}
                  {% for batchAtr_key, batchAtr_value in batchAttribute['data'].items() %}
                  {# check the value type if boolen then convert it #}
                    {% if batchAtr_value is boolean %}
                        "{{ batchAtr_key }}" : {{ batchAtr_value |lower }}
                    {# check the value is list or not #}
                    {% elif batchAtr_value.__class__.__name__ == 'list' %}
                    {# list value looping  #}
                      "{{ batchAtr_key }}":
                      [
                          {% for sub_attr in batchAtr_value %}
                            "{{ sub_attr }}"
                          {% if not loop.last %} , {% endif %}
                        {% endfor %}
                      ]
                  {% else %}
                    "{{ batchAtr_key }}" : "{{ batchAtr_value }}"
                  {% endif %}
                {% if not loop.last %} , {% endif %}
              {% endfor %} 
              {% endif %}
            {% endfor %} 
},
{# End batchAttributes #}
{# Start taskAttribute #}
"frame_attribute": {
      {% if 'taskAttribute' in data.meta %}
      {% for taskAtr_key, taskAtr_value in data.meta.taskAttribute.items() %}
            {# check the value type if boolen then convert it #}
              {% if taskAtr_value is boolean %}
                  "{{ taskAtr_key }}" : {{ taskAtr_value |lower }}
              {# check the value is list or not #}
              {% elif taskAtr_value.__class__.__name__ == 'list' %}
              {# list value looping  #}
                "{{ taskAtr_key }}":
                [
                    {% for sub_attr in taskAtr_value %}
                      "{{ sub_attr }}"
                    {% if not loop.last %} , {% endif %}
                  {% endfor %}
                ]
            {% else %}
              "{{ taskAtr_key }}" : "{{ taskAtr_value }}"
            {% endif %}
          {% if not loop.last %} , {% endif %}
        {% endfor %} 
      {% endif %}
  },
{# End taskAttribute #}


"meta_info":
      {
      "point_cloud": "{{ data.tasks.metadata.point_cloud }}",
      "frame_no": {{ data.tasks.task_seq_no }}
},

"relationship":
  [
        {% for items in data["annotations"] %}
          
          {% if 'relationship' in items %}
            
            {% for relation_val in items.relationship %}
                    {{ relation_val | tojson }} {% if not loop.last %} , {% endif %}
                {% endfor %}
              
            {% endif %}
        {% endfor %}
  ]


}
```

</details>

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FC4HFVXjIV0ApS114g5jG%2Fpct_export_template.txt?alt=media&token=76d928c0-c0b3-4a15-8a23-1d3ff4c2e3f3>" %}

### Tool Output Template

<details>

<summary>Tool Output Template</summary>

<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FPRf8AormIAsgGNcKpyiy%2Fsample_tool_output.json?alt=media&token=bcf279a5-77f3-40c7-9534-c29ebf70429c>

```json
{
  "operation": {
    "batch_code": "BC-66c4a48851017200011cc9b4",
    "customData": [
      {
        "key": "batchAttributes",
        "data": {
          "B1": 2,
          "TT": [
            "a",
            "b"
          ]
        }
      }
    ],
    "emp_code": "I1054",
    "engagement_code": "SC-6684130e9ffabb00010d5191",
    "job_code": "JC-66b4a2c3498bb0a056276479"
  },
  "output": [
    {
      "id": "4fd215a4-784d-475c-a84a-c6dbead310b4",
      "object_type": "polyline2d",
      "class": "stop_line",
      "taxonomy_attribute": {},
      "identity": 1,
      "classColor": "#F57F66",
      "key": "1_4fd215a4-784d-475c-a84a-c6dbead310b4",
      "seq_no": "1",
      "geometry": {
        "coordinates": [
          {
            "x": 960.02673000097275,
            "y": 57.251907885074615
          },
          {
            "x": 1014.4160354733467,
            "y": 141.22137520462275
          },
          {
            "x": 1048.7671796679497,
            "y": 263.35877738893032
          },
          {
            "x": 1048.7671796679497,
            "y": 263.35877738893032
          },
          {
            "x": 1048.7671796679497,
            "y": 263.35877738893032
          }
        ]
      },
      "order": 0,
      "referenceIndex": 0
    },
    {
      "seq_no": "1",
      "key": "relationship_1",
      "relationship": [
        {
          "label": "Joined",
          "peers": [
            {
              "objectClass": "8f4614de-bc3e-40cf-b2a6-1a331e888043",
              "subjectClasses": [
                "6baf12db-a939-4fa2-8803-a37514dcf6ec"
              ]
            }
          ]
        }
      ]
    },
    {
      "id": "6baf12db-a939-4fa2-8803-a37514dcf6ec",
      "identity": 1,
      "class": "traffic_light",
      "color": "",
      "classColor": "#90668E",
      "geometry": {
        "boxSize": {
          "x": 4.1296001953317782,
          "y": 4.1296001953317782,
          "z": 4.1296001953317782
        },
        "position": {
          "x": -10.400499916076654,
          "y": 10.498999786376956,
          "z": -0.80000000000000027
        },
        "rotation": {
          "x": 0,
          "y": 0,
          "z": 0
        },
        "clipTask": 1,
        "referenceSourceIds": []
      },
      "object_type": "cuboid",
      "taxonomy_attribute": {
        "traffic_light_activity_state": [],
        "traffic_light_is_occluded": false
      },
      "order": 0,
      "verticalLimit": [
        -16.6,
        2.9000007629394524
      ],
      "groundClippingMode": 0,
      "referenceIndex": -1,
      "key": "1_6baf12db-a939-4fa2-8803-a37514dcf6ec",
      "seq_no": "1"
    },
    {
      "key": "formInput_1",
      "seq_no": "1",
      "timeSpent": 299,
      "taskAttribute": {
        "Grass": "test"
      }
    },
    {
      "id": "20f279ac-e415-4ba2-8cb5-53d7e53e7cc1",
      "object_type": "rectangle",
      "class": "yield_line",
      "taxonomy_attribute": {},
      "drawable_attribute": {},
      "identity": 1,
      "classColor": "#B4C3F0",
      "seq_no": "1",
      "geometry": {
        "coordinates": [
          {
            "x": 636.55343545228243,
            "y": 346.37404605746269
          },
          {
            "x": 636.55343545228243,
            "y": 266.22137613594532
          },
          {
            "x": 732.92747940123081,
            "y": 266.22137613594532
          },
          {
            "x": 732.92747940123081,
            "y": 346.37404605746269
          }
        ],
        "pointCoordinates": {
          "x": 684.7404597401619,
          "y": 306.29770830273628
        }
      },
      "order": 0,
      "referenceIndex": 0
    },
    {
      "id": "8a1ac207-fc34-4bcb-a6c4-bb9adc2598aa",
      "object_type": "polygon2d",
      "class": "construction_vehicle",
      "taxonomy_attribute": {
        "occlusion": false,
        "towing": [],
        "left_turn_signal": false,
        "right_turn_signal": false
      },
      "drawable_attribute": {},
      "identity": 1,
      "classColor": "#0FDF62",
      "seq_no": "1",
      "geometry": {
        "coordinates": [
          {
            "x": 733.88167579472065,
            "y": 90.648852288722992
          },
          {
            "x": 739.60687266290188,
            "y": 177.48091625981033
          },
          {
            "x": 834.07252845168114,
            "y": 310.11450290679932
          },
          {
            "x": 834.07252845168114,
            "y": 310.11450290679932
          },
          {
            "x": 903.72901323437691,
            "y": 185.11450389632955
          },
          {
            "x": 908.4999952018261,
            "y": 96.374044194817543
          }
        ]
      },
      "order": 0,
      "referenceIndex": 0
    },
    {
      "id": "137c5ed7-4d32-4ce5-8b3a-c51a82fac68d",
      "identity": 2,
      "class": "alt_equipment",
      "color": "",
      "classColor": "#7E3E72",
      "geometry": {
        "polygons": [
          {
            "geometry": {
              "matrixWorldInverse": [
                1.9992176181164368E-16,
                0.51449575542752657,
                -0.85749292571254432,
                0,
                -1,
                1.6184142622847344E-16,
                -1.6184142622847344E-16,
                0,
                9.5200838957925553E-18,
                0.85749292571254432,
                0.51449575542752657,
                0,
                4.8552427868542032E-15,
                -5.54667823983524E-31,
                -29.154759474226509,
                1
              ],
              "projectionMatrix": [
                0.816371333415685,
                0,
                0,
                0,
                0,
                1.7320508075688774,
                0,
                0,
                0,
                0,
                -1.0000844916030764,
                -1,
                0,
                0,
                -0.844951724919532,
                0
              ],
              "points": [
                {
                  "position": {
                    "x": -0.49190556460246765,
                    "y": -0.88550983899820335,
                    "z": 6.1760795831192113E-15
                  }
                },
                {
                  "position": {
                    "x": -0.34519392885204847,
                    "y": -0.62790697674418416,
                    "z": 1.9710892286550758E-15
                  }
                },
                {
                  "position": {
                    "x": -0.26762225937481315,
                    "y": -0.94991055456171158,
                    "z": 6.1760795831192113E-15
                  }
                }
              ],
              "referenceSourceIds": []
            },
            "mode": "add"
          }
        ]
      },
      "object_type": "polygongroup",
      "taxonomy_attribute": {},
      "order": 0,
      "verticalLimit": [
        -16.6,
        2.9000007629394524
      ],
      "groundClippingMode": 0,
      "referenceIndex": -1,
      "seq_no": "1"
    },
    {
      "id": "7ff69b76-a5d7-4ab3-8432-d38bdc69b3e7",
      "identity": 1,
      "class": "unlabeled",
      "color": "",
      "classColor": "#2E5629",
      "geometry": {
        "points": [
          {
            "position": {
              "x": -14.80049991607666,
              "y": -2.4010000228881836,
              "z": -1.6999999046325689
            }
          },
          {
            "position": {
              "x": -10.700499534606934,
              "y": -2.2009999752044678,
              "z": -1.6999999046325689
            }
          },
          {
            "position": {
              "x": -6.9007499217987061,
              "y": -1.9000000953674316,
              "z": -1.6999999046325689
            }
          }
        ],
        "thickness": 0,
        "referenceSourceIds": []
      },
      "object_type": "polyline",
      "taxonomy_attribute": {
        "sub": "test"
      },
      "order": 0,
      "verticalLimit": [
        -16.6,
        2.9000007629394524
      ],
      "groundClippingMode": 0,
      "referenceIndex": -1,
      "seq_no": "1"
    }
  ]
}
```

</details>

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXgpJHJ6O4tzwRnwhZHsY%2Fuploads%2FPRf8AormIAsgGNcKpyiy%2Fsample_tool_output.json?alt=media&token=bcf279a5-77f3-40c7-9534-c29ebf70429c>" %}


# Reports

The Reports Section gives an understanding on how much time has been spent by experts on labelling.

* Aggregated Batch Time: View the average time spent on each [node](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) for a [batch](/project-setup/pre-process-data#batch).

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcsu8KkdpAMFV9xMLnCv9Kd7c_OS4NBWEJgyQS_H423vT_AR5mT_wzawKc1mDgy3N0q7BEvm8vfz1LbAD8IZtJDHJHMjJFmTzQBV6icbm48ri9jkU-TsQFzVSZTxG_2AZbn5LnPVkG6gWKpW7UjuulKvic_?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
* Batch Duration & Submission Time: View the time taken for all submissions within the [node](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) for a [batch](/project-setup/pre-process-data#batch).

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfPJ009mPUtuw3rGYYCtwVD9_KagCIhSM8T7Goux3mvNBGmIdDJoVXAWFuxuFvNlyA5Hsg7VO9YetCfvbgf_EBVDICPnCUBqOHL58AOJUMm7sGT9_obkrVYjIyYEOz4kc-__pxCNFryWT8zJCZdlgww7FY?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
* Node Wise Progress: Status stats on the dataset uploaded on each [node](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) of the [taskflow](/project-setup/create-taskflow/1.-taskflow-details).

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdLuyc6SzDlKsmIWC2smTI4iWRpKqzL6zZiTzRlAI7hN1CcebnZwH5he7vAh5hckFp2P3zFLN9S_8pDlUeWh6JUHbOLwRqBuzAaOsuEjMbBIDtTDZy8pYwQ1etUZFDTvTGMbL-qhlNaF50LerH7WYI5xtoe?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

  * Labeler Report: Clicking on the [node](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) name above gives details of the subject matter expert's performance on that node. This can be viewed by their performance batch-wise or across all.

    * Operator Node - Completed

    <figure><img src="/files/lV0VlCdyG5vebhY8oxaC" alt=""><figcaption></figcaption></figure>

    * Operator Node - In Progress

    <figure><img src="/files/nDZ5Hb4Faruan99GrLEb" alt=""><figcaption></figcaption></figure>

    * Operator Wise Report

    <figure><img src="/files/qpihOnJnxDgVH2kE4qzY" alt=""><figcaption></figcaption></figure>


# Pre-process Data

The Pre-process data step will help ensure that the data is ready to be uploaded in a tool ingestible format for the [Data Import ](/project-setup/build-jobs/2.-data-import)step. The dataset must segregated in a folder and stored in an Amazon S3 bucket

1. [Format Data](#id-1.-format-point-cloud-data) - Pointcloud formated to .las
2. [Segregate Data](#id-2.-segregate-data-in-folder-s) - Folder structure
3. [Store Data](#id-3.-data-storage) - Amazon S3 Bucket

## Format Point Cloud Data

* The tool supports LiDAR & RaDar datasets in `.las` format only.
* The point cloud datasets can be in formats such as `.bin` `.pcd` `.json` `.txt`&#x20;
  * Data in `.bin` format first will be coverted to `.pcd` and then further converted to `.las`
    * Read about `.bin` to `.pcd` conversion for NuScenes data set [here](https://forum.nuscenes.org/t/how-do-i-convert-nuscenes-lidar-data-to-pcd-file/785/2)
    * CloudCompare can be used to convert `.pcd` to `.las` using the following command:

{% hint style="info" %}
An example on how to convert pcd file in las:

<pre><code><strong>cloudcompare.CloudCompare -SILENT -O &#x3C;filename>.pcd -C_EXPORT_FMT LAS -SAVE_CLOUDS FILE &#x3C;filename>.las
</strong></code></pre>

{% endhint %}

## Segregate Data into Folders

The way the data is segregated impacts the visibility of tasks that load on the tool for the labeling experts. Below is the terminology that will be frequently used in this document to segregate data correctly.&#x20;

### Data Terminology

#### **Task**

A task is defined as the labeling work performed on one frame that loads on the annotation tool.&#x20;

#### **Frame**

A frame is a visual dataset that loads on the annotation tool that has Image data along with its respective sensor data (LiDAR, RaDar etc..)

#### **Batch**

A batch (or sequence) is the collective set of multiple frames that load on the annotation tool for a single expert is called a batch. The size of a batch can vary between 1 and n.

* Submission happens for a Batch.

### Data Reflection on Tool

To understand segregation better, consider the following example:

*There are 100 frames in a sequence which need to be annotated. The desired number of frames that a single batch should load is 10 at most. This limit of frames in a batch that loads on the tool is set at the time of setting a* [*batch limit*](/project-setup/build-jobs/2.-data-import#data-grouping) *at the time of* [*importing data*](/project-setup/build-jobs/2.-data-import)*.*

Here is the representation of this batch on the tool.

* There is batch of 10 frames (BLUE).&#x20;
* Each frame has 1 point cloud (ORANGE) and 3 camera images (GREEN) linked to it.
* Each camera is synced with the point cloud (ORANGE). The images will be synchronized with the corresponding point cloud based on the availability of calibration details.&#x20;
* The LiDAR point cloud may include pre-existing labeled data. (PINK)

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdSn2vl2l2crAa1JgQ1ZT_XXXLRpeGV9mrMjLgS7ZZ40zm3GxVWSRBNN1L8JKTKpxWfFIGOfEN256ROkdERu2CkFajE3N-kBpMz6hABqUBTq8uamKZ2lfx_muxEkFkr3-3XDECdp9xu_BwUBYH0DwgmCEin?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

Using the help of the above example, the Data Folder will need to be reorganzied in the following format:

* Respective Camera Data - Green folders
* LiDAR data - Orange folder
* Calibration - Red folder (preferable to have calibration to sync the camera with point cloud for quicker reference)
* Pre-labelled annotation data - Pink folder (when prelabelled data is available)
* Velocity/ Ego vehicle data - White folder (optional based on output required)

### Preparing Data Folder

* The data can be store all together in one Folder or multiple folders
  * Option 1: Prepare 1 folder with all 100 frames data
    * &#x20;Ideally all frames belonging to a single sequence should be stored together.
  * Option 2: Prepare multiple folders to divide 100 frame's data.
    * This is useful when the frames in a batch are not sequenced
* The folder name should not have any space Eg: `Folder_1`

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd3x8rGkB-FTlzRcpmdQf1i97UvTkbIR8ah06tWL9rkVFJa9rn_3s6miDMnL1PggYRq-VOzxwI1pVE_m98-kbq1BFbwHVVU9btFhbfTRKx2TYvOmMW28ec6AdP4Ngf1_MWq8_k61NGMplCiYEqW7HpDc0nJ?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

#### Step 1: Create Camera Folders

* Create image folders for each camera sensor respectively in `Folder 1`. For example, `Camera 1` , `Camera 2` , `Camera 3`... `Camera n`
* The Camera folder name will reflect on the respective camera images fetched on the annotation tool.  Hence, ensure the camera folders are named appropriately to help provide context to the subject expert.
* The image files' format should be in .`jpeg` or .`png` format.
* Each camera folder should contain all the images belonging to that camera sensor across all the Frames stored in `Folder_1`
* The image files in the Camera folders should have identical names if they were captured at the same instance.  For example, in `Frame 1`  , `Camera 1` , `Camera 2`  and `Camera 3` will all have the image filename saved as `xyz_timestamp1.jpeg`.

#### Step 2:  Create LiDAR Folder

* Create a folder containing files of the point cloud data across all the frames in `Folder_1`.
* The point cloud folder can be named arbitrarily. For consistency, consider naming it **LiDAR** or **PCT.**
* The point cloud data must be in **.las** format, as this is the supported format for the annotation tool. Refer to the guide on [Format LiDAR Data](#a-format-point-cloud-data) for more details.
* The folder should include all the point cloud files corresponding to all frames, organized within `Folder_1`
* The point cloud file in the LiDAR folder must have the same name as the images from the cameras associated with that frame. For instance, if the image files for all three cameras (stored in their respective camera folders i.e.  `Camera 1` , `Camera 2`  and `Camera 3`) are named `xyz_timestamp1.jpeg` for Frame 1, then the point cloud file for that frame in the LiDAR folder must be named `xyz_timestamp1.las`.

#### Step 3: Create Calibration Folder

* When camera sensors and point cloud files are available, a calibration file may also be present. If it exists, create a dedicated folder to store all calibration data in **.json** format.
* This folder must be named as `calibration`.
* If the calibration is identical for all camera sensors, then store 1 calibration file in it called `calibration.json`
* If the calibration data varies for all camera sensors, then either:
  * Prepare one separate file for each camera sensor and save it under the `calibration` folder OR,
  * Prepare one .json file with a separate block for each camera calibration.
* Compute the calibration matrix by multiplying the cam\_intrinsic matrix with the inverse of camera\_extrinsic

```
calibration_matrix = camera_intrinsic * inverse(camera_extrinsic)
```

<details>

<summary>json format for calibration file:</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong>   "matrices": [
       {
           "fromWorld": {
               "elements": [ //All element's components are in column Major format
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0,
                   0
               ]
           },
           "name": "LIDAR_TOP"
       },
       {
           "fromWorld": {
               "elements": [
                   839.3693313296216,
                   480.50874358343594,
                   0.9999117986552755,
                   0,
                   -1244.2586937950568,
                   20.203096824064712,
                   0.010155927635204103,
                   0,
                   -8.2467494447129,
                   -1248.651045792533,
                   0.008558740785910282,
                   0,
                   -1427.154718970285,
                   1039.0897354143844,
                   -1.7346966604269405,
                   1
               ]
           },
           "name": "CAM_FRONT"
       }
   ]
}
</code></pre>

</details>

#### Step 4: Create a Folder for Pre-Labelled Annotations&#x20;

1. Prepare the [data folder structure](#preparing-data-folder).
2. Store the prelabled annotations in the lidar\_annotation folder.

For example, if you have 100 frames, the corresponding files should be named as: 1.json, 2.json, 3.json, and so on up to 100.json.

{% hint style="info" %}
Prelabled annotations are stored as JSON files, one json per frame
{% endhint %}

The JSON schema needed to create prelabled files (supports cuboid, 2D bbox, 3Dpolyline).

<details>

<summary>json schema for prelabled file:</summary>

<pre class="language-json" data-line-numbers><code class="lang-json">{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Annotation File",
  "type": "object",
  "properties": {
    "annotations": {
      "type": "array",
      "items": {
        "type": "object",
        "oneOf": [
          {
            "if": {
              "properties": {
                "object_type": {
                  "const": "rectangle"
                }
              }
            },
            "then": {
              "required": [
                "object_type",
                "geometry"
              ],
              "properties": {
                "object_type": {
                  "const": "rectangle"
                },
                "class": {
                  "type": "string"
                },
                "identity": {
                  "type": [
                    "integer",
                    "string"
                  ]
                },
                "reference_folder": {
                  "type": "string"
                },
                "geometry": {
                  "type": "object",
                  "properties": {
                    "coordinates": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "x": {
                            "type": "number"
                          },
                          "y": {
                            "type": "number"
                          }
                        },
                        "required": [
                          "x",
                          "y"
                        ]
                      },
                      "minItems": 4,
                      "maxItems": 4
                    }
                  },
                  "required": [
                    "coordinates"
                  ]
                },
                "taxonomy_attribute": {
                  "type": "object"
                },
                "isGeometryKeyFrame": {
                  "type": "boolean"
                },
                "origin": {
                  "type": "string"
                },
                "prelabel": {
                  "type": "object",
                  "properties": {
                    "modelName": {
                      "type": "string"
                    },
                    "modelVersion": {
                      "type": "string"
                    },
                    "confidenceScore": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "object_type": {
                  "const": "cuboid"
                }
              }
            },
            "then": {
              "required": [
                "object_type",
                "geometry"
              ],
              "properties": {
                "object_type": {
                  "const": "cuboid"
                },
                "id": {
                  "type": "string"
                },
                "class": {
                  "type": "string"
                },
                "identity": {
                  "type": [
                    "integer",
                    "string"
                  ]
                },
                "classId": {
                  "type": [
                    "string",
                    "integer"
                  ]
                },
                "geometry": {
                  "type": "object",
                  "properties": {
                    "position": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "z": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "z"
                      ]
                    },
                    "rotation": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "z": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "z"
                      ]
                    },
                    "boxSize": {
                      "type": "object",
                      "properties": {
                        "x": {
                          "type": "number"
                        },
                        "y": {
                          "type": "number"
                        },
                        "z": {
                          "type": "number"
                        }
                      },
                      "required": [
                        "x",
                        "y",
                        "z"
                      ]
                    }
                  },
                  "required": [
                    "position",
                    "rotation",
                    "boxSize"
                  ]
                },
                "taxonomy_attribute": {
                  "type": "object"
                },
                "isGeometryKeyFrame": {
                  "type": "boolean"
                },
                "isAttributeKeyFrame": {
                  "type": "boolean"
                },
                "origin": {
                  "type": "string"
                },
                "prelabel": {
                  "type": "object",
                  "properties": {
                    "modelName": {
                      "type": "string"
                    },
                    "modelVersion": {
                      "type": "string"
                    },
                    "confidenceScore": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "object_type": {
                  "const": "polyline"
                }
              }
            },
            "then": {
              "required": [
                "object_type",
                "geometry"
              ],
              "properties": {
                "object_type": {
                  "const": "polyline"
                },
                "id": {
                  "type": "string"
                },
                "identity": {
                  "type": [
                    "integer",
                    "string"
                  ]
                },
                "geometry": {
                  "type": "object",
                  "properties": {
                    "points": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "position": {
                            "type": "object",
                            "properties": {
                              "x": {
                                "type": "number"
                              },
                              "y": {
                                "type": "number"
                              },
                              "z": {
                                "type": "number"
                              }
                            },
                            "required": [
                              "x",
                              "y",
                              "z"
                            ]
                          }
                        },
                        "required": [
                          "position"
                        ]
                      }
                    },
                    "thickness": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "points",
                    "thickness"
                  ]
                },
                "taxonomy_attribute": {
                  "type": "object"
                },
                "origin": {
                  "type": "string"
                },
                "prelabel": {
                  "type": "object",
                  "properties": {
                    "modelName": {
                      "type": "string"
                    },
                    "modelVersion": {
                      "type": "string"
                    },
                    "confidenceScore": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        ]
      }
    }
  },
  "required": [
    "annotations"
  ]
<strong>}
</strong></code></pre>

</details>

**Sample/snippet of Cuboid, 2D Bbox, 3D Polyline**

{% tabs %}
{% tab title="Cuboid" %}
{% code lineNumbers="true" %}

```json
{
  "annotations": [
    {
      "id" : "10e3547e-0ffc-11f0-beff-c9af1eb6b655", // Optional - UUIDv4 ID for all annotations across sequence
      "class": "car",
      "object_type": "cuboid",
      "taxonomy_attribute": {},
      "geometry": {
        "position": { // Position in metres
          "x": 5.992325288342432,
          "y": 4.904602559666202,
          "z": 1.5813289166406617
        },
        "rotation": { // Rotation in Euler angles (in radian) with ZYX order 
          "x": 0,
          "y": 0,
          "z": 0
        },
        "boxSize": { 
          "x": 4.837695807772452,
          "y": 4.519224086476998,
          "z": 2.4204508776208957
        }
      },
      "identity": 1, // Identity must start from 1
      "isGeometryKeyFrame": true, // Geometry key frame remains untouched with interpolation 
      "origin": "Customer",// With 'Customer' label, labeller is able identify prelabels on point cloud tool, and origin of label
      "prelabel": {
        "modelName": "Pvrcnn",// Optional - To help collect statistics, model name
        "modelVersion": "v1",// Optional - To help collect statistics, model version
        "confidenceScore": "0.8"// Option - Confidence score of annotation
      }
    }
  ]
}
```

{% endcode %}
{% endtab %}

{% tab title="2D Bbox" %}

```json
{
  "annotations": [
    {
      "class": "Vehicle",
      "object_type": "rectangle",
      "identity": 3,
      "reference_folder": "rearward_left_bottom_medium_ID060",
      "geometry": {
        "coordinates": [
          {
            "x": 855.318048,
            "y": 2158.155112
          },
          {
            "x": 855.318048,
            "y": 861.2488400000001
          },
          {
            "x": 2784.83608,
            "y": 861.2488400000001
          },
          {
            "x": 2784.83608,
            "y": 2158.155112
          }
        ]
      },
      "taxonomy_attribute": {},
      "isGeometryKeyFrame": true, // Geometry key frame remains untouched with interpolation 
      "origin": "Customer",// With 'Customer' label, labeller is able identify prelabels on point cloud tool, and origin of label
      "prelabel": {
        "modelName": "Pvrcnn",// Optional - To help collect statistics, model name
        "modelVersion": "v1",// Optional - To help collect statistics, model version
        "confidenceScore": "0.8"// Optional - Confidence score of annotation
      }
    }
  ]
}
```

{% endtab %}

{% tab title="3D Polyline " %}
{% code lineNumbers="true" %}

```json
{
  "annotations": [
  
    {
      "id" : "10e2447e-0ffc-11f0-b0dd-c9af1eb6b655", // Optional - UUIDv4 ID for all annotations across sequence
      "class": "lane",
      "object_type": "polyline",
      "taxonomy_attribute": {},
      "geometry": {

        "points": [
          {
            "position": {
              "x": -5.910736083984375,
              "y": 0.7063865661621094,
              "z": -0.001922607421875
            }
          },
          {
            "position": {
              "x": 4.194019317626953,
              "y": -2.124612808227539,
              "z": 0.3410773277282715
            }
          },
          {
            "position": {
              "x": -3.438983917236328,
              "y": -7.768611907958984,
              "z": 2.552077293395996
            }
          },
          {
            "position": {
              "x": -11.68572998046875,
              "y": -6.034612655639648,
              "z": 5.980077266693115
            }
          },
          {
            "position": {
              "x": -10.565982818603516,
              "y": -5.695611953735352,
              "z": 3.379077434539795
            }
          },
          {
            "position": {
              "x": -7.793731689453125,
              "y": -2.306612014770508,
              "z": 0.15207719802856445
            }
          },
          {
            "position": {
              "x": -17.27798080444336,
              "y": -7.60261344909668,
              "z": 2.255077362060547
            }
          }
        ],
        "thickness": 0
      },
      "identity": 1,   // Identity must start from 1
      "origin": "Customer",// With 'Customer' label, labeller is able identify prelabels on point cloud tool, and origin of label
      "prelabel": {
        "modelName": "Pvrcnn",// Optional - To help collect statistics, model name
        "modelVersion": "v1",// Optional - To help collect statistics, model version
        "confidenceScore": "0.8"// Optional - Confidence score of annotation
      }
    }
  ]
}


```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Step 5: Create a folder for ego data&#x20;

Ego pose data is used to enable features such as vehicle velocity, [merged point cloud](/annotation-tool/key-features/merged-point-cloud) etc. To calculate the reference velocity of objects around the ego vehicle, the ego data information for each frame should be provided with the dataset.

* Create a folder within `Folder_1` containing files of the ego data for each frame.
* This folder must be named as `ego_data`
* The ego data files in the `ego_data` folder must have the same name as the point cloud file corresponding to that frame. For example, if the point cloud file for `Frame 1` is named `xyz_timestamp.las` in the LiDAR folder, then the ego data file should also be named `xyz_timestamp.json` in the `ego_data` folder.
* To capture the **velocity** of objects around the ego vehicle, each file within the folder must include the "`timestamp_epoch_ns`" information
  * `timestamp_epoch_ns` is the timestamp at which each frame is captured
  * It is represented as a Unix epoch timestamp in nanoseconds (ns).&#x20;
* To facilitate **merge point cloud** functionality, the ego data information for each frame will be either calculated using the ICP Vanilla registration algorithm or is provided with the dataset and needs to be placed in the `ego_data` folder.

<details>

<summary>Snippet of the ego data</summary>

<pre class="language-json"><code class="lang-json"><strong>{
</strong> "ego": {
   "timestamp_epoch_ns": 50904429,
   "utmHeading_deg": 0.0,
   "utmX_m": 0.0,
   "utmY_m": 0.0,
   "utmZ_m": 0.0
 }
}
</code></pre>

</details>

* This file should include the "utmHeading\_deg,utmX\_m,utmY\_m,utmZ\_m" information.
  * Translation (x, y, z):
    * prev\_utmX\_m: The distance the object has moved along the x-axis (in meters) with respect to the `1st frame`.
    * prev\_utmY\_m: The distance the object has moved along the y-axis (in meters) with respect to the `1st frame.`
    * prev\_utmZ\_m: The distance the object has moved along the z-axis (in meters) with respect to the `1st frame.`
  * Rotation (yaw, pitch, roll):
    * prev\_utmHeading\_deg: The angle of rotation around the yaw axis (in degrees) with respect to the `1st frame.`


# Storages

## Customer Access to iMerit Owned Dedicated Bucket

By default, iMerit provides **Cross-account IAM roles** for programmatic access to upload customer data into a predesignated S3 bucket.

These steps are for a customer trying to upload data.

1. Create an IAM role or user in the customer AWS account (role\_1).
2. Give the role\_1 download permission (GetObject) and upload (PutObject) objects to and from the predefined S3 bucket.

```json
{ 
  "Version": "2012-10-17",
  "Statement": [
    {
     "Effect": "Allow",
     "Action": [
       "s3:GetObject",
       "s3:PutObject"
      ],
     "Resource": "arn:aws:s3:::<to be communicated by iMerit team>"
    }
  ]
}
```

## IAM Cross Account Access

The following steps apply when the customer prefers to retain the data within their own infrastructure.

1. Create four S3 buckets with default settings. The bucket names can be chosen as per your internal naming conventions.
   * {*CUSTOMERNAME*}-content.tasking.imerit-prod.io
   * {*CUSTOMERNAME*}-tasking-app-prod-delivery-bucket
   * {*CUSTOMERNAME*}-tasking-app-prod-import-bucket
   * {*CUSTOMERNAME*}-pct-content.tasking.imerit-prod.io
2. Apply the appropriate CORS (Cross-Origin Resource Sharing) configuration to each of the below mentioned buckets:
   * {*CUSTOMERNAME*}-content.tasking.imerit-prod.io and
   * {*CUSTOMERNAME*}-pct-content.tasking.imerit-prod.io

<details>

<summary>Bucket CORS Policy</summary>

{% code lineNumbers="true" %}

```json
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "GET",
            "HEAD"
        ],
        "AllowedOrigins": [
            "https://tools.tasking.imerit-prod.io"
        ]
    }
]
```

{% endcode %}

</details>

3. Upload the [pre-processed data](/project-setup/pre-process-data) to\
   `s3://{CUSTOMERNAME}-tasking-app-prod-import-bucket/quickserve_uploads/`
4. Set up an IAM role with the necessary *assume role policy* and *permissions*, as outlined in the code snippet provided below.:

<details>

<summary>Assume Role Policy</summary>

{% code lineNumbers="true" %}

```json
{
    "Version": "2012-10-17",
        "Statement": [
            {

                "Effect": "Allow",
                "Action": "sts:AssumeRole",
                "Principal": {
                    "AWS": [
                        "arn:aws:iam::797913408994:role/import-manager-prod",
                        "arn:aws:iam::797913408994:role/pointcloud-converter-prod",
                        "arn:aws:iam::797913408994:role/metafile-generator-prod",
                        "arn:aws:iam::797913408994:role/pointcloud-deliverables-prod",
                        "arn:aws:iam::797913408994:role/tv2-delivery-adapter-prod",
                        "arn:aws:iam::797913408994:role/template-output-generator-prod",
                        "arn:aws:iam::797913408994:role/delivery-manager-prod",
                        "arn:aws:iam::797913408994:role/delivery-manager-api-prod",
                        "arn:aws:iam::797913408994:role/tv2-delegator-api-prod",
                        "arn:aws:iam::797913408994:role/job-builder-prod",
                        "arn:aws:iam::797913408994:role/tv2-delegator-prod"
                    ]
                },
                "Condition": {
                    "StringEquals": {
                        "sts:ExternalId": "imerit-prod"
                    }
                }
            }]
}
```

{% endcode %}

</details>

<details>

<summary>Permissions</summary>

{% code lineNumbers="true" %}

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CustomerBucketAccess",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::{CUSTOMERNAME}-content.tasking.imerit-prod.io",
                "arn:aws:s3:::{CUSTOMERNAME}-tasking-app-prod-delivery-bucket",
                "arn:aws:s3:::{CUSTOMERNAME}-tasking-app-prod-import-bucket",
                "arn:aws:s3:::{CUSTOMERNAME}-pct-content.tasking.imerit-prod.io",
                "arn:aws:s3:::{CUSTOMERNAME}-content.tasking.imerit-prod.io/*",
                "arn:aws:s3:::{CUSTOMERNAME}-tasking-app-prod-delivery-bucket/*",
                "arn:aws:s3:::{CUSTOMERNAME}-tasking-app-prod-import-bucket/*",
                "arn:aws:s3:::{CUSTOMERNAME}-pct-content.tasking.imerit-prod.io/*"
            ]
        }
    ]
}
```

{% endcode %}

</details>

5. After the above steps are completed and a role is generated, share the following information with iMerit:
   1. Role ARN
   2. CUSTOMERNAME
   3. Region the S3 bucket is set up in


# Annotation Tool

3D Multi-Sensor Fusion Tool allows labelling of point clouds. The Tool Supports multiple features and interactions to support precise labelling. View [key features](/annotation-tool/key-features).

## Tool Support

* Datasets of Multiple sensors: Images, LiDAR, RaDar
* Sensor fusion: Labelling across sensors simultaneously
* Feature to Label Sequential & Non-Sequential Datasets
* Multiple [Drawing Tools](/annotation-tool/drawing-tools) to label points in 3D & 2D datasets:
  * [Cuboid](/annotation-tool/drawing-tools/cuboid), [Polygon 3D](/annotation-tool/drawing-tools/polygon-3d), [Brush Sphere](/annotation-tool/drawing-tools/brush-sphere), [3D Polyline](/annotation-tool/drawing-tools/polyline-3d), [Polygon 2D](/annotation-tool/drawing-tools/polygon-2d), [Rectangle](/annotation-tool/drawing-tools/rectangle), [Polyline 2D](/annotation-tool/drawing-tools/polyline-2d), Rectangle with Keypoint
* Aggregation of point clouds for identifying and marking Stationary Objects.
* Interpolation to mark Moving Objects

## Annotation Tool Guide

* [Tool Layout](/annotation-tool/tool-layout)
* [Steps to Label](/annotation-tool/steps-to-label)
* [Drawing Tools](/annotation-tool/drawing-tools)
* [Key Features](/annotation-tool/key-features)
* [Tool Shortcuts](/annotation-tool/tool-shortcuts)


# Tool Layout

## Tool Overview

There are primary sections of the tool:

1. [Header](#id-1.-header): Green
2. [Footer](#id-2.-footer): Purple
3. [Class List](#id-3.-class-list): Blue
4. [Point Cloud](#id-4.-point-cloud): Yellow
5. [Image Panel](#id-5.-image-panel): Red
6. [Annotation Detail](#id-6.-annotation-detail) (On Selecting an Annotation): Orange

<figure><img src="/files/h3c0vsJMrttWeNaE39Oi" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fDiKeVy0s9a7KFCiiurV" alt=""><figcaption></figcaption></figure>

## 1. Header

The header consists the following actions:

<figure><img src="/files/IIMYzfxYvXYc1F9waLur" alt=""><figcaption></figcaption></figure>

### BEV-3D Mode

* This component acts like a toggle to view the point cloud in 2D (Top view) or in its default 3D environment.
* When 2D is toggled ON, the annotator can mark objects in the point cloud from the top view using Rectangle interactions for creating a Cuboid.

<figure><img src="/files/vnJ3FHr9653rsEqxnL3W" alt=""><figcaption></figcaption></figure>

* When 3D is toggled on, the annotator can mark objects in a point cloud from any angle by dropping a Cuboid.

### Rotation

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcY5C96Y95gVHP3g5aJNnJn_XqsUeWwmLbH5C0fiz4mCiPTxYIOalmnWOjzqyIkH-SoGOB66-9I2YImauHVyTnuQq1QZPURiL0T84f1Q6pCfw-taovHZEBGl5ooLy74JutW4JWyJB6zj-niYFfxIUxZ5391?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

* This icon is enabled upon selecting any [Cuboid](/annotation-tool/drawing-tools/cuboid).
* On using it, the Cudoid Direction get rotated in an anti-clockwise manner.&#x20;
* This helps if the direction of the object has been indicated incorrectly after setting the dimension.
* **Shortcut**: `R Key`

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeRp01cGaP6NdMfG4uww4LHIYOsADa8556rKsclDysTg4qzMRthXCRG9pzFP6S_KCsnV9XlDp5zwWv-IFLs4vKmEcUJ6cqhyp8MVlwyiCL1lXB8iPJUSCKgCApNZvBWYrP-iPGZsqrHU78lR3b532IMN6Q?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Autofit

The autofit feature gets enabled only after a cuboid is selected. This feature allows the user to remove  extra space between the end most point and the edge of the cuboid. This feature ensures that no point is excluded while creating a much tighter box from all sides.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> For optimal use of this feature, it is advised to ensure that the object is fully visible and not partially obscured from any side.
{% endhint %}

<figure><img src="/files/s8Lr6LsrEQwqX5PisrvA" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/78RVZ2gdBvEUaAys64JT" alt=""><figcaption></figcaption></figure>

### Merge Point Cloud

This feature is helpful in sequential tasks to identify and mark objects in their stationary state. Learn how to use it [here](/annotation-tool/key-features/merged-point-cloud).

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> While MPC is ideally used for static objects, any user can also understand the entire scene by smartly using the 'Frame Jump Length'
{% endhint %}

<figure><img src="/files/KGSjctOMMiABVXDNKw0o" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/8B3iqK49HhERyDLc3HEA" alt="" width="375"><figcaption></figcaption></figure>

### Outlier

* This feature allows annotators to locate unlabelled points.&#x20;
* On toggling this on, all the points in the point cloud that have not been labelled will start to blink to aid in locating them. Learn how to use it [here](/annotation-tool/key-features/outlier).

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXf8DJtw0lfZzNZnC2zNJn9Bgh1NSt5I2LWA-NKzgDSHx700S7oy-ckzRDhOTLbRNtXxXHxBpCUzAI-uBVnOJYLUFC6uKeu9Tq89dLwEqwzX3fHEI9NEGI3BDJYqlA0dKBEkWh6mDNcFGsAHhpm2XNfoAkLP?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Isolate

* This feature is used to focus on specific areas of the point cloud to avoid background distraction while labelling. Learn how to use it [here](/annotation-tool/key-features/isolate).

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeM5WgdhAl9aMF-8LM10Gc9MJ3dbodclM9pW5XZ14q8yV_1YRsBQa5YU0FAN5-sFCGxaxVMDMdn9u3QSYt9N9e0Bh8wsINsx5RYPUMVFVydxuWjR3VL8AqXkZAcIj-dQQkvho8sTwkaPAA_obYWA3D5qevy?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Navigation Controls

There are 2 Modes available to Navigate in the point cloud:

1. **Helicopter Mode:**

   * Move (front, left, back, right) - `Key W, A, S, D`
   * Fly (up, down) - `Key Q, E`
   * Looking Around - `4 Arrow Keys`
   * Zoom Control: `Mouse Wheel` or double-click to zoom in

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXer2zhKZolChjp-vs-AxXMqroWhYVUIZAwoEWg6ZW4Yw-UBHM8beMwwsv-mdtXyfYzHzDN6IRx59EAjUzL_qin_7KoRdzwRhhBntk1NJyfSxi_lwOi8QanFmbESGe_Io40G2vpjNZl9N6G9hCaX1XceUpo?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
2. **Orbital Mode Shortcuts:**
   * Move (up, down, right, left) - `4 Arrow Keys`
   * Orbit around:&#x20;
     * `Key W, S`  (Orbiting top to down)
     * `Key A, D` (Orbiting right to left)
   * Zoom Control: `Mouse Wheel` or double-click to zoom in

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXepSTVyCAOwFUrJ95litD75ipsqvy_4t-76xho-_shQmB3HHkA8bxqIQ_DRbeXujU9NkPqMM8xgzCgRon8PzYyjMkTgH9NtvTkrhLf2MloL2cNQ1t1C6Vw3uHTYHuGs9HBhWF2iS_v6zuX8tH7y62DjMcbS?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Fit to Screen

This fits the entire point cloud within the browser screen. Shortcut: `Key Ctrl + F`

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdNupOF56luMIQWNsADWKa51Ze37nF8tpV0Ns9Y3kfCqN2U5G5npBDOMg53Vd__1zqb5BoD4uJ2e-E-N1iE55gUWgGJVi_vGHq2kOcH7G_DnDGuMAXATfbNel8priA_DV20wLF46OJPS4Q1cSwfC5-qq4E?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### J**ump to Origin**

The coordinates at which the user is positioned by default when the task loads is the point of Origin. On clicking this, the user is navigated back to this point. Shortcut: Key O (alphabet)

&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd3A-9SUfPIghUVQPOF8uKWYzctTUryGA-OhEIxD7GlL3Wpdqy0_nQy8IUYRFD2GQHoPuJNDQMfTNybR4F56lDcdqhDnS00N8JGnsZqvrQFt7-MAHvmeTybQRDnjLudLglrf9H575GVS9t6Sxc1QGSPAQqx?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### T**oggle Fullscreen**

Hides the browser bar and makes the tool fullscreen.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXccYBsC1wHy8A2pcjgoSdRSiUbiYmBysuka64BvKWxclAFD8p7u917fiziNVRDx1Bff-t_5nfkGs_hOfrkBvjG0BEirx7kEJjoSIDDYAukBn6Si7BoA4UNrON7ps2aRMjC4R4S_cQknFKc0EcOoXEIJ1Xxt?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Sensor

The ego vehicle has multiple LiDAR sensors installed on it. Because the sensors are not time-synced, a staggering effect of the objects around the ego vehicle can be observed in the point cloud (refer to the image below). The user can use the sensor filter and select the sensor points they would like to consider.

<figure><img src="/files/fBP7XvXRkCQaCpjsWfHh" alt="" width="239"><figcaption></figcaption></figure>

### Status&#x20;

The Status link on the top right corner is enabled on selecting a [Cuboid](/annotation-tool/drawing-tools/cuboid). On clicking it, a box opens with the following details.

1. Class
2. Dimension
3. Instance (if Class has been marked with [Instance](https://docs.imerit-prod.io/annotation-tool/pages/paJknzjTNlzvWVaCQ2EI#id-3.-has-instances))

<figure><img src="/files/mskRrGB6ZpSwoeFycROQ" alt=""><figcaption></figcaption></figure>

### Issues

* This link gets enabled in the [Audit Tool](/audit-tool) after the batch passes through the Nodes defined in the Taskflow, it moves to the Audit stage and gets reviewed by the auditor.&#x20;
* The Auditor raises [Issues](/audit-tool#how-to-raise-issues) observed in the form of issue cards as and when they are spotted.&#x20;
* Once auditing is completed, the batch can be reopened by the experts on the Annotation tool with the issue cards visible for them to refer to and resolve the issues.

<figure><img src="/files/tYO1JKoIw6kse5DaF9S9" alt="" width="303"><figcaption></figcaption></figure>

### Validation

The Validation executes a logical validation on each task to ensure&#x20;

1. Better quality is delivered
2. The annotator can be retrained

<figure><img src="/files/AUOZRVcQJ44D8dYvzbi4" alt="" width="42"><figcaption></figcaption></figure>

<figure><img src="/files/kHLeLUr0eL09zqjqgfs3" alt="" width="293"><figcaption></figcaption></figure>

### Help

On the top left corner of the tool is the help icon to view Shortcuts and Batch-related information.

<figure><img src="/files/DheRZ0wjTQ37Xaa0R40D" alt=""><figcaption></figcaption></figure>

#### a. Shortcuts

Selecting the 'Shortcuts' in the help menu, a panel opens from the right, listing the labelling shortcuts.&#x20;

View the list of all the Annotation Tool shortcuts [here](/annotation-tool/tool-shortcuts).

<figure><img src="/files/yss3K2ld7RgiwXLrGdmb" alt="" width="332"><figcaption></figcaption></figure>

#### b. Batch Info&#x20;

On selecting 'Batch Info' in the help menu, information about the batch is provided in a box. Using the 'Copy to Clipboard' you can copy the entire contents in a click.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcT-1M_WQiZ0D3Dcdrx5hTOZKdzv3VAmOuvH2vFaTz1qlUJE21N8NKtlnKBiviBInGbR1bc2hl7SRLOn_GZKDMXJIyj_7WV-HxyHvGfx4kANlh01NV7XpPs-lFjO2V7B_Sov6lYZr3CPrPuHBXrUF3B8jY?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

## 2. Footer

The footer consists of the following actions:

<figure><img src="/files/UE1SXtatr5bNn45hHUFw" alt=""><figcaption></figcaption></figure>

### Time Tracker

Displays the time spent on a task in real time.&#x20;

![](https://lh7-us.googleusercontent.com/docsz/AD_4nXebAA1IULvrU1Jqoi9xLkqpw8eTE-dsURKlwTJxE3yGaOEd9KltfYskZZbaSgbFXJEpqkcgiSXcI5vjPeHQx-TaJkdKvYFIu4PWa5aOUCYzHTLJ7f975t3-N9D7Q0r7hqn9_VpDraZtB_eCCjYk5WqtTGR5?key=lGhAQLv5xC3Ciuwf6zBTGQ)

### Timeline

* The timeline displays all the frames within the frame sequence.
  * To further see the frames, drag the horizontal white bar below the timeline view
* Navigation across the timeline can be done by&#x20;
  * clicking on the frame
  * dragging the timeline marker

<figure><img src="/files/MJKZA5SANsAF5TeLIsZ3" alt=""><figcaption></figcaption></figure>

* entering frame number on its right

<figure><img src="/files/XzvQE21Gqt5qhruMwjfJ" alt=""><figcaption></figcaption></figure>

* clicking the first, previous, play, next and last buttons

<figure><img src="/files/s21ErwBkH9xiNx5H0YRr" alt=""><figcaption></figcaption></figure>

### Menu Option

<figure><img src="/files/DXgkIY5MMf6H5DAzIRlR" alt="" width="249"><figcaption></figcaption></figure>

#### a. Tool Setting

Point Cloud visibility can be configured here

**Timer Range**

* Each point captured by each LiDAR sensor has a timestamp. This timestamp is the time difference between the reference time of the frame and the time of an individual point. This use case occurs when the LiDAR sensors placed on the ego vehicle are not synchronised.
* In the below example, '0' is the frame's reference time and each frame is 100milli seconds apart. Using the Timer Ranger filter, the user can select any range between -49 up to +49 and filter the points in between. Keeping the controls of the slider at the end will show the entire point cloud.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdeInDO1ScZAUOqRzTJjLJH6qyXfUphiu94n4fWA0_qgKN3AdJ7J5f2S3bkej1TQ6vxc8_TycIgCELnkNFp8f4L84CJjTEPpCkA5w3jY-HfzqxWJsdKPVByBQU2zHdaDXtEEbn_Wjo3e50TL-dhD14-mQqV?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

#### **Point Budget**

* The number of points to be loaded for frames is set here.&#x20;
* By default, the value is set to 5 million.
* When the frame contains more than 5 million points, the tool loads the 5 million points in the viewable area. Panning and zooming in loads the other points. Please note, the tool also loads the previous and next frames for the users benefit and smooth experience.
* With increasing the limit of points, latency is to be expected.

<figure><img src="/files/ncISWjMGPRr4JNFIcXKX" alt="" width="344"><figcaption></figcaption></figure>

#### **Enable Eye Dome Lighting**

<figure><img src="/files/0O2tCzVM9wjfM8RdXYMq" alt="" width="344"><figcaption></figcaption></figure>

* EDL is a lighting model that accentuates the shapes of objects within a point cloud
* This is done by visually grouping objects that are close in distance and shading their outlines, enhancing the perception of depth.&#x20;

#### **Class Point Brightness**

<figure><img src="/files/m6JC02tYIv3hCVxt7dFH" alt="" width="344"><figcaption></figcaption></figure>

* The points that have been classified appear in their class colour.&#x20;
* With the help of this slider, the user can reduce the brightness of those coloured points.

#### **Background**

<figure><img src="/files/v3mixXB57AdHzBR5KkwB" alt="" width="344"><figcaption></figcaption></figure>

Change the background colour to make use of the different light situations.

#### **Point size modifier**

<figure><img src="/files/2zkOF7fXUog4gtAComt0" alt="" width="341"><figcaption></figcaption></figure>

Increases/decreases the size of the points on the screen.

#### **Point Colours**

<figure><img src="/files/wfmF7lp6ICE5feON1r0I" alt="" width="335"><figcaption></figcaption></figure>

View the points in different colour schemes:

* **Plain Colour:** The points are displayed in a single colour which the user can choose from the palette.
* **Elevation Gradient:** The points are displayed based on their elevation in the point cloud. Cooler colours indicate lower elevation on the Z-axis.&#x20;
* **RGBA:** When the point cloud data contains an RGB field, this information is used to set the colour of the points.
* **Intensity (B-G-Y-R):** When the point cloud files include an intensity field, the intensity values are used to determine the color of the points. Points with intensity values near 0 are assigned a Blue color, while higher intensity values transition through Green and Yellow, with values closest to 1 appearing as Red. Points falling between these thresholds will display a gradient mix of the adjacent colors.
* **Intensity (B-C-T-G-Li-Y-O-R):** Similar to the Intensity (B-G-Y-R)**,** when the point cloud files contain an intensity field, this information is used to set the colour of the points. If the point's intensity lies closer to 0, the colour of the points will be Blue, next threshold is Cyan, Teal, Green, Lime, Yellow, Orange and intenstiy values closest to 1 are Red.
* **Intensity (Rainbow):** When the point cloud files contain an intensity field, the colours are set in the rainbow shade card pattern.
* **Intensity Grayscale:** When the point cloud files contain an intensity field, this information is used to set the colour of the points between white and black and everything between gets a different shade from gray.
* **Classification:** Displays the points based on any pre-labeling segmentation that is loaded on the tool.  Currently, by default, based on the segragation done prior to uploading, the tool displays ground and non-ground points using either Patchwork+.  Based on customers acceptance this information can also be segmented using in-house ML.

#### **Speed Controls**

<figure><img src="/files/ou2WnmZEZpCsNpBcKK2R" alt="" width="335"><figcaption></figcaption></figure>

* The speed of a mouse scroll can be calibrated.&#x20;
* The higher the value the further distance is traveled in one scroll.

#### **Regions of Interest**

<div data-full-width="true"><figure><img src="/files/4mDJQeUO6otDsWJ847TT" alt="" width="344"><figcaption></figcaption></figure></div>

* ROI is the area visually defined for the labelling experts to know the areas that need labelling covered.&#x20;

[Learn how to use](/annotation-tool/key-features/regions-of-interest)

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdhIHaPBmNWUsVhjRJCJFVUf09MhhsTnS8YI_l7ITS6la6DgR-zxOCw8FaER5Vm8LeMIvbzI2Xu0MhBiCsX6pQi3S-NMFGfBC6T-h5BUBRAmVyQoxzYu138mnWH4iFTkpDmn1rwGRDusUz6drvT2Y7qFgh0?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

### Attributes: Task & Batch Level

The [task level attributes](https://docs.imerit-prod.io/annotation-tool/pages/8y4xwQ0lyWeilUzIlS9g#b.-task-level) and the [batch level attributes](https://docs.imerit-prod.io/annotation-tool/pages/8y4xwQ0lyWeilUzIlS9g#c.-batch-level) defined will get reflected here for labelling experts to input.

### Adding Comments

Annotators can add any doubts or comments in this section. The expert in the pipeline is notified about it at the next [node](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates).

### Validate Task (AutoQA)

Any frame-specific instructions or constraints will appear here for the labelling expert to refer to. Read [more](#autoqa) to understand.

## 3. Class List

The Class List reflects all the classes defined during the step of [creating a class](/project-setup/create-recipe/2.-classes#create-new-classes).&#x20;

* This panel can be collapsed from the right corner to have a full-screen view of the point cloud.
* This list consists of all the classes with and without [instances](https://docs.imerit-prod.io/annotation-tool/pages/paJknzjTNlzvWVaCQ2EI#id-3.-has-instances).

<figure><img src="/files/QtPGRswbEryyABPHir1X" alt="" width="366"><figcaption></figcaption></figure>

[Learn how to use it here](/annotation-tool/key-features/class-list-all).

### Other Controls <a href="#object-visibility-controls" id="object-visibility-controls"></a>

Below the Class List, are two checkboxes for better visibility and checking.

#### Filled Boxes

Fill the cuboid with the colour of the Class.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcKuACaZWpN9p3xKdiTNgw4uY9JcpdcP2qhrE8cY93ps70Bj1tW6Ea_O4S4TrtIvVmjwPhcG_nDXKBFxS6Shq0oM1rMzqj_-gO5LvyutwNtMbgz9L63VKo75s_vBdMj7GU5xkB-hlAT62c2lrm7N4tX75-H?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

#### Object Names:&#x20;

Displays the name of all annotations on both the point cloud and reference image

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXevQJVHiRhCVBzM1ZIulbEyPjNwnqjQnoOwbZ_t0tv-7ZrXrU1d7G5yc57NC6O84XZhdbxg9DZdmuOE0NNjgVY4PjT93NlXUc8LUutnZbSnB0h1HwZ2GnKOWmsWtPlUwYejpBaS-nCeJSd92np2xWDKB5Bi?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

## 4. Point Cloud

The central area of the annotation tool is dedicated to the Point Cloud sensor. This is a 3D Space where the user [navigates](#navigation-controls) to view the point cloud scene.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdWa5iYdevR23sVCsTPusP0jXeOEWzPcyHJv9ujBgQmleQybhGLuc9iJfsaYjUR-DyuWl77pUFZ24qhBlRhDLPNokRKfE_VMJM60thzQlKNEXa8LFu0jJnnQGors0dzAs4_3c675PwQO-XI6me5l8IC_HPX?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure>

#### Ground and Ceiling Mover

On the bottom right of the point cloud is a two-way slider that allows the user to hide points from the ceiling to the ground and vice-versa. This allows annotators to control the visibility of unwanted/ obstructing points. Learn how to use it [here](#ground-and-ceiling-mover).

#### Show all points

This component allows the user to filter out points and keep only ground points visible. This is calculated with or without ML algorithm.

<figure><img src="/files/Jx6BZT7yQjL0DniHwgJA" alt=""><figcaption></figcaption></figure>

## 5. Image Panel

Below the point cloud is a collapsible Image panel that consists of all the cameras linked to the point cloud. Referring to the images aids the user in identifying the objects that need to be marked in the point cloud.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXf7Fs8xAPpUOcpQQYMjs-iUrzH2C-jNXgT-2O7_tVya4MQPXrm_0rG9xp9Kds_qR_DPJ864OchqrXn7KLxIZU61y3T9NsUiIdJwHoOUv_io0ypDtuQfj2fJ02RBdBJfV-rt9_w2ePizsHH296CWJ-gdJLw?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

* These Images have the name of the camera mentioned in the corner.
* The panel acts like a carousal with arrows for the user to glide through.
* On double-clicking the image, it gets toggled to fullscreen and replaces the point cloud. Press the Esc key to toggle back to the original state.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeEvld_K7LF8Byy7dYBrB_qyrCntmbO5c0oTEEEdzMv3sYZpTQa_PoxzJTvoRro8fbd5XwGbbmJ9-57vV0bkEAibZPskYumd5Z9r8XD-311QXvY35JbaRJR5nAr6srttiOhFuRg_xyOM8MqGRutcdbljVbg?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

## 6. Annotation Detail

#### Annotation Hover

The top right of the point cloud displays a label of the annotation being hovered upon with its attribute values. Use `Shortcut Key L` to enable/disable the visibility of this label.

<figure><img src="/files/47Hz0RgkfePquypi1Et1" alt="" width="392"><figcaption></figcaption></figure>

#### Annotation Click ([Cuboid ](/annotation-tool/drawing-tools/cuboid)Only)

* The [status](#id-7.-status) link automatically displays the class name and dimension details on the top right of the point cloud.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXewJIRYqlnTS6kmrv1OcHmQYnZMSC37zwMxC4UrRRP45XddLGuhOnX6zNrEuRq49q7OV2c4wLsWBKUfSrY8LIYuJr_9VKm4Z2d97sf-5LuAm1T6_4CcgaR_AwlOeCj5kD83OWSafufDJ842dLz1lXquKhM3?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure>

* Upon selecting an annotation, the timeline displays the occurrence of the annotation across the frames by the colour given to its Class.&#x20;

<figure><img src="/files/AxS7JEFU6NarO8lJqkfY" alt=""><figcaption></figcaption></figure>

* On Expanding the timeline, one can further see the values given to all the [time-varying and constant](/project-setup/create-recipe/3.-attributes#attribute-type) attributes linked to the class of the selected annotation.

<figure><img src="/files/Mjb7nd8cfGHdTyx0trMQ" alt=""><figcaption></figcaption></figure>

#### Annotation Right Click

* Users can View details of the annotation entered at the time of creation.

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcnsibVINDVnuOfE5djgpsFm1MAI0Dn4IvA_huH1jBhnvONR8NDZ1qrCLm9pUx59VSKhjD17FKdWzslXM9-PofnOoZb7JKUMuS1ZPpNxeJZbRNNnrNrtHjmu05izYBsPrN_-TdLJcY1mT75cfdaFw10Eyc2?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>


# Steps to Label

A labelling expert goes through the following steps to label an object. The[ Annotation Tool ](/annotation-tool)provides features to aid with various steps of labelling:

1. [Scene Setup & Orientation](#id-1.-scene-setup-and-orientation)
2. [Navigation in Point Cloud](#id-2.-navigation-in-point-cloud)
3. [Object Identification](#id-3.-object-identification)
4. [Object Visibility](#id-4.-object-visibility)
5. [Object Labeling](#id-5.-object-labelling)
6. [Annotation Detail Input](#id-6.-annotation-detail-input), [Instance ID](#instance-id)
7. [Dimension Setting/ Modification](#id-7.-dimension-setting-modification)
8. [Interpolation](#id-7.-interpolation-for-a-moving-obj) (for a moving Obj.)
9. [Object Tracking](#id-9.-object-tracking)
10. [Cross-Checking](#id-10.-cross-checking)

## 1. Scene Setup & Orientation

* Setup point cloud visibility and density from Tool Settings (tool Footer).
* Fit the entire point cloud in the viewing window using Fit to Screen (tool Header).
* Jump to the centre (near the Ego vehicle) by using Jump to Origin (tool Header)
* Toggle to Fullscreen if desired (tool Header).

## 2. Navigation in point cloud

* Choose one of the two Navigation Controls to navigate in the point cloud based on your preference. (tool Header)

## 3. Object Identification

The tool provides multiple features & interactions that aid in object identification:

* Expand and collapse the image Panel whenever needed to cross-check the object/scene-related details.
* Use the help of the raycaster while navigating through the point cloud to see the respective coordinate highlighted in Camera Image(s).
* On hovering on the Cameras, a red cone (Frustum) will appear in the point cloud emerging from the Ego vehicle to indicate the direction the camera is facing.
* Enable the [Merge Point Clouds](/annotation-tool/key-features/merged-point-cloud) across the frames to identify and mark stationary objects.

## 4. Object Visibility

For better object visibility during Drawing/ Marking use the following features:

* [Isolate](/annotation-tool/tool-layout#isolate) areas of the point cloud where the object is present by marking a boundary to hide surrounding/ background points.
* Hide points from bottom (ground) to top (ceiling) and vice-versa using the [Ground & Ceiling Mover](/annotation-tool/tool-layout#ground-and-ceiling-mover)

## 5. Object Labelling

* Switch to a desired view to start marking an object in the top view using [BEV Mode](/annotation-tool/tool-layout#bev-3d-mode) or 3 dimensionally using [3D Mode](/annotation-tool/tool-layout#id-2d-3d-mode).
* Identify the object either on the point cloud or on the camera sensors.
  * Pull up the Camera Sensors using the hotkey `Shift + Q` or double-clicking the camera sensor in the reference images.
* Click the '+' icon on the Class the object belongs to from the [Class List.](https://docs.imerit-prod.io/annotation-tool/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list)
* All the Drawing Tools linked to the Class will appear. Select the appropriate one from the [Available Drawing Tools](/annotation-tool/drawing-tools).

## 6. Annotation Detail Input

After marking the annotation, mark the annotation details in the popup that appears. Enter the Instance, Attribute Details and Relationship if any.&#x20;

### Attributes and Relationships

Once an annotation is created, the user needs to input the following:

#### a. Time-varying & Constant Attributes&#x20;

* Enter all the mandatory attributes ([constant](https://docs.imerit-prod.io/annotation-tool/pages/8y4xwQ0lyWeilUzIlS9g#id-1.-attribute-type) and [time-varying](https://docs.imerit-prod.io/annotation-tool/pages/8y4xwQ0lyWeilUzIlS9g#id-1.-attribute-type)).&#x20;

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfF9LOoDhqOt5U6opjwdg7l61mSC7aMSSO02wJhkS7VG8cApGzmguaX85TEcG27HZMgr19-LCnsHieGDyHzh95783FnOZPZbpL54TQSSY8Kwks8XrVW5kq3ZRGneAtcko7jvNrDejbyMnGNf5BzaHIugOA?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

#### b. Relationship

1. This tab is enabled if a [relation](https://docs.imerit-prod.io/annotation-tool/pages/XUYNqXh0Ft0M6lAjHPO4#b.-create-relations) has been defined in the recipe generator.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXesi5FTa8Oid9ZxYYPfsUkeTqnOxmlSOMrCCbfGm5tSEKWOxB0QVNi8_GWeU_rnT3gUycq43XRzE11R1skrHWQ95NJvzZykMB0T8Hh8o1nSpdI08LTtCFMa6gspGg7PKKBZEEOLbC7ICL3u8RvYEAN71Bw?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>
2. Select the the Relation type from the dropdown.
3. Select the Instance it has a relationship with (multiple instances can be added).
4. The relationship between the two can be applied across all frames or only the current frame.
5. The view icon allows the user to see the list of frames the relationship exists on.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfaiA0rL1LnggBrc9_yACFoBdvLuZqYYYsCttf-npgaadc9t5h6Yyl1d2f2_AoURxnDg76PXoIhtEgumXl4KKDydDreJOM5lI1ZsYosfnzg8SAVTzOV5vLcH2yUEIsFxS7VhDL19CzIHTLoxxXHE03qfnk4?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>
6. Once the relationship is saved, the visual representation of the link is displayed over the point cloud with a line connecting the two instances.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfGAIKWWNC-KIYMQuWrz8SYLMUWE3ebP6xjv6s6SqH8JM3zzy8ypPbeSyJp3JFnBU-dmml57_fVOPmYmZBb1a0UM9b9xKMocTthly5nS_n06XqFzK0b1tZlvAUTyjE5OF3xsapwFw-OUhiU698gC_4It6tQ?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

Learn more about the [Relationship feature](/annotation-tool/key-features/relationship).

### Instance ID

An Instance ID is an identifier assigned to each labelled object across the batch of frames.&#x20;

* This instance ID can be used to track an object over multiple frames.&#x20;
* Instance ID can be viewed in the [status box](/annotation-tool/tool-layout#status) that appears on hover or selection of an annotation on the [class list](https://docs.imerit-prod.io/annotation-tool/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list)
* Instances can be [created](#creating-instance), [modified](#changing-instance-id-for-an-annotation-across-frames) or [merged](#merging-instance-id).

  <div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfxR2LzhVWo-mhwAxVFlu75y0Tp5yiRmQneS9RQQFbtJ4dXmAZsx5wHV-5jPdq75bgVOmeGeoSnNlJX8GoivqXJ-xPhBiEZ8CNoZOBTFfYMI3k9rluyXld5evhf97gD5ubtJuQ1QgLqrSjii6kxtuGp2Xus?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure></div>

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcCQNlz_uC92TRov9d1bfR8KLbBrQ3puPIka-xPeEbWDTsDOaIiflCzZWQS6jKkhatXpSMoMOGfLC51R_e5EATSGwWXjlyMp0uGlsOlBEgsCru-FfQrv5ojJDZ-IQCCUSUWHa1QFRQRq8xpB1fmYsVgmUE?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

#### **Creating Instance**

After creating an object, the user is asked to:

1. Create a new instance or select *+ Create New*.

{% hint style="info" %}
There will always be one unique instance per Frame and Sensor.
{% endhint %}

For example, only one object will have the ID  car\_1 which is present in Frame 1. This car could be present in 3 Cameras and the point cloud of Frame 1. Hence each of the 4 Sensors (3 Camera, 1 LiDAR) will have an annotation with ID car\_1.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe3Kksf8V3bNrdWXUOoiuVUlaBnlsjmw0dGqF639Aj0gX2VAOVf3CvzS-Fi0ubvUSoph64MeAaU6BVL09x7COaVMilwli63_myHWEc2_4gmfSNf1BHGW3-Ownn3QKlqV0fny0wJ2p0BrgOTlOmJRFubWt8?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

The Instance Dropdown allows 2 things:&#x20;

* Will allow the user to create New Instances
* Lists all the created instances that are missing in that Sensor (car\_48 in above eg.)

#### **Changing Instance ID** (for an Annotation across Frames)

1. Select the object.
2. Open the annotation details pop-up
3. Select *+ Create new*'. The tool will allocate a new unique ID to it.
4. Save the new Instance ID. This replaces the old Instance ID in all frames for that annotation.

#### **Merging Instance ID**

If the user realises that two instances are the same object, then merging of instances is required. Eg. `car_2` on Frame 10 is actually `car_1.`

1. Select the annotation you want to merge into another instance. (car 2 on Frame 10).
2. Right-click and select *Annotation Details.*
3. Open the instance ID dropdown. This dropdown has a lists of annotation IDs missing from that current frame and the option to create a new one.
4. Select the appropriate existing ID that the selected one needs to merge with (`car_1`).
5. Save and the old instance gets changed to the new selected one (`car_1` becomes `car_2` in Frame 10).

{% hint style="warning" %}
Merging instances is only possible when both instances have no overlapping Keyframes.&#x20;
{% endhint %}

## 7. Dimension Setting/ Modification

* On selecting an annotation, the multiview mode will be enabled on the right-side. Hover on the multiview mode to enable the annotation to modify it from the top, side, and front views aiding accurate dimension modification.&#x20;
  * Learn how to modify annotations using [Shortcuts](/annotation-tool/tool-shortcuts#drawing-tools-and-modification).
  * Learn how to use [Drawing Tools](/annotation-tool/drawing-tools).

## 8. Interpolation (for a moving Obj.)

If the Annotation created is for a moving object, use [keyframe interpolation](/annotation-tool/key-features/keyframe-interpolation) feature to mark the object across all the sequential frames without having to create it in every frame.&#x20;

## 9. Object Tracking

* Use this feature when an object is required to be labeled in both point cloud and image sensors while sharing a unique [instance ID](#instance-id).
* The projection of the created cuboid in the point cloud is visible on the appropriate camera images.
* Double-click on that image to enlarge it.
* [Create a rectangle](/annotation-tool/drawing-tools/rectangle#create-rectangle) on that object.&#x20;
* [Annotation detail input](#id-6.-annotation-detail-input) opens up. Choose the instance ID the same as its parent annotation created in the point cloud. Fill in the remaining details and Save.
* The 2D Instance of the same object appears under the 3D Instance created on point cloud (sharing the same ID). Eg. Truck\_1 is a cuboid annotation created in the point cloud and the instance of the same object is created in Image. This will appear as Truck\_1 #2 (with a 2D icon on the left of the label)

  &#x20;

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeU2ahp0amk3G9qy4aUUTPzrCLvl0sGlQCKsWOZ7mmh4JMHK0RxnNoQgEY_9_EmALtPF0z4_mfPXfI9w6Maxt24u0-Js5_Sun7IVUoIH7ETSyzeNsMyn-GA-Nze0Bvq5uCmcXWXlKbGvNQDfeakSGLHS55s?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>

## 10. Cross-Checking

* Use the [outlier](/annotation-tool/key-features/outlier) feature to locate points that have not been labelled.
* Use [object clipping](/annotation-tool/tool-layout#class-row) on the class row to identify if:
  * Any extra points have been labelled for an object
  * Or if required points have not been labelled for an object
* Conduct auditing and mark [issues](/audit-tool#how-to-raise-issues) that are observed in the [Audit Tool](/audit-tool)
* View the overall submissions of [batches](/project-setup/pre-process-data#batch) using the [Visualization Tool](/visualization-tool).
* Pull up the camera sensor `Shift + Q`, locate the object, press `Esc` to land in the point cloud in the same perspective as the camera sensor.


# Drawing Tools

Learn how to use the Drawing Tools supported by iMerit's Multisensor Annotation Tool:

1. [Cuboid](/annotation-tool/drawing-tools/cuboid)
2. [Polyline](/annotation-tool/drawing-tools/polyline-3d)
3. [Polygon 3D](/annotation-tool/drawing-tools/polygon-3d)
4. [Brush Sphere](/annotation-tool/drawing-tools/brush-sphere)
5. [Rectangle](/annotation-tool/drawing-tools/rectangle)
6. [Polyline 2D](/annotation-tool/drawing-tools/polyline-2d)
7. [Polygon 2D](/annotation-tool/drawing-tools/polygon-2d)


# Cuboid

A **Cuboid** is a three-dimensional annotation tool used in point cloud and image data labeling to enclose objects within a cube-like shape. By specifying the length, width, and height of the cuboid, annotators can create a box around an object, helping to define its spatial dimensions and orientation in 3D space.

***

## Use Case

Cuboid tool is particularly useful in tasks like object detection and classification in 3D environments, such as autonomous driving, where understanding the object's size, position, and distance relative to the camera or sensor is critical. It allows accurate annotations of objects like cars, pedestrians, and buildings in real-world environments, improving the quality of training data for 3D computer vision models.

{% hint style="info" %}
Cuboids can be created only in point cloud sensors.
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXf54vDOiy-l0Ru1fGSq29dzR0qt0Lhjk88wHeaN1EjVa_OGHT-7rKVPDDNFRLQBDLYebI7VxCCZ3lonWFknMda0g1mClyS_ugzEN6SBIijoK5nktvHJBE63MjbzrTut5Qb0nRvoqdUBuv0xrh11XMZBIq0G?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Create Cuboid

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list)
2. Select 'Cuboid' from the drawing tool list.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcrvnnXcCr5UMcHMpJxH1VTG6asRUaIuTgoOq_WtAHRDTwdMIbFhnyFY4OQpeTtCLcDrbyhHRQr9Z05OkjUmbA7L6V20fR0xyTcFJIta4kE3K4cKmtwOQPVRdOBGuVHzNswIczcK3dxkQMM1xDJtxeOKfrB?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
3. If the point cloud is in [2D Mode](/annotation-tool/tool-layout#id-2d-3d-mode), the interaction to draw a cuboid will take place from the top view representing it as a Rectangle. Click and drag the mouse on the point cloud to define it from the top and then make further adjustments using [focus mode](/annotation-tool/key-features/focus-mode) from the header.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdPLdCnqunjZ71Xm0m3DUlGRj6PLXk9JLAzzb62lEis49hQD_sJ5z8FPI94kIJfYDrHoWrSNazEOq5Vd9vtnbABq2JOKPlcoJBveA3z2xMg1Oz8SnmCB9VpVMdQ9_tzxS2o2ki-rKdrXGy1sV1Ye4l0iNk-?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
4. If the point cloud is in [3D Mode](/annotation-tool/tool-layout#id-2d-3d-mode), the interaction to draw a cuboid will take place by dropping a cuboid in the point cloud and then making adjustments using [focus mode](/annotation-tool/key-features/focus-mode) from the header.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcK_Xd7pPw9ltGpQFJPBI2r0VVTuFsFAHBjW7LJM1NLOUFGmXgF5Zv_QZKMHhtYr7SBgCHK8SeAA8i858fHFir3wxxQLTF8nwiZPJ1vfaWVrwT1FYbP1FrPNq-LGBfTqDpe2YnrgFNz8lhQROAIp3F7RjVF?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
5. The direction the object is facing is denoted by the yellow arrow. Set the direction using the [rotation ](/annotation-tool/tool-layout#rotation)icon from the header or press `shortcut R`
6. The projection of the cuboid is simultaneously reflected in the corresponding images of the [image panel](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel).
7. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
8. Set the cuboid dimension using quick [shortcuts](/annotation-tool/tool-shortcuts) to modify width, length and height.
9. The saved instance will appear on the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a box icon next to the Instance name.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd2dCu0KoCicB3CzEEtda6Ol66FtSBy_ogh25bD-yrfvFKzz22FE07GVSvF7NgyVLGwGVUPwLfIGqC_3yC_wA4hlerqyQPRn_nO735_51BLiknqrTyDedm-_b9-wrdnUSgmWeQ9ThHiKREE_w787xvSEBgm?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Modify Cuboid

The cuboid can be re-selected and modified by:

* Select a vertex that needs to be edited and drag it to modify its location.
* To change the yaw, pitch and roll, use CTRL (for Roll), SHIFT (for Yaw), ALT (for Pitch).
* Drag the red, blue and green circles to modify the edge of the cuboid
* Drag the red, blue and green lines to shift the entire cuboid in a certain direction.
* The blue square within the cuboid allows the user to move the cuboid within one plane&#x20;

Learn Cuboid Dimension Modification [Shortcuts](/annotation-tool/tool-shortcuts#drawing-tools-and-modification).

Learn How to[ Interpolate Cuboids](/annotation-tool/key-features/keyframe-interpolation)

***

## Duplicate Cuboid

Cuboids can be duplicated by selecting the annotation and pressing `Ctrl D.` This will duplicate the cuboid and allow the user to drop it at the desired location in the point cloud on `mouse-click`.

{% hint style="success" %}
Duplication of cuboid works intra-frame and does not copy the instance ID of the original Cuboid.&#x20;
{% endhint %}

***

## Copy Paste Cuboid

Cuboids can be copy and pasted to another frame where it does not exist (`Ctrl+C` / `Ctrl+V`). The [annotation detail input ](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input)prompts user for input on pasting annotation. By default, the pasted cuboid will share the same Instance ID as the one of the copied cuboid.&#x20;

{% hint style="success" %}
Copy and pasting of cuboid works inter-frame (across frames where the same instance ID doesn't exist).
{% endhint %}


# Polyline 3D

A **Polyline 3D** is a flexible annotation tool that allows users to draw a continuous line in 3D space with a starting point, an endpoint, and an unlimited number of joints or nodes in between. Each node marks a point in space where the line changes direction, enabling annotators to outline complex shapes or paths.

***

## Use Case

This tool is ideal for tracing irregular or elongated objects such as roads, pipelines, or boundaries, where precise line-based annotation is needed. The polyline's flexibility ensures that even intricate curves and angles can be accurately represented in the 3D point cloud.

{% hint style="info" %}
Polylines 3D can be created in point cloud.
{% endhint %}

***

## Create Polyline

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list)
2. Select 'Polyline' from the drawing tool list.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeGsKhyOg5Dc95PFWH7uYAYTPOdwo1o4SiSKE_awUqqdRpYBYlQ2q14Am_iJPXnY0fvCfL9xjYGb5PmhXQ4B7HQW3Vp-zVbSNQ00vyxVBWVknKa5H4fj0YKIOjeKnF09m-ErxlBslfPlmKH42eqE2sa8Cw?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
3. The cursor pointer shows a grey circle marker to it while hovering over the points.
4. Click to draw a polyline 3D on the desired object of interest. Move the mouse to the next desired location, and a line extending from the initial point will dynamically follow the cursor.&#x20;
   * The yellow arrow heads appearing are signifying the [direction of the polyline](/annotation-tool/key-features/polyline-direction).
5. The projection of the polyline is simultaneously reflected in the corresponding images of the [image panel](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel).
6. `Right-Click` to indicate the end of the polyline.
   * `Right-Click` will introduce another point
7. A status box appears, confirming the width (thickness) of the polyline. By default, it is set to 0 meters.
8. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
9. The saved instance will appear on the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a zig-zag line icon next to the Instance name.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfj-MXObYyQcKZJ-w75BiZpHwpdAJZ3LmyYVXsoeROwz1mCrQbey6eGxlKuAUlEOWejvLtGyI21ajzmcjqFhJRz9S_pHczSCiOYKA9FAaThTl_oOoxsGKYkcW4z2z2Sn-95Vem5Ytqwa83jjz8JjLgegTW3?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Modify Polyline 3D

The polyline 3D can be re-selected and modified by:

* Select a vertex that needs to be edited and drag it to modify its location.
* Add a vertex by hovering over the edge of the polygon and left-click when the ‘+’ symbol appears.
* Delete the vertex by dragging it into its immediate adjacent one OR press `CTRL + Right-click`

Learn how to use splitting, merging and extending polylines [here](/annotation-tool/key-features/split-merge-and-extend-3d-polylines).

***

## Duplicate Polyline 3D

Polyline 3D can be duplicated by selecting the annotation and pressing `Ctrl D.` This will duplicate the cuboid and allow the user to drop it at the desired location in the point cloud on `mouse-click`.

### Translate Polyline 3D&#x20;

&#x20;Reposition the entire 3D Polyline on any one axis or 3D plane

1. Labeller to select the polyline

#### Translate on Z-axis

2. Hold down the key Shift, a blue bar appears&#x20;
3. Click and drag the blue bar

#### Translate on Y-axis&#x20;

2. Hold the ALT, a green bar appears&#x20;
3. Click and drag the green bar

#### Translate on X- axis&#x20;

2. Hold down the CTRL, a red bar appears&#x20;
3. Click and drag the red bar

#### Translate in Any Direction

1. Select the 3D polyline
2. Press CTRL+M
3. The polyline snaps to the mouse, and on moving the mouse, the polyline too will move.

***

## Copy Paste Polyline

Polyline can be copy and pasted to another frame where it does not exist (`Ctrl+C` / `Ctrl+V`). The [annotation detail input ](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input)prompts user for input on pasting annotation. By default, the pasted Polyline will share the same Instance ID as the one of the copied Polyline 3D.

{% hint style="success" %}
Copy and pasting of Polyline 3D works inter-frame (across frames where the same instance ID doesn't exist).
{% endhint %}


# Polygon 3D

A **Polygon 3D** is an annotation tool that allows users to draw a closed shape in 3D space by connecting multiple points or vertices. These points (3 or more) are joined together to form a polygonal surface, typically used to annotate complex, irregularly shaped objects or surfaces within a point cloud.

***

## **Use Case**

This tool is particularly useful for capturing areas or surfaces that have more intricate shapes, such as the ground, rooftops, or building facades. By allowing the user to define a series of vertices, the polygon 3D can accurately outline non-uniform objects, providing a detailed and flexible way to annotate large, flat, or irregular surfaces in 3D.

{% hint style="info" %}
Polygon 3D can be created only in point cloud sensor(s).
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdUHxaenrYNe0r1rxRCoARLwuQ3zWsHwsOuvciiNoNmRfMTYl1LpI5ylzwETxVXaKL4OyAXUv_1HC7p1wbbVvvhpF9IjSx958w6quYGeElbTw7uUyUufN8zfmSIps32Z7Rtj09oGoXj6djM9mEnVN9roIL5?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Create Polygon

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list).
2. Select 'Polygon 3D' from the drawing tool list.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXe7y0fMYuE5A3S_qauIJJ5KFb9XGCzDVPt7y5x_Ytre5ZpAurX28iWWLpP4cu7tXUt3_QXUe5iskibmSHsP5vLcs8eYVt1LoGm_11vOk8cfKyWal5AqmPlWvPYmDUUuZk-ZGzc0jsnLzXK_Bun6D7akSAOE?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
3. The cursor pointer shows a grey circle marker to it while hovering over the points.
4. Make multiple clicks around the desired object of interest to define its boundary. Move the mouse to the next desired location, and a line extending from the initial point will dynamically follow the cursor. Each click adds a vertex to the polygon 3D, allowing for a more precise shape.&#x20;
5. All the points falling under the polygon will appear in the colour of the class. The polygon generated has infinite depth to it so it's recommended to use it in [2D Mode](/annotation-tool/tool-layout#id-2d-3d-mode) and [Isolate](/annotation-tool/key-features/isolate) Mode to avoid marking unnecessary points.
6. `Right-Click` to indicate the end and apply it.

   &#x20;

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdlkkFCtjfo9s3KKeJLZLW1MPsHAi_Myh6WfArd6eSY_mMAlxkOjTaaxpI5kCugbXyo3MUht4I_qhM_o5is3HVMIpFbfNTI5bN8J2hcffUkMAelVQ39W5Q5il_5WAe5rlYprXf8vi4CSjPEaLrzL71j3iA?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
7. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
8. The saved instance will appear on the [Class List](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a triangle icon next to the Instance name.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdM3avi2MmFQMfk8TJ9W_BFdBjZWlytbcNIEr8Rkv1FCLfrZzridv8t6bnbyJ_RwF5RNv1yqfSaUH-70o14qAnX07fE_QsvPdr7M1STwSTjEkJX281HnFkBLOtd626BOpie8lB82gfbJjz1ZjIL7mANNHyB?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Modify Polygon 3D

The polygon can be selected again and modified by:

* Selecting any of the vertexes and dragging it to modify its shape.
* Adding a vertex by hovering over the edge of the boundary and clicking the ‘+’ symbol that appears.
* Merging a vertex by clicking and dragging it into its adjacent one.

***

## Add/ Subtract from Polygon 3D

Segments can be added or subtracted from the created polygon.&#x20;

* When the polygon is selected, an expandable box with the option to 'Add/ Subtract' appears on the bottom right of the point cloud.
* Expand the list and the first item on the list is the main segment that is already drawn called the Primary Segment.

  <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfLiim38wsQDr3dx_HsevGZkulOv2bTrWWHpF1DEE_C-uXfOF4aLLgDLpRxuJkiEgBANrtXNfW-8XbAPcoWnvCCZRhJsb_RSKIWy4KbjufkAtFXF78FS26lhgMpVu5AEgd3AxmFIhW198ew8uGlFK-QXBA?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

### Adding Segment:&#x20;

To add more points to the Primary segment, click on the 'Add' button and draw another polygon on the points that need to be added. `Right-click` to confirm.

* Upon confirmation, the boundary of this polygon will turn green, indicating it as an addition to the primary segment.
* The segment is identified as `Segment n` (in sequential order) and is marked with a green clickable dot to represent its inclusion in the primary segment.
* Clicking the dot changes its state to 'Subtracted' (displayed in red), simultaneously updates the segment boundary color from green to red.

***

### Subtracting Segments:&#x20;

To subtract points from the Primary segment, click on the 'Subtract' button and draw another polygon on the points that need to be subtracted. `Right-click` to confirm

* Upon confirmation, the boundary of this polygon will appear red, signifying its designation as a subtracted segment from the primary segment.
* This segment is labeled as Segment n (in sequential order) and is marked with a red clickable dot to represent its exclusion from the primary segment.
* Clicking the dot changes its state to 'Added' (displayed in green), simultaneously updates the segment boundary color from red to green.

{% hint style="success" %}
Clicking the green/red dot switches the state from Added Segment to Subtracted Segmented or vice versa, depending on the starting state.
{% endhint %}

***

## Copy Paste Polygon 3D

Polygons can be copy and pasted to another frame where it does not exist (`Ctrl+C` / `Ctrl+V`). The [annotation detail input ](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input)prompts user for input on pasting annotation. By default, the pasted Polygon 3D will share the same Instance ID as the one of the copied Polygon 3D.&#x20;

{% hint style="success" %}
Copy and pasting of Polygon 3D works inter-frame (across frames where the same instance ID doesn't exist).&#x20;
{% endhint %}


# Brush Sphere

**Paintbrush 3D** is a tool used in 3D point cloud annotation that allows annotators to "paint" over specific areas of the 3D space.

***

## Use Case

* **Segmentation**: By painting over regions in the 3D point cloud, annotators can label areas of interest more intuitively.
* **Freeform Annotation**: It provides flexibility to annotate irregular shapes or areas that are hard to capture with rigid tools like cuboids or polylines.
* **Efficiency**: Allows for faster labeling of large or complex surfaces within a 3D environment.

The 3D paintbrush is particularly useful for annotating non-rectangular objects like vegetation, terrain, or other organic forms in 3D data.

***

## Create Segment

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list).

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line">  "*i"* icon appears on the [header](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-1.-header) to aid the user with the controls.
{% endhint %}

<figure><img src="/files/yeRwdQhoUEqQyD691om0" alt=""><figcaption></figcaption></figure>

2. Hover the mouse over the drawing area, and a gray circle will appear - this is the sphere tool which also has the same depth.
3. The points inside the paintbrush will tint to yellow color to provide a clear visual indication that the points will get segmented when the annotation begins
4. To increase/decrease the size of the sphere, hold down CTRL + rotate the mouse wheel
5. To begin annotating, hold the left mouse button and drag over the points, the points that were yellow, will get segmented to the class color immediately

<figure><img src="/files/awlSIlb78vQGfSlxRAAe" alt=""><figcaption></figcaption></figure>

6. Once all points belonging to the class are segmented, the user must right-click to save the annotation. [Annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-6.-annotation-detail) pop-up will appear.

***

## Delete A Segment

To un-segment points, click on any ‘+’ against a class, hold ALT and hover over points.  The points inside the paintbrush will tint to red to denote that these points will be un-segmented. Keeping the ALT key pressed, left click and drag the mouse.  To save, always do a right-click.

<figure><img src="/files/0k82oxFQ8VGKJi2jhOL7" alt=""><figcaption></figcaption></figure>


# Rectangle

A **Rectangle** or **2D Bounding Box (BBox)** is a rectangular annotation tool used to enclose and label objects within a 2D image. It is defined by the top-left and bottom-right corners, creating a box that contains the object of interest.

***

## Use Case

The rectangle tool is commonly used in image annotation for computer vision tasks like object detection, tracking, and classification. By drawing bounding boxes around objects in an image, annotators provide key data that helps train models to identify and locate objects within images, such as vehicles, pedestrians, or animals. It's a simple yet powerful tool for marking the presence and position of objects in 2D space.&#x20;

{% hint style="info" %}
Rectangle can be created only in camera sensors.&#x20;
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfftS5KlXRlkjnKvwfknnAAjzIMylwRLbqb4Bi6KFSCuOOBCpsyu7CGw0ZrihQj_eylpbYXtXUublkBtBgYvazZeh0UBoNWh45aahU0KsCLxRjHOHyuM3fdUEqx4vcUeG89RbjqyfsV2oTRecSXmkDGhhg?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Create Rectangle

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list).
2. Select Rectangle from the drawing tool list.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd7DH5pQ426eFV0SE2l9D6pW7kQujNcpDHqEJwqBR6TUTTkTd3rs2o-oXZ7mtordAyvTaEQuDqIvngCDKxL1U2nfN4_PN9pGGwPdmvOCjFR3ziQybG0GkNImTmFxvDmpbrnjiI_LkvsWa5cxCk6srBABa1F?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
3. The cursor pointer shows a red circle marker while hovering over the image.
4. Make the first two clicks to define one side of the rectangle. Users will be able to see the red box on moving the mouse. Click with the mouse at the appropriate place and confirm the annotation.

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdNRzTEdXEZNnRrBXJfhfvzjOAH7zVuN-1SATl340Ih6sJ10dkhLU6MRZRNDCf2Jaew5AClyiS0GtNm2QDfHcgMX2K43wn5kyQd0FWTiYaa6nE2HG0-WDXe-DacPzMNmrSUei5mY6WTIv6ujANt4QpWMrmD?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
5. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
6. The saved instance will appear on the c[lass list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a 2D icon (car\_54 #1) next to the instance name to denote it is made in the image sensor. It shares the same ID as the instance present in the point cloud of the same object (car\_54).

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfboShB52hTBzHIrQvBbNZxmIIRvvbMaAgHESvgDxS6_dNDUHC8iB_pP3bqhdw6mea6laFN6nK_wpC5aVjiLKNB1y3iDWsCEVdi5valkAKyXXdE1Nbcwi4jLg0gg5-f98UoKttVSXCT2MXNBnwwE8tSNyti?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Modify Rectangle

The rectangle can be re-selected and modified

* Select a vertex to modify two edges together and drag.
* Select an edge to modify one edge and drag.

Learn rectangle dimension modification and moving [shortcuts](/annotation-tool/tool-shortcuts#drawing-tools-and-modification).

***

## Key Point With Vertical Line

<figure><img src="/files/CcfFan50At3PTtAHLHJb" alt=""><figcaption></figcaption></figure>

The drawable rectangle supports a keypoint within the drawable. The subject matter expert will create a rectangle and automatically the keypoint will be available in the centre (provided it was setup during recipe creation - Learn how to enable [Key Point With Vertical Line](/project-setup/create-recipe/2.-classes#keypoint-with-vertical-line)). The SME can then update the keypoint position to the desired location within the rectangle.

***

## Copy Paste Rectangle

2D Polygons can be copy and pasted in another image sensor where it does not exist (`Ctrl+C` / `Ctrl+V`). The [annotation detail input ](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input)prompts user for input on pasting annotation. By default, the pasted rectangle will share the same instance ID as the one of the copied rectangle.&#x20;

{% hint style="success" %}
Copy/ Pasting of Rectangle works inter-frame (across frames where the same instance ID doesn't exist.
{% endhint %}


# Polyline 2D

A **Polyline 2D** is an annotation tool used to draw a series of connected straight lines (segments) on a 2D image. It consists of multiple points (or nodes) that define the shape, allowing annotators to mark irregular or elongated objects with more precision.

***

## Use Case

The polyline 2D tool is especially useful for annotating objects like road lanes, wires, edges of buildings, or boundaries that follow a path. By adjusting the points, annotators can capture the shape and position of linear or curvilinear objects within an image, providing valuable data for training computer vision models in tasks such as lane detection or object tracking.

{% hint style="info" %}
Polyline 2D can be created only in camera sensors.
{% endhint %}

<figure><img src="/files/ol2LqIz9Aq3mmy4OjNE9" alt=""><figcaption></figcaption></figure>

***

## Create Polyline 2D

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list)

2. Select Polyline 2D from the drawing tool list.

   <figure><img src="/files/wlIEWOR2Xp6xG443Y1sU" alt="" width="375"><figcaption></figcaption></figure>

3. The cursor pointer shows a yellow circle marker while hovering over the image.

4. Start the polyline segment by making the first click to place the initial point. Move the mouse to the next desired location, and a line extending from the initial point will dynamically follow the cursor.

5. User continues following the path by left clicking and creating vertices/points where needed.&#x20;

6. To end the annotation, ensure that the last vertex is created via right-click.
   * `Right-click` will introduce a point on the location.

<figure><img src="/files/bMGicSecnCwxK6GvYrhp" alt=""><figcaption></figcaption></figure>

7. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
8. The saved instance will appear on the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a 2D icon (RoadLanes\_15 #3) next to the instance name to denote it is made in the image sensor. It shares the same ID as the instance present in the point cloud of the same object (RoadLanes\_15).

<figure><img src="/files/VZSZjBSX24ncD3gqWuGc" alt="" width="344"><figcaption></figcaption></figure>

***

## Modify Polyline 2D

* Modify the polyline 2D by selecting the node and dragging it.
* Remove a vertex by dragging it to it's consecutive vertex.
* Add a vertex by hovering over one segment.  This segment turns yellow and a pink point appears helping the user visualize where the point will be created.

<figure><img src="/files/Sdt0cL8cgAwXxeItuQ6c" alt=""><figcaption></figcaption></figure>


# Polygon 2D

A **Polygon 2D** is an annotation tool used to draw a closed shape by connecting multiple points or vertices on a 2D plane, typically on an image. It allows users to outline irregular or complex objects with precision by placing a series of points around the object's boundary.

***

## Use Case

Polygon 2D tool is particularly useful in image annotation for tasks like object detection, and labeling, where objects may not have simple geometric shapes like rectangles. With a polygon 2D, annotators can create more accurate boundaries around objects such as people, vehicles, and other items in an image, improving the quality of data used for computer vision models.&#x20;

{% hint style="info" %}
Polygon 2D can be created only in camera sensors.
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXdyV9IujeWHdShyTvi1t0avLKEcmfRgCSDe8JYcj14coCI_puqx9WByIh9yb-T6Jsf72eW2kiF6f6sbdyyZZRvQ7G4WhY15YXephvnSr_yZNwzLPlb1a-XX3VlgYgGzhFX0e9-87iiUmX5PkGEjMkNdCSGE?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Create Polygon 2D

1. Click on the '+' icon of the class from the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list).

2. Select polygon 2D from the tool list.

   ![](https://lh7-us.googleusercontent.com/docsz/AD_4nXf4TZF0qAseY1GblQ_GKuE2qIlRBi6LMRlCzjVVdjTT9bEEYGoqa2OF3W-u3wijBiKY4F7vasy14m_pQvgz7apCXhaw4pljTRQ-0yXjqjSpDTsVkTFyIwlt23NOAo32T8Y3ngT5gMFaQxPk8MnQmlRs4XGs?key=lGhAQLv5xC3Ciuwf6zBTGQ)

3. The cursor pointer turns into a red circle marker while hovering over the image.

4. Click multiple times around the object of interest to define its boundary. Move the mouse to the next desired location, and a line extending from the initial point will dynamically follow the cursor.

5. Each click adds a vertex to the polygon, allowing for a more precise shape.&#x20;

6. `Right-Click` to end and apply it.&#x20;
   * `Right-Click` will introduce another vertex.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf4ysvx0OjaD_Lwtd-2gvE9KaWuH25dPZ5xa_CvZ8W1nBMyU3CSKI5_jfwS59mPXcwR1EoFFsN5JyYF-uI7gdUq6Yd1a3STpv-L9G9bF8ThosPfwDvWtJbEyrHBiHghAIEQNCn1pNe37BxhlBlihQtC3uM?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

6. Enter the [annotation details](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input).
7. The saved instance will appear on the [class list](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/t1P8d2reKe3nZWAkN2Kh#id-3.-class-list) with a 2D icon (car\_54 #1) next to the instance name to denote it is made in the image sensor. It shares the same ID as the instance present in the point cloud of the same object (car\_54)

   <figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfboShB52hTBzHIrQvBbNZxmIIRvvbMaAgHESvgDxS6_dNDUHC8iB_pP3bqhdw6mea6laFN6nK_wpC5aVjiLKNB1y3iDWsCEVdi5valkAKyXXdE1Nbcwi4jLg0gg5-f98UoKttVSXCT2MXNBnwwE8tSNyti?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Modify Polygon 2D

The polygon 2D can be re-selected and modified by:

* Select a vertex that needs to be edited and drag it to modify its location.
* Add a vertex by hovering over the edge of the polygon and left-click when the ‘+’ symbol appears.
* Delete the vertex by dragging it into its immediate adjacent one.

***

## Copy Paste Polygon 2D

Polygon 2D can be copy and pasted in another omage sensor where it does not exist (`Ctrl+C` / `Ctrl+V`). The [annotation detail input ](https://docs.imerit-prod.io/annotation-tool/drawing-tools/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input)prompts user for input on pasting annotation. By default, the pasted Polygon 2D will share the same Instance ID as the one of the copied Polygon 2D.&#x20;

{% hint style="success" %}
Copy and paste of Polygon 2D works inter-frame (across frames where the same instance ID doesn't exist).
{% endhint %}


# Key Features

1. [Progress Bar:](/annotation-tool/key-features/progress-bar)  displaying the data load status
2. [Keyframes](/annotation-tool/key-features/keyframe-interpolation): for Object Interpolation
3. [Raycaster and Frustum](/annotation-tool/key-features/raycaster-and-frustum): to identify objects in point cloud & locate them in Images
4. [Merged Point Cloud](/annotation-tool/key-features/merged-point-cloud): to annotate static objects
5. [Isolate](/annotation-tool/key-features/isolate): to Focus on specific point-cloud areas
6. [Outlier](/annotation-tool/key-features/outlier): To Locate points missed for annotation
7. [Ground and Ceiling Mover](/annotation-tool/key-features/ground-and-ceiling-mover): to control Visibility of points
8. [Project Points on Image](/annotation-tool/key-features/project-points-on-image): to view the point clouds on the image
9. [Task Level Attribute Propagation](/annotation-tool/key-features/task-level-attribute-propagation): task attribute propagation
10. [Relationship](/annotation-tool/key-features/relationship): to create a dynamic between two objects interlinked
11. [Intensity Filter and Picker](/annotation-tool/key-features/intensity-filter-and-picker): to manipulate the intensity values available in the point cloud data
12. [Image Settings Lock](/annotation-tool/key-features/image-settings-lock): to lock image settings across the sequence&#x20;
13. [Unify Dimension](/annotation-tool/key-features/unify-dimension): to ensure the cuboid size is uniform across the sequence when needed
14. [Auto-Grounding for Cuboids and Polylines](/annotation-tool/key-features/auto-grounding-for-cuboids-and-polylines): to ground the cuboids and polylines
15. [Jump To](/annotation-tool/key-features/jump-to): to redirect to a specific location on the point cloud
16. [Drawing Tools:](/annotation-tool/drawing-tools) for precise labelling
17. [Image Viewer:](/annotation-tool/key-features/image-viewer-iviewer) quick identification of the cuboid projection
18. [Interactive Validations:](/annotation-tool/key-features/interactive-validations) to quickly idenfity errors and improve the quality of the dataset
19. [Split, Merge and Extend 3D Polylines:](/annotation-tool/key-features/split-merge-and-extend-3d-polylines) to edit polyines efficiently
20. [Copy-paste Multiple Annotations:](/annotation-tool/key-features/multi-copy-paste-annotations-3d-polylines-cuboids-2d-bbox) to be able to selectively copy-paste annotations on subsequent frames
21. [Object Track:](/annotation-tool/key-features/object-track) Visualize and verify an object’s full trajectory across frames to ensure consistent, high-quality tracking.
22. [Cuboid Grouping: ](/annotation-tool/key-features/cuboid-grouping)Used when tracking objects that are physically connected or consistently aligned.
23. [Image Playback:](/annotation-tool/key-features/image-playback) User to quickly identify the entire scene via the camera sensors.
24. [3D Film Reel:](/annotation-tool/key-features/3d-film-reel) Accelerating cuboid review across the sequence
25. [2D Film Reel:](/annotation-tool/key-features/2d-film-reel) Accelerating rectangle review across the sequence
26. [MultiCam Grid View](/annotation-tool/key-features/multicam-grid-view)
27. [Sanity Checks](/annotation-tool/key-features/sanity-checks)
28. [Authoring Information](/annotation-tool/key-features/authoring-information)


# Progress Bar

The Progress Bar provides real-time updates on point cloud and annotation loading statuses, ensuring users are informed about the system's activities. It visually indicates the completion percentage for both point cloud rendering and annotation loading, offering clarity and transparency during the process.

With the help of visual cues users can track the loading status of point clouds and annotations for each frame:

* **Little Black Box**: Indicates that annotations for the selected frame are fully loaded.
* **Little Grey Box**: Signals that point cloud loading has started for the frame.
* **Big Grey Box**: Confirms the point cloud has been completely loaded for the frame.

<figure><img src="/files/7m9QDnENN7sfTKYs9yUQ" alt=""><figcaption></figcaption></figure>

## **Benefits**

* **Enhanced Visibility**: Users can monitor the exact status of point cloud and annotation loading.
* **Improved User Experience**: Reduces waiting time by informing users when the frame (point cloud and annotations) is available to be rendered.

***

## **Steps to Use the Progress Bar**

1. **Initiate Loading**:\
   Open the frame or sequence you want to annotate. The progress bar will automatically appear and start updating.
2. **Monitor Progress**:
   * **Little Black Box**: Appears when annotations for a frame are fully loaded.
   * **Little Grey Box**: Indicates that point cloud loading has started.
   * **Big Grey Box**: Confirms the point cloud loading is complete for the frame.
3. **Interpret Status**:
   * **Little Black Box**: Annotations are loaded, wait for the point clouds.
   * **Little Grey Box**: Wait for the point cloud to finish loading before proceeding.
   * **Big Grey Box**: The frame is fully loaded, and you can now navigate to continue working seamlessly.

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> Keep an eye on the boxes during your workflow to ensure frames are fully prepared before annotating, avoiding delays or incomplete data visibility.
{% endhint %}


# Keyframe Interpolation

Interpolation of an annotation is a process of labelling a moving object by tool estimating its position across frames between two defined [frames](/project-setup/pre-process-data#frame). These frames in which the user sets the position of the annotation are called Keyframes. A keyframe can also be created with the `Shortcut K.`

On creating a keyframe, the tool automatically calculates and repositions the annotations in the interim frames between defined keyframes.

The keyframes are visible on the timeline (blue line under the [frames](/project-setup/pre-process-data#frame)) for a given selected annotation indicating that the position was set by the annotators themselves in those frames.

For instance, in the example below, the object was in motion from Frame 1 to Frame 25 and moved out of the scene. `Frame 1, 5, 10, 15 & 25` are keyframes where the annotator manually set the annotation positions, while the intermediate frames have positions calculated by the tool.&#x20;

<figure><img src="/files/nxGciPq9I2KiliFa6goR" alt=""><figcaption></figcaption></figure>

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> To remove a keyframe or bring the annotation back to the tool calculated position, user can visit the frame and press K provided the annotation was selected in the prior frame.&#x20;
{% endhint %}

## Benefits

* **Efficiency:** Reduces the time and effort required to annotate frames individually by automatically propagating annotations across intermediate frames.
* **Consistency:** Ensures uniformity in annotations across sequential frames, minimizing discrepancies and improving accuracy.

***

## Steps to use Keyframe Interpolation

Keyframe Interpolation feature is only used for labelling object(s) in motion. Once a moving object has been identified, the process for Keyframe Interpolation can begin.

1. Identify the frame where the object is most clearly visible, in most cases it is the frame where the object is most closest to the ego vehicle.
2. Create the annotation for the object in the same frame. Modify its dimensions to annotate accurately and provide the attribute values.
3. The first time the annotation is created, inherently, becomes a Keyframe.
4. The annotation is propagated across all frames (forward and backward) on the same world coordinates (provided the ego pose data is available in the dataset).
5. Track the object by navigating in one direction, and after approximately 5-7 frames from the initial frame, reposition the annotation on the object accurately.
6. As soon as the cuboid is repositioned the current frame becomes a Keyframe.
7. The tool automatically adjusts the positions of all the annotations between the two Keyframes.&#x20;
8. This process should be repeated till the object is visible in the sequence.
9. Deleting the annotation in any frame will indicate the immediate next/ previous frames in which the Annotation is present as a Keyframe. Eg:

   * The object is available between `Frame 1-9` and is no longer visible on `Frame 10`. The annotation is created on `Frame 1`. Then, the annotation is deleted from `Frame 10` since it is no longer visible. Therefore, `Frame 9` becomes a Keyframe.

   <figure><img src="/files/cyS5CT6U6NpyZIFjUS16" alt=""><figcaption></figcaption></figure>

   * The object is available between `Frame 11-14` and leaves the scene. The annotation is created on `Frame 11`. Then, the annotation is deleted from`Frame 15` onwards since it's no longer visible. Therefore, `Frame 14` becomes a Keyframe.

   <figure><img src="/files/108Mucg52I3LO0Kpsdzo" alt=""><figcaption></figcaption></figure>

***

## Adding Keyframes <a href="#add-a-keyframe" id="add-a-keyframe"></a>

A [frame](/project-setup/pre-process-data#frame) turns into a Keyframes when the user does the following:

* Creates an annotation on any frame.
* Makes any position modification to an annotation manually.
* Deletes the annotation on a frame which makes the immediate next and/or previous frames the annotation occurs in a Keyframe.
* Uses the `Shortcut K` while an annotation is selected. This makes the frame a Keyframe without making any changes to the positioning of the annotation.&#x20;

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> This is useful when the object is both stationary and moving across the frames.&#x20;
{% endhint %}

For example, an object is stationary from `Frame 1-10` and starts moving on `Frame 11`:

* The user will first create the annotation on `Frame 1`&#x20;
* The annotation gets propagated across all frames in the same position.
* On `Frame 10`, the user will press `K Key` and mark it as a Keyframe
* On `Frame 11` where the object has started to move, the user will reposition the annotation accurately.&#x20;
  * Hence `Frame 11` will become a Keyframe.

Hence, to prevent the tool from interpolating the annotation beyond `Frame 1-11`, the user created a Keyframe on `Frame 10.`

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> User can add a Keyframe to prevent the tool from interpolating annotations beyond a certain frame.
{% endhint %}

<figure><img src="/files/AOyHyvj4LpvQKMuOYqP9" alt=""><figcaption></figcaption></figure>

***

## Removing a Keyframe <a href="#remove-a-keyframe" id="remove-a-keyframe"></a>

Keyframes can be removed by selecting an annotation on a keyframe and pressing the `Shortcut K`. This shortcut is a toggle for both adding and removing the Keyframe.

## Label Occluded Objects <a href="#label-occluded-objects" id="label-occluded-objects"></a>

Sometimes an object might be occluded in the interim frames. In such cases follow this:

1. Create the annotation on the object (`Frame 1`) .
2. Go to the frame where the object is visible (`Frame 8`) before it gets occluded (i.e.`Frame 9-11`).
3. `Press K` (`Frame 8` bcomes a Keyframe)
4. Go to the frame where the object reappears again (`Frame 12`).
5. Right-click on the selected annotation and select the option to `Delete` annotation between a frame range.
6. Select the frame range as `Frame 9 - 11` and apply action. The annotation will get deleted from this range without re-positioning it in frames that were not a keyframe.

   <figure><img src="/files/R6Wkm0Ha80WA4XVR09Ho" alt=""><figcaption></figcaption></figure>


# Raycaster and Frustum

To identify objects swiftly while in the labelling process, the annotation tool provides the following two features:

## Raycaster

Raycaster is the point projection of the cursor coordinates in the [point cloud](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-4.-point-cloud) over the images in the[ image panel ](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel)to help annotators identify the object swiftly. It appears as a 'red dot' over the camera images while hovering the cursor over the points in the point cloud.&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd4EPBCFL32xBFzei1wNXLWye9vQctxyOyZS3sBeLGJ1Mw328NaZ2194zfITcklySmtdqSclF3uxaN9ToKAv13Odxb-NSWNx_9K_G-qdYYkZ2V_4PH_1JTAezFco8tifTCf1mACeX8BRC50hgLIhdM-js2Q?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>

***

## Frustum

Similar to the [raycaster](#raycaster), frustum is a 'red cone' that appears on the [point cloud](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-4.-point-cloud) while hovering the cursor over the images in the[ image panel ](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel)to give the user an understanding of what direction the camera is facing.

<figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXeqC3lTkYuXy4WSNAWCS8sJuRBxLdIc-0wOkDUFZ4NcROphHC4jeUAbGbbUPxKiQTo4ZKWQLUeMTzq5rH7sXBtekRINoiK3NrIVmuCnihQosshL-6sgShTGudb8d9DEPcujZFP8eLwOopw6b9m0Uznfmfc?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>


# Merged Point Cloud

The Merged Point Cloud feature allows users to see all the points over time (across all the [frames](/project-setup/pre-process-data#data-terminology) of a [batch](/project-setup/pre-process-data#data-terminology)) aggregated in the same coordinate system of the current frame resulting in one big point cloud. Therefore, **ego motion** data is mandatory for this type of scene.

{% hint style="success" %} <img src="/files/iAfqrynDsFkwpijZxywW" alt="" data-size="line"> It is used on sequential tasks to annotate stationary objects in a single .&#x20;
{% endhint %}

By enabling the MPC, it's easy to detect and label all the stationary objects since they appear denser and brighter. While moving objects will leave a trail of points.

<figure><img src="/files/cBOUWg9YplDKCovKbLME" alt=""><figcaption></figcaption></figure>

## Benefits <a href="#toggle-the-merged-point-cloud-view" id="toggle-the-merged-point-cloud-view"></a>

* **Improve Efficiency:** By allowing all data points to be merged in a single frame, the user no longer has to traverse the sequence to find the ideal frame where the most points of the object are captured.
  * Static objects are also much clearly visible with the accumulated points
* **Improve Accuracy:** By integrating data from multiple frames, merged point clouds can enhance the accuracy of object annotation. Annotators can use the combined data to make more informed decisions about the precise location of objects within the point cloud.

## Steps to use MPC <a href="#toggle-the-merged-point-cloud-view" id="toggle-the-merged-point-cloud-view"></a>

1. Toggle the MPC switch on the header of the annotation tool. This will aggregate and merge points across all the [frames](/project-setup/pre-process-data#data-terminology) of the [batch](/project-setup/pre-process-data#data-terminology), by default on the next 20 frames.
   * The Multi Sensor Fusion tool supports various mechanisms of aggregating the point clouds across the sequence:
     * all&#x20;
     * [partial merged point cloud](#partial-merged-point-cloud)
     * using frame jump length
2. Identify the stationary object (that is dense and bright)
3. Select the [drawing tool](https://docs.imerit-prod.io/annotation-tool/key-features/pages/paJknzjTNlzvWVaCQ2EI#id-2.-drawing-tool) and create the annotation on the object
   * If the annotation is a [cuboid](/annotation-tool/drawing-tools/cuboid), it is propagated across all the frames.
   * If the object ceases to exist before the end of the frame, delete the annotation by right-clicking on it and selecting the delete option.

<figure><img src="/files/MtxJn5eqPJfbNHmL8EjN" alt=""><figcaption></figcaption></figure>

### Partial Merged Point Cloud

MPC has further options for merging points across a range of frames.

* The tool provides multiple options&#x20;
  * select a predefined option from the list
  * use the customizable start/end frame and hit enter

<figure><img src="/files/FHUh7fvjCV01Ds31AcJI" alt=""><figcaption></figcaption></figure>

* After triggering the merged point cloud, the timeline introduces a yellow to indicate the frames that are merged.

<figure><img src="/files/IsVqgPayRWlqBfNedX8g" alt=""><figcaption></figcaption></figure>


# Isolate

This feature is available when the user is labelling in the point cloud. It allows users to crop out an area of point cloud to eliminate noise.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> This feature is used to help focus on a specific area. The isolation is applied across the frames on the same area
{% endhint %}

<figure><img src="/files/7M7oOL2BTNsdF0czPPOy" alt=""><figcaption></figcaption></figure>

## Benefits

* **Enhanced Focus:** Allows annotators to concentrate on a specific area of interest, eliminating distractions from irrelevant regions.
* **Increased Annotation Accuracy:** Provides a clearer view of smaller, detailed areas, aiding precise annotation.
* **Improved Performance:** Reduces computational load and improves tool responsiveness by limiting the data being processed and displayed.

## Steps to use Isolate

1. Enable the 'Isolate' toggle from the [header](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-1.-header) of the [annotation tool](/annotation-tool).
2. On toggling it ON, the user can make multiple clicks on the point cloud to draw a boundary and right click to apply Isolation.&#x20;
   * Similarly, move to Annotate Image mode and [project points on the image](/annotation-tool/key-features/project-points-on-image). Select the 'Isolate' toggle, and cut out a portion of the point cloud with the help of the image.
3. All the points falling out of the defined boundary will be hidden from view. Users can now start labelling objects in the visible patch without background disturbance.&#x20;
   1. The user can navigate to the next frame and observe isolate is applied, therefore not have to lose context.
   2. The user can also merge the point clouds and understand the scene after removing the unnecessary points.


# Outlier

Outlier feature is used to highlight points in the point cloud that have not been classified.&#x20;

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Outlier is useful in identifying which points have not been classified.&#x20;
{% endhint %}

<figure><img src="/files/auqFRrB4fWTbZMj2eOld" alt=""><figcaption></figcaption></figure>

## Steps to use Outlier

1. Enable the 'Outlier' toggle from the [header](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-1.-header) of the annotation tool.
2. All the points in the point cloud that have not been classified will start to blink to draw attention to the areas of non-classified points.


# Ground and Ceiling Mover

The Ground and Ceiling Mover is a two way slider on the bottom right of the point cloud that allows users to hide points from ceiling to ground and vice-versa while labelling an object.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Ground and Ceiling sliders help filter out points which the user does not need to view.
{% endhint %}

<div align="center"><figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcPVR_jtYp63PVp-3TuqlUSYrrAT8SBXYV4NyaICgZTnMa4Zcbc1nfzsWCayh1DPfClAOj_LYc98bWzqwj-epEmPaOUkzUhPTi8DNxOewptg-Ns3XzHTVZoNWI4YuYnlaq_Ka2EG9Dwh5bASYhm01Y7bmk?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="563"><figcaption></figcaption></figure></div>

## Benefits

* **Enhanced Focus:** Allows annotators to concentrate on a specific area of interest, eliminating distractions from irrelevant regions.
* **Increased Annotation Accuracy:** Provides a clearer view of smaller, detailed areas, aiding precise annotation.

## Steps to use Ground and Ceiling Slider

1. On hiding unnecessary points, users can accurately mark the points belonging to the object. For example Car parked under a Tree can be marked easily from the top view by sliding the marker from the ceiling lower, to hide points belonging to the tree top.
2. Shortcut to change Levels:
   * Ground Level (increase/ decrease) : `G + Up/ Down Arrow`
   * Ceiling Level (increase/ decrease) : `C + Up/ Down Arrow`


# Project Points on Image

* Enlarge the image to fullscreen by `double-clicking` on it from the[ image panel](https://docs.imerit-prod.io/annotation-tool/key-features/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel) or `right-clicking` on the image choose the option 'Annotate Image'. This will automatically enlarge the screen.
* Users can press the `Shortcut P` to switch the points of the point clouds ON/ OFF over the image in fullscreen mode.

<figure><img src="/files/saZeXeO7GBda6FD6E76N" alt=""><figcaption></figcaption></figure>


# Task Level Attribute Propagation

## Time-Varying Task Level Attribute

1. The value of the attribute will propagate throughout the entire sequence by default.
2. Annotators can update the attribute's value at specific frames as needed, and this updated value will then automatically apply to all subsequent frames up to the end of the sequence.
3. This approach ensures that annotators only need to make adjustments on frames where the attribute value actually changes, significantly reducing the time spent on each frame.

## Manual Task Level Attribute

1. The attribute value must be set individually for each frame without any automatic propagation.
2. This is the current behavior, where annotators provide a value for every single frame manually.

Visualization:

1. Users can see attribute changes by expanding the timeline in the Task Attributes section.
2. Each attribute will have its own row, with a consistent color-coding scheme that allows users to quickly identify value changes across frames.
3. This color-coding will persist as the annotator navigates through the frames, providing a clear visual indication of attribute states throughout the sequence.

By introducing this propagation mechanism for Time-varying attributes, the annotation process will be significantly more efficient, allowing annotators to focus on making meaningful updates rather than repetitive tasks.<br>

## Steps to Use Time-Varying Task Level Attribute

1. For time-varying frame level attributes, always provide the attributes in chronological order.  This way, the attribute will always be propagated in the forward direction allowing the user to change as they move forward in the sequence.


# Relationship

Capturing relationships enables autonomous systems to navigate complex scenes (such as road environments) effectively, ensuring safety, efficiency, and a better user experience.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> User can create relationship across sensors, if needed.
{% endhint %}

***

## Benefits

* **Collision Avoidance and Safety:** Understanding which object is leading and which is following helps autonomous vehicles maintain safe following distances and prevent rear-end collisions.
* **Accurate Behavior Prediction:** Identifying leading and following objects enables the system to predict their behaviors, such as when the leading vehicle might slow down or stop, allowing the following vehicle to adjust accordingly.
  * Knowing which object is leading and following helps plan evasive actions during emergencies, such as sudden braking or unexpected obstacles.

***

## Steps to use Relationship

1. It is important to create the relations in the recipe to invoke this feature on the tool. In the recipe section, user will [create the relation](/project-setup/create-recipe/4.-associations#create-relations).
2. The tool is launched and the expert will create the two objects which are in a relationship. Upon creating the second object, the Relationship tab is enabled.

***

### Use Case 1 : One-way Relations

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Most (if not all) use cases fall under this category. Examples would be a cars atop a trailer, a rider sitting on a two wheeler, stroller being pushed by a pedestrian, trailer connected to the cabin of a truck etc.
{% endhint %}

#### A. Select the Subject to Create a Relation

Consider the following example&#x20;

**Relationship 1** Subject **->** Rider **;** Object **->** TwoWheeler

<figure><img src="/files/a5egkmY7evhvD3O1nTLf" alt=""><figcaption></figcaption></figure>

1. User is prompted to select a relation on the tool
2. Based on the relation, the selected annotation becomes the Subject (i.e. child) in the relationship and is displayed on the left side across the tool:
   * under the relationship tab
   * in the attribute list

<figure><img src="/files/UvMXgnrNDRAF3D4ywdX5" alt=""><figcaption></figcaption></figure>

3. As a visual cue, on the point cloud, the **subject** will always have the **small** **sphere** and the **object** will always have the **big** **sphere**.

<figure><img src="/files/MdvDSOLYGzTLG93tCCjc" alt=""><figcaption></figcaption></figure>

#### B. Select the Object to Create a Relation

In this use case, the above recipe was used,&#x20;

1. User is prompted to select a relation on the tool
2. Based on the relation, the selected annotation becomes the Object (i.e. parent) in the relationship and is displayed on the right side across the tool:
   * under the relationship tab
   * in the attribute list
3. As a visual cue, on the point cloud, the **subject** will always have the **small** **sphere** and the **object** will always have the **big** **sphere**.

***

### Use Case 2 : Class Has Multiple Relations

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line">  A common example would be various categories of vehicles can be towed by a tow-truck.
{% endhint %}

In this use case, the following recipe was used,&#x20;

**Relationship 1** Subject **->** Rider **;** Object **->** TwoWheeler

**Relationship 2** Subject **->** Rider **;** Object **->** Bicycle

<figure><img src="/files/7faOjFptxxyxkh739vQ5" alt=""><figcaption></figcaption></figure>

1. User is prompted to select a relation on the tool since the selected annotation can be in a relationship with 2 annotations. &#x20;

<figure><img src="/files/oErWmJStPwWFlWR6R71F" alt="" width="359"><figcaption></figcaption></figure>

2. In the above example, *Rider* (subject) can be in a relationship with either *TwoWheeler* or *Bicycle* (two objects). The tool prompt will appear with multiple relations.
3. However, in this example, had the user selected the object (either *TwoWheeler* or *Bicycle*), the user would not have had to choose,

<figure><img src="/files/qTtnmr7dyxYIrPddPx6j" alt="" width="355"><figcaption></figcaption></figure>

4. The relationship is displayed on the tool uniformly, where left is subject and right is object:
   * under the relationship tab
   * in the attribute list
5. As a visual cue, on the point cloud, the **subject** will always have the **small** **sphere** and the **object** will always have the **big** **sphere**.

***

### Use Case 3 : Cyclic Relations

#### A. A Class Category is both Subject and Object&#x20;

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> A common example is a pedestrian is holding hands with another pedestrian.
{% endhint %}

In this use case, the following recipe was used,&#x20;

**Relationship 1** Subject **->** PassengerCar **;** Object **->** PassengerCar

<figure><img src="/files/kdr8oDpPg5D0fTPcVPTy" alt=""><figcaption></figcaption></figure>

1. User is prompted to select a relation on the tool.  Since the subject and object are identical (i.e. *PassengerCar)*, the tool prompt for relation will appear with options,

<figure><img src="/files/9vUxmghKXhvA1Fgzw4m5" alt="" width="374"><figcaption></figcaption></figure>

2. The selected annotation can become the Subject (i.e. child) in the relationship or the Object (i.e. parent) depending on whether the relation (i.e. *isAttachedTo*) selected was from Outgoing or the Incoming.
   * Outgoing - Selected annotation becomes the object
   * Incoming - Selected annotation becomes the subject

<figure><img src="/files/MxIcIsP8tAEG8DottpFZ" alt="" width="374"><figcaption></figcaption></figure>

3. The relationship is displayed on the tool uniformly, where left is subject and right is object:
   * under the relationship tab
   * in the attribute list
4. As a visual cue, on the point cloud, the **subject** will always have the **small** **sphere** and the **object** will always have the **big** **sphere**.

#### B. A Class Category is an Object in one Relationship and Subject in Another

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> A common example is a bi-articulated bus, where the centre is both a subject and an object entity.
{% endhint %}

In this use case, the following recipe was used,&#x20;

**Relationship 1** Subject **->** Rider **;** Object **->** TwoWheeler

**Relationship 2** Subject **->** Rider **;** Object **->** Bicycle

<figure><img src="/files/Bj7JWofa3HBgv1Blq9aA" alt=""><figcaption></figcaption></figure>

1. User is prompted to select a relation on the tool.  Since the subject and object are identical (i.e. *PassengerCar)*, the tool prompt for relation will appear with options,

<figure><img src="/files/N1wYpVsP280kZ3l9qtrs" alt="" width="358"><figcaption></figcaption></figure>

2. The selected annotation can become the Subject (i.e. child) in the relationship or the Object (i.e. parent) depending on whether the relation (i.e. *isAttachedTo*) selected was from Outgoing or the Incoming.
   * Outgoing - Selected annotation becomes the object
   * Incoming - Selected annotation becomes the subject
3. The relationship is displayed on the tool uniformly, where left is subject and right is object:
   * under the relationship tab
   * in the attribute list
4. As a visual cue, on the point cloud, the **subject** will always have the **small** **sphere** and the **object** will always have the **big** **sphere**.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> The expert can select either the object or the subject and proceed to creating the relation in all Use Cases.
{% endhint %}


# Intensity Filter and Picker

The **intensity** feature in a LAS file represents the strength of the laser pulse return from a surface when captured by a LiDAR sensor. Think of it like how a flashlight reflects differently off various surfaces—bright surfaces reflect more light, while dark surfaces reflect less.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Typically stored as a **16-bit integer (0 to 65,535)**. Higher values mean stronger reflections.
{% endhint %}

<figure><img src="/files/U9NkXYUEnXidnTS9JdfE" alt=""><figcaption></figcaption></figure>

***

## Benefits

* **Material Classification:** Helps distinguish between different materials.
* **Road and Infrastructure Mapping**: Enhances visibility of lane markings.
* **Vegetation/Water Bodies Analysis:** Differentiates between tree types and water bodies.

***

## Steps to Use Intensity Filter

1. Open [Tool Settings->Point Colors](/annotation-tool/tool-layout#point-colours)
2. Select anyone of the most suitable intensity filters:
   * Intensity (B-G-Y-R)
   * Intensity (B-C-T-G-Li-Y-O-R)
   * Intensity (Rainbow)
   * Intensity Grayscale
3. Identify the area that has a reflective surface, however, the intensity is clearly low. Using the `Shortcut CTRL+Shift+left-click,` *pick* the intensity of the point cloud. This action is called the *Intensity Picker*.
4. A message informing the user of the intensity value picked appears.
5. At the same time, the *Intensity Controls Slider*, will set the minimum value to `(picked intensity - 1)` or `0`, whichever is higher. Similarly, the maximum value value is set to `(picked intensity - 1)` or `100,` whichever is less.
6. Using the slider, or the min and max input fields, further adjustments can be made.
7. On the point cloud, you will see the intensity colors are sharpened for all intensity values that lie within the range in the *Intensity Controls Slider*. The remaining are either blue and/or red.
   * When the intensity values are very low, this view can be straining on the eyes due to the color schema, and it is recommended to use the [Isolate](/annotation-tool/key-features/isolate) feature to reduce the color noise. The Isolate feature can also be applied prior to Step 3.


# Image Settings Lock

Image Settings Lock is a feature that ensures brightness, contrast, zoom, and pan settings remain consistent across all frames in a sequence. This eliminates the need for annotators to repeatedly adjust image settings for each frame, improving efficiency and maintaining uniform visibility.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Improves efficiency by eliminating repetitve actions.
{% endhint %}

<figure><img src="/files/QsRtq2lxm70wp25qOxoU" alt=""><figcaption></figcaption></figure>

For example, if an annotator increases brightness in a dimly lit scene to better identify objects, this setting will persist as they move through frames, preventing visual inconsistencies. Without this feature, frequent adjustments would lead to inefficiencies and possible annotation errors.

***

## Benefits of Image Settings Lock

* **Consistency Across Frames** – Ensures uniform brightness, contrast, zoom, and pan settings across all images in a sequence, reducing discrepancies.
* **Reduced Cognitive Load** – Eliminates the need for users to manually adjust settings for each frame, allowing them to focus on annotation accuracy.
* **Improved Efficiency** – Saves time by maintaining preferred settings, preventing repetitive adjustments.
* **Enhanced Visibility** – Helps in better object detection by retaining optimal viewing conditions across all frames.
* **Minimized Errors** – Ensures annotations are made under consistent visual conditions, reducing misinterpretation caused by varying image settings.

***

## Steps to Use Image Settings Lock

### Zoom and Pan Lock

1. Resize the thumbnail, to keep the images size optimal
2. Zoom and pan on the image sensor the object is identified on in the thumbnails

### Brightness and Contrast Lock

1. Move to the Annotate 2D mode
2. Using the brightness and contrast sliders, set the sliders to the most optimal value


# Unify Dimension

The **Unify Dimension** feature allows users to maintain consistency in object size across frames. When activated, it applies the cuboid size from the current frame to all frames where the object is visible.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Enhances efficiency by reducing the need for manual resizing in each frame and helps lock the dimensions.
{% endhint %}

<figure><img src="/files/UH80QLlqO3ZWPJaNzu8E" alt=""><figcaption></figcaption></figure>

***

## **Benefits**

* Reduces manual adjustments across multiple frames.
* Ensures accurate and consistent object representation.
* Speeds up the annotation workflow by minimizing repetitive edits.

***

## Steps to Use Unify Dimension

1. Identify an object as soon as it appears with a cuboid.
2. Proceed to next frame and readjust position, until the frame where the object is most visible (i.e., has the most points) is identified.
3. Adjust the annotation based on the points that define the true dimensions of the cuboid.
4. Apply the uniform cuboid feature, by clicking on the button to propagate the selected cuboid’s dimensions across all frames.

{% hint style="info" %}
In the red box below, the varying rectangle sizes help illustrate that the cuboid currently has the ability to have dynamic dimension.
{% endhint %}

<figure><img src="/files/4LfFtXq4itudVRn2jsnH" alt=""><figcaption></figcaption></figure>

5. The system automatically resizes the cuboid in other frames, ensuring uniformity. It then locks the dimension to discourage accidental changes.

### Use Case: The object changes dimension for a few frames

6. Identify the following two frames
   1. starting frame where this dimension change begins - `x`
   2. (optional) ending frame where this dimension goes back to original dimension - `y`
7. Navigate to `x - 1` frame, create a [keyframe](/annotation-tool/key-features/keyframe-interpolation#add-a-keyframe)
8. Navigate to `y + 1` frame, create a [keyframe](/annotation-tool/key-features/keyframe-interpolation#add-a-keyframe)
9. Click on the button to allow cuboid sizes to vary across frames&#x20;

{% hint style="info" %}
the red box below, the uniform rectangle sizes help illustrate that the cuboid currently has one dimension across sequence.
{% endhint %}

<figure><img src="/files/LJyMSJJUkrw03Gssk8vT" alt=""><figcaption></figcaption></figure>

10. Adjust the dimension of the cuboid between `x` and `y` .

{% hint style="success" %}
Find the frame where the cuboid is most visible (i.e., has the most points), then apply Unify Dimension for a faster, more consistent annotation process.
{% endhint %}


# Auto-Grounding for Cuboids and Polylines

Autogrounding is a feature that automatically aligns cuboids and polylines to the ground in a point cloud environment. This ensures that annotations are accurately positioned on the surface without requiring manual adjustments. By leveraging the sensor data, the tool detects the ground level and adjusts the objects accordingly, improving efficiency and consistency.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Auto-Grounding Mode offers configurable options to define which reference surface should be considered as the ground during annotation.
{% endhint %}

<figure><img src="/files/1tHa7BVjSAf0kCo2BDhJ" alt=""><figcaption></figcaption></figure>

***

## Benefits

* **Saves Time:** Reduces the need for manual positioning, allowing experts to focus on other critical tasks.
* **Increases Accuracy:** Ensures annotations are correctly aligned with the ground, minimizing errors in labeling.
* **Enhances Consistency:** Standardizes the annotation process across different frames and datasets.
* **Reduces Effort:** Automates a repetitive task, improving the overall workflow for annotation experts.

***

## Steps to use Autogrounding

1. Select either the Cuboid or 3D Polyline tool.
2. Enable autogrounding — a “+” icon will appear beside the 'Autoground' icon
3. Choose your preferred grounding source.
   1. Classified Ground Points:&#x20;
      * Tool’s internal algorithm (which is implemented as default)
      * ML Ground Segmentation
      * Customer provides Ground vs Non Ground segregation with the dataset
   2. Lowest height value
4. Your annotations will now auto-align to the selected ground reference for better accuracy and speed.
5. Verify the positioning of the annotation and make manual adjustments to refine the alignment.
6. Save the Changes


# Jump To

Navigate instantly to a specific location in the point cloud using the JumpTo feature. Enter the coordinates provided in validation messages to jump directly to cuboid errors or relevant areas.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Coordinate sharing ensures everyone lands on the exact same spot for consistent reviews.
{% endhint %}

<figure><img src="/files/JoR2C5jFVl57mgsKDiFB" alt=""><figcaption></figcaption></figure>

***

## Benefits

* Saves time searching for specific objects in areas.
* Ideal for QA workflows, supervisor review, or debugging in conjunction to the Validation Report.
* Makes collaboration easier—just share coordinate values to guide teammates to the same spot.

***

## Steps to Use Jump To

1. Press CTRL + J to open the coordinate input panel.
2. Enter the X, Y, and Z coordinates. Use the Tab key to move between fields.
3. Press Enter to jump to the location.

A green dot will mark the exact point in the point cloud.

### Using Jump To with Validation Reports

When a validation report is generated and includes warnings or errors tied to specific coordinates, users can now instantly navigate to those exact locations using the Jump To feature. This allows for quick review and resolution of issues identified during validation.


# Polyline Direction

To make lane annotation more intuitive and accurate, **directional arrows** now appear during polyline creation.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Helps ensure correct lane flow and orientation, especially for traffic-related annotations.
{% endhint %}

<figure><img src="/files/WhAxt1vcHxXGpbdVP7MQ" alt=""><figcaption></figcaption></figure>

***

## Benefits

* Reduces confusion about line direction.
* Improves annotation consistency for downstream models.
* Speeds up QA by making intent visually obvious.

***

## Steps to Use Polyline Direction

1. As polyline is drawn, **arrows will indicate the direction** of the line.
2. This helps ensure correct lane flow and orientation, especially for traffic-related annotations.

### Reverse Direction

After drawing the polyline, you can right-click to open the contextual menu and instantly reverse the direction. This change will be applied across the entire sequence.

### Hide Direction

Once the polyline is created, the same contextual menu lets you hide directional arrows to minimize visual clutter during annotation.

{% hint style="info" %}
Directional arrows are automatically hidden when the annotation is not selected.
{% endhint %}


# Preset Cuboid Dimensions

The **Preset Cuboid Dimension** allows teams to define a standard cuboid size per class—particularly useful for objects with known and consistent dimensions.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Helps reduce annotation time and improve consistency.
{% endhint %}

<figure><img src="/files/z5HvOYfMPyxmR7wu110v" alt=""><figcaption></figcaption></figure>

***

## Benefits:

* Speeds up annotation workflows.
* Reduces human error and inconsistency across frames.
* Especially useful for frequently repeated or similarly sized objects (e.g., traffic cones, signs).

***

## Steps to Use Preset Cuboid Dimensions

Preset cuboid dimensions must be pre-configured in the Recipe for each class, with the help of enabling the [Preset Cuboid Dimension](/project-setup/create-recipe/2.-classes#preset-cuboid-dimension).

1. Navigate to either **3D** or **BEV (Bird’s Eye View)** mode, depending on your preference.
2. From the Class List, choose the class for which you want to create a cuboid annotation.
3. When you begin annotating, the tool will automatically generate a cuboid using the **preset dimensions** associated with the selected class—no need to start from scratch.
4. Experts can still **manually resize** the cuboid if needed, but starting with a predefined size significantly **reduces repetitive effort** and improves consistency.

{% hint style="info" %}
Preset Cuboid Dimension toggled off in the recipe will have a standard dimension of a cube.
{% endhint %}


# Regions Of Interest

The tool supports various shapes for Regions of Interest (ROI) tools to help focus annotation efforts on the most relevant parts of the scene.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> These ROI tools help streamline the annotation process, reduce visual clutter, and enhance productivity by focusing only where it matters.
{% endhint %}

<figure><img src="/files/qShDlFn8wfYEvopRDcvY" alt=""><figcaption></figcaption></figure>

The ROI feature supports

* Rectangular ROI: Draw rectangular-shaped ROIs by defining the desired dimension.
* Cylinder ROI: Circular ROIs can also be created.
* Multiple ROIs: Create and manage multiple ROI shapes within a single frame.
* Visual Cue: Points inside the defined ROI appear brighter to improve visibility and focus.

***

## Use Cases

Customers often require annotations in specific areas, such as:

* The lane directly ahead of the ego vehicle – critical for path planning and obstacle detection.
* A designated area on the opposite side of the road – useful for monitoring incoming traffic or specific scenarios.
* A zone equidistant from the ego vehicle across all sides – helpful for uniform object detection analysis.
* Blind spots caused by the ego vehicle’s size or structure – important for safety-critical annotation tasks.

***

## Steps to Use Regions Of Interest

### Cylinder

1. Navigate to Tool Settings.
2. Scroll to the bottom and toggle Regions of Interest to ON.
3. Click the ‘+’ button next to Add Cylinder.
4. A default 10-meter radius cylinder will be added, which you can adjust as needed to suit your use case.

> **Tip:** Use the **‘+’ icon** to add more cylinders if multiple regions are required.

### Add Box

1. Navigate to Tool Settings.
2. Scroll to the bottom and toggle Regions of Interest to ON.
3. Click the ‘+’ button next to Add Box.
4. A default 10-meter radius cylinder will be added, which you can adjust as needed to suit your use case.

> **Tip:** Use the **‘+’ icon** to add more box if multiple regions are required.

{% hint style="info" %}
Users can create Regions of Interest using **both cylinder and cuboid shapes**, depending on the area and context of annotation.
{% endhint %}


# Relationship - Sensor Independent

**Relationship Sensor Independent** (or Frame-Level Relationship Creation) — now, relationships between objects only need to be defined once per frame, rather than separately for each sensor view. This streamlines multi-sensor annotation, ensuring consistency and saving valuable time.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> This feature is especially useful when working with multi-sensor setups like LiDAR + cameras AND all sensors of a frame, are **synced.**
{% endhint %}

<figure><img src="/files/QuwNqC31sayJjOEplFvM" alt=""><figcaption></figcaption></figure>

***

## Benefits

* Simplifies annotation in multi-sensor environments.
* Ensures **consistency**, saves time by **reducing redundant work**.
* Maintains a single source of truth for object interactions across views.

***

## Steps to Use Relationship Sensor Independent

To enable [Frame-Level relationship](/project-setup/create-recipe/1.-basic-details#relationship-sensor-dependent) creation, it must be pre-configured in the Recipe.

1. Track both objects within the same frame across all relevant sensor views (e.g., `cyclist_3` and `bike_2`).
2. In the [Annotation Detail panel](https://docs.imerit-prod.io/annotation-tool/key-features/pages/rZkaXOIF73IyAuNXrSbe#id-6.-annotation-detail-input), navigate to the Relationships tab and define the relationship between the two objects.
3. Save the relationship to apply it across the entire frame.
   * The option to apply this relationship across the sequence will be prompted.

{% hint style="info" %}
When a relationship is created between two objects (e.g., a cyclist and a bike), it is **automatically applied across all synced sensors** of the same frame, and by choice - across the sequence.
{% endhint %}


# Class List - All

The Class List panel provides a structured view of all classes defined in the recipe or ontology. It highlights active annotations available in the current frame while dimming those that exist elsewhere in the sequence. This visual distinction allows users to quickly assess which objects are currently visible. Clicking on a disabled class reveals when and where its annotations appear along the timeline, enabling efficient navigation and management of annotations across the sequence.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Key Definitions for Clarity

**Object**:\
An object refers to a real-world entity identified within the point cloud, such as a pedestrian, vehicle, or traffic sign. It serves as the conceptual target that annotations are linked to.

**Annotation**:\
An annotation is a specific labeled instance of how an object appears in a single frame. This could include different types (e.g., cuboids, 2D Bbox, 3D Polygons etc.) or multiple annotations over time or from different sensors.

**Distinct Annotation**:\
Each annotation is considered distinct if it has a separate label, ID, or geometry—even if it's associated with the same object. For example, a cuboid and four 2D Bbox for **Pedestrian\_2** are treated as five distinct annotations, even though they all describe the same object.

{% endhint %}

<figure><img src="/files/siVGqJTZ8XkeRw4PswIV" alt=""><figcaption></figcaption></figure>

***

## Class List Features and Functions

<figure><img src="/files/1B8RVJGSBCHYjcIWlCL4" alt=""><figcaption></figcaption></figure>

Refer to the numbered labels in the class list screenshot—each number matches the respective explanation in the list below.

1. **Number Inside the Circle (Class List)**\
   The number inside the circle, beside the Class List, indicates the total count of distinct annotations present in the current frame. For instance, if the circle shows the number **4**, it means there are five distinct annotations visible in that frame — such as *Pedestrian\_2 (cuboid)*, *Pedestrian\_2 #1*, *Vehicle\_20 #2*, *Vehicle\_20 #3.*
2. **Search Class**\
   Search Class feature enables users to filter the class list by instance ID/tracking ID or Class Name across the entire sequence.
3. [**Class Color**](/project-setup/create-recipe/2.-classes#color)\
   The color assigned to each class in the recipe is displayed here for easy identification. This color will be extended to the drawable used to create this class, the timeline to represent which frames the annotation is visible on.
4. **Number Inside the Circle (Class Name)**\
   The number inside the circle, beside the class name, indicates the total count of distinct annotations present in that frame within that class.
   * For instance, if the circle shows the number **5** for the class Pedestrian\_2, it means there are five distinct annotations of that class visible in the frame—such as Pedestrian\_2 (cuboid), Pedestrian\_2 #1, Pedestrian\_2 #2, Pedestrian\_2 #3, and Pedestrian\_2 #4.
5. [**Name of the Class**](/project-setup/create-recipe/2.-classes#name)\
   Setup in the recipe
6. **Object Clipping (at Class Level)**\
   This action hides all labelled points while keeping the object's boundary visible. It allows you to verify if any points were missed or incorrectly labelled. This is applied to all instances within a selected class.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXd5HPz7INQ412r2UsNfE4G5BlaUXvDRuRKa5GPFfES9CJxdfU4FBZIDl6YFk9JELLVUkeK-KK06wE3ysqyrge9Xfzd8c_llbb63EYDrvrd3BYV1zLMTFwXmo_sFl0wThkBnWcPG04geDY4NKruk8eikOX0?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt=""><figcaption></figcaption></figure>
7. **Lock/Unlock (at Class Level)**\
   This action helps in controlling accidental movements of annotations by locking the displacements and dimension modification of the Annotation.
8. **Show/Hide (at Class level)**\
   This option hides both the labelled points within the cuboid and the cuboid boundary itself for all instances of the selected class.
9. **Add Annotation**\
   To create a new instance under a class, click the ‘+’ icon that appears on the class row. Then, select the desired drawing tool and complete the annotation. Once created, the new annotation will appear listed under the selected class.
10. **Number Inside the Box**\
    When an object has multiple annotations across the sequence, they are grouped under a single label. The number displayed inside the box represents how many of those annotations are present in the current frame.
    * A value from **0 to n** indicates the count of visible annotations for that object in the current frame.
      * A value of **0** means none of the object’s annotations are visible in the current frame.
    * **If no box is shown**, it means the object has only a single annotation throughout the sequence and is displayed directly, without grouping.
11. **Instance ID**\
    The instance name is formed by appending a unique instance ID (or tracking ID) to the class name within the current sequence. For example, an instance of the class Pedestrian may appear as Pedestrian\_4.
    * Classes that do not have [instances](https://docs.imerit-prod.io/annotation-tool/key-features/pages/paJknzjTNlzvWVaCQ2EI#id-3.-has-instances), will only have 1 occurrence. Hence the + icon will be disabled after it's marked the first time. Users can add to this annotation.

      <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXfuLrwlZo7Fh5guoLtXk4e8AyMUxCu1giBCt5TAd-53Mr7o7BenhVUoTM59qicLn-H9QDHEL5y_PSawTq_geREKHPe9kyfzgVGwy87RbLyJD_AhRjMsi2xPg03KwOvPMy1xB6l4MhXHXcsgx7lsRI7ZV98I?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="375"><figcaption></figcaption></figure>
12. **Type of Annotation**\
    The tool uses visual cues to help users easily identify the type of annotation applied:

    * Cuboid – represented by a square icon
    * 3D Polygon – represented by a triangle icon
    * 3D Polyline – represented by a line segment icon
    * 2D Polygon, 2D Polyline, 2D Bbox – represented by a 2D-specific icon

    These icons provide quick visual differentiation between annotation types within the interface.
13. **Jump to Object**\
    This icon allows users to quickly navigate to a specific annotation from anywhere within the point cloud view. It centers the view on the selected object for easy inspection or editing.
14. **Object Clipping (at Annotation Level)**\
    This action hides all the labelled points while retaining the object's boundary. It helps in verifying whether any points were missed during labelling or if any points were labelled incorrectly. This function is applied to individual instances of a specific class.
15. **Show/Hide (at Annotation Level)**\
    This option hides both the labelled points within the cuboid and the cuboid boundary itself for the selected instance of the selected class.
16. **Delete Annotation**\
    Once an annotation is created, it is projected onto the relevant sensors within a frame and propagated across multiple frames. As a result, annotations can be deleted at various levels based on the required scope:
    * Current [frame](/project-setup/pre-process-data#data-terminology)
      * Deletes the annotation only in the current frame and selected sensor.
      * Deletes the annotation from the selected frame across all sensors.
    * Across Seqeunce/[batch](/project-setup/pre-process-data#data-terminology)

      * Deletes the annotation from the specific sensor view it was selected in.
      * Deletes the annotation across all frames in the sequence or batch.

      <figure><img src="/files/5di0nQvA1WCbBqX5TI43" alt=""><figcaption></figcaption></figure>
17. **Camera Sensor Indicator (#n)**\
    The tool uses the ‘#n’ notation to indicate which camera sensor a 2D annotation belongs to. This same #n identifier is displayed alongside each camera sensor, helping users quickly associate annotations with their respective sensors.
18. A grayed-out or disabled row in the class list indicates that the annotation is not present in the current frame. Selecting such an annotation updates the timeline to show the frames where the annotation is available.


# Image Viewer (IViewer)

The Image Viewer is a feature that displays camera sensor images, each showing the projection of a selected [cuboid](/annotation-tool/drawing-tools/cuboid). It helps users analyze how an object appears across multiple camera angles, using calibration data to align point cloud annotations with images.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Image Viewer helps users analyze how an object appears across multiple camera angles.
{% endhint %}

<figure><img src="/files/WlUR7Ez0ZUcj6NHLPfRf" alt=""><figcaption></figcaption></figure>

***

## Use Cases

* Multi-camera review: See how an object is captured by different cameras at the same frame.
* Annotation verification: Check the accuracy of cuboid placement across views.
* Tracking moving objects: Follow an object entering one view and exiting another within the same frame.
* Sensor layout: Identify the most helpful camera view based on clarity or proximity.

<figure><img src="/files/MvtYQYOfkfxUSzavwDf6" alt="" width="563"><figcaption></figcaption></figure>

***

## Benefits

* Provides a complete visual context of the object from various angles.
  * Supports easier tracking of moving objects across views.
* Allows custom arrangement of camera feeds by:
  * Best view
  * Closest to the ego vehicle
  * Locking preference places key views at the front for quicker access.
* Enhances accuracy by relying on point cloud-to-image calibration.

***

## Steps to Use

1. Enable the IViewer from the top left of the menu&#x20;

   <figure><img src="/files/bO7c4Pe1tK2RKvNgU6Th" alt=""><figcaption></figcaption></figure>
2. Adjust the IViewer to a location on the tool that is most convenient and adjust the dimension to the size that helps identify objects.&#x20;

   <figure><img src="/files/6BFpXdRFNT6xRLeJqjbq" alt=""><figcaption></figcaption></figure>
3. Select a cuboid in the 3D point cloud.
4. The IViewer displays all camera images where the cuboid is projected.
5. Rearrange sensors to prioritize views by quality or distance.
   1. Lock important sensors so they always appear first.
6. Observe how the object appears in each camera to validate, adjust, or track annotations effectively.

{% hint style="info" %}
The Image Viewer displays the projection of the selected cuboid based on the calibration data provided in the dataset — *not the camera sensors the respective rectangles are created on*. It automatically shows the cuboid on all camera views where it is projected using the available calibration.
{% endhint %}

***

## Image Viewer -  Demo&#x20;

{% file src="/files/FKyR9ofZnClorrnMJa34" %}


# Interactive Validations

The **Interactive Validation** performs real-time sanity checks on annotations before the data moves to the next stage in the taskflow. It uses pre-defined validations set during the Taskflow setup and highlights potential issues. The tool allows users to view, validate, and fix problems interactively without leaving the annotation workspace.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line">  Validation enhances the workflow by ensuring consistent and high-quality results across various business requirements.
{% endhint %}

<figure><img src="/files/opbPEaWRXf4ieSxlDM8x" alt=""><figcaption></figcaption></figure>

***

## Use Cases

* Quality Assurance : Automatically catch incomplete or incorrect annotations
* Progression Control : Block data from progressing to the next stage (e.g., internal review, customer auditing) if it fails basic validation.
* Consistency Check : Ensures consistency in object properties across frames and sequences.
* Customer Business Rule : Enforce project-specific rules without manual checks.
* Real Time Feedback : Show validation errors as annotators work, enabling faster correction.

***

## Benefits

* Prevents invalid or incomplete annotations from progressing
* Saves time by linking validation errors directly to their locations
* Customizable per workflow to match specific project needs
* Non-disruptive: user can keep the report open while annotating

***

## Steps to Use Interactive Validation Reports

1. Annotate the object and extend it until its last visible frame.
2. Click the shield icon to trigger validation.
3. The Interactive Validation Report opens on the right panel.
4. Review the list of issues — each card links to the exact location in the sequence.
5. Fix issues as you go, with the report panel open for reference.

***

## Interactive Validation Report - Demo

Coming Soon...


# Split, Merge and Extend 3D Polylines

The Split, Merge and Extend Polyline feature gives users fine-grained control over editing polylines—making it easy to break a line into segments, join two polylines together, or extending an existing line. This leads to **more accurate annotations**, **faster editing**, and **leaner workflows** by reducing the need for redraws and manual corrections. It’s especially valuable when working with long or branching path structures that evolve frame by frame.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Split, Merge, and Extend Polylines is an all-round feature that enables high-quality annotations, delivered quickly - ensuring the process is efficient.
{% endhint %}

<figure><img src="/files/PmNG32fBmuwqTqXrSZS2" alt=""><figcaption></figcaption></figure>

***

## Use Cases

* **Road or path segmentation** in autonomous driving datasets where line breaks indicate intersections or stop zones.
* **Crop row or field boundary adjustments** in agri-tech, especially when shapes change across time or due to occlusions.
* **Splitting or connecting wiring paths** in industrial inspection or utility mapping annotations.

***

## Benefits

* **Good**: Increases annotation precision by letting users restructure lines without redrawing from scratch.
* **Fast**: Saves time in editing by using quick gestures to split, merge, or extend existing work.
* **Cheap/Lean**: Minimizes the need for repetitive actions and simplifies quality control by maintaining continuity of attributes during edits.

***

## Steps to Use Split, Merge and Extend Polylines

### **Split Polyline**

1. Select the polyline to split.
2. Hold **Shift** and hover over an edge.
3. A red blade icon appears when the tool is ready to split.
4. **Right-click** on the edge.
5. A confirmation prompt appears.
6. On confirming, you're prompted to enter **class, instance, and attribute** values for the new lines.
   * The tool retains selection on the split polyline for quick attribute entry.

### Merge Polylines

1. Hover over the first or last vertex of a polyline.
2. Hold **Alt**—the edge visually latches to your cursor.
3. Release **Alt**; the latching remains active.
4. Hover over the vertex of the second polyline (start or end).
5. Press **Alt** again.
6. An **'M'** icon appears, indicating the merge option.
7. **Left-click** to confirm merge.
8. A confirmation prompt appears.
9. Polylines are merged.
   * The resulting polyline inherits the **class, instance ID, and attributes** of the first line.

### Extend Polyline

* Hover over the first or last vertex of a polyline.
* Hold **Alt**—the polyline end latches to your cursor.
* Let go of **Alt**; extension mode remains active.
* Left-click to place new vertices and continue drawing.

> Tip: This feature works seamlessly with **free and snapped vertex modes**, allowing for precise control while extending.

### Remove the Extended Line Incrementally

<figure><img src="/files/rkxkAGQ13MMBdCJQvLXq" alt=""><figcaption></figcaption></figure>

To undo the last segment added while extending a polyline (before saving):

**Press Ctrl + Z**&#x20;

This will remove the most recently added vertex or line segment during extension, allowing fine-tuned corrections before committing your changes.

> Note: This only works before saving or finalizing the extended polyline.

### Remove the Extended Line Entirely

<figure><img src="/files/JGOxv8aBF8uqr9VFT9vU" alt=""><figcaption></figcaption></figure>

To discard the entire extension made to a polyline before saving:

**Press Esc**

This will cancel the full extension operation, removing all newly added vertices and reverting the polyline to its original state.

> Note: Must be done before saving or submitting changes.


# Multi Copy-Paste Annotations - 3D Polylines, Cuboids, 2D Bbox

The Multi Copy-Paste feature enables users to copy and paste multiple annotations—across annotation types such as 3D polylines, cuboids, and 2D bounding boxes—from one frame to another. This gives users full control over what gets carried forward and where it's placed, unlike auto-propagation. It helps preserve annotation consistency while allowing frame-specific adjustments. This feature is **good**, **fast**, and **lean**—delivering high-quality results quickly, with minimal manual effort.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line">  Select different annotations to copy-paste to different sensors or different frames.
{% endhint %}

<figure><img src="/files/840rprgOPfn7QzUXgqqi" alt=""><figcaption></figcaption></figure>

***

## Use Cases

* **Autonomous Driving – Lane or Infrastructure Annotations**\
  Use multi copy-paste to carry forward polylines like lane boundaries, road dividers, and vehicles together across sequential frames where scene structure remains consistent or has a slight variation.
* **2D Camera – Highway Vehicle Tracking**\
  On highways, vehicles often move in formation—slightly ahead, behind, or beside each other across multiple frames. Multi copy-paste enables consistent annotation of these vehicles while still allowing you to fine-tune individual boxes as needed, frame by frame.
* **2D Camera – Parking Lot Scenarios**\
  In parking lots, the same set of parked vehicles often appears first in one camera and then in another as the vehicle moves. This feature helps replicate those annotations quickly and adjust them when necessary, improving accuracy across camera transitions.

***

## Benefits

* **Good**: Ensures consistent annotation structure and alignment across frames without needing redraw.
* **Fast**: Saves time by enabling bulk duplication and precise placement in a few quick actions.
* **Lean**: Minimizes manual effort and avoids the need for frame-by-frame redraw or overly rigid auto-propagation logic.

***

## Steps to Use Multi Copy-Paste Annotations

1. **Create the annotation(s)** on the current frame.
2. Hold **Ctrl** and **select multiple annotations**.
3. Press **Ctrl + C** to copy.
4. Navigate to the next frame.
5. Press **Ctrl + Shift + V** to activate *special paste*.
   * If any copied annotation(s) already exist on the frame, the tool will notify the user.
6. All eligible annotations appear with the cursor on hover.
7. **Left-click** to place them on the frame.

> **Tip:**  You can adjust placement after dropping and edit attributes individually if needed.


# Object Track

Object Track allows users to visualize the entire track of a selected cuboid across a sequence. When enabled, it displays all instances of that cuboid—before and after the current frame—providing a full view of the object’s trajectory. This feature is particularly useful for reviewing **dynamic objects** and catching inconsistencies in their annotations, such as misalignment, missed frames, or sudden shifts. Object Track is a **good** and **fast** review tool that enhances annotation quality while minimizing the time spent scrubbing through frames.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line">  Visualize and verify an object’s full trajectory across frames to ensure consistent, high-quality tracking.
{% endhint %}

<figure><img src="/files/B2uhyYSdcgKHdDIBis6m" alt=""><figcaption></figcaption></figure>

***

## Use Cases

* **Autonomous Driving – Moving Vehicles and Pedestrians**\
  Visually confirm consistent tracking of dynamic objects like cars or pedestrians over time to ensure high-quality training data.
* **Robotics – Tracking People or Equipment Indoors**\
  Use Object Track to validate that moving people or tools in indoor robotics datasets are annotated consistently across frames.
* **Agri-Tech – Monitoring Moving Machinery or Livestock**\
  Confirm that tractors, drones, or animals are correctly tracked over time in long sequences with intermittent motion or occlusions.

***

## Benefits

* **Good**: Increases annotation quality by making it easy to spot tracking gaps, misaligned cuboids, or frame skips.
* **Fast**: Saves time during review by surfacing the full track in one view—eliminating the need to click through each frame.
* **Lean**: Lightweight toggle-based feature that fits seamlessly into existing workflows with no added complexity.

***

## Steps to Use Object Track

1. Select a Cuboid on the current frame.
2. Toggle on 'Object Track' by pressing 'T'.
3. The tool will display all cuboid instances from the full sequence associated with the selected object.
   * If this object is acting as stationary, then all cuboids will appear at the same location
   * If this object is dynamic, then all cuboids will appear in the track.
4. Use this visual context to verify alignment, consistency, and presence across frames.
5. Make corrections as needed based on visible anomalies.

> **Tip:** Enable Object Track after completing tracking. Any edits made while this feature is active will automatically update the full track, thanks to keyframe interpolation


# Cuboid Grouping

Cuboid Grouping allows users to link multiple cuboids that move together in the real world—maintaining their relative positions throughout a sequence. This is particularly useful when tracking objects that are physically connected or consistently aligned. The grouping helps improve annotation accuracy, ensures spatial consistency, and reduces the need for manual frame-by-frame adjustments. It’s a good and lean feature, enhancing both annotation quality and workflow efficiency without adding complexity.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Useful when tracking objects that are physically connected or consistently aligned.
{% endhint %}

<figure><img src="/files/X9eOGzZda8Lczj5MOZXQ" alt=""><figcaption></figcaption></figure>

***

## Use Case

* **Agri-Tech – Tractor with a Towed Implement**\
  Grouping ensures the implement maintains a fixed offset behind the tractor across the sequence, saving time and reducing annotation drift.
* **Autonomous Driving – Cabin and a Trailer**\
  Helps track multi-part vehicles moving together while preserving their orientation and spacing.

***

## Benefits

* **Good**: Maintains consistent spatial relationships between grouped cuboids, improving annotation accuracy across frames.
* **Lean**: Reduces manual alignment work, especially in sequences where linked objects appear across long spans.
* **Flexible**: Grouping can be applied and ungrouped selectively over any frame range, offering precise control.

***

## Steps to Use Cuboid Grouping

1. Multi-select cuboids to be grouped by holding down the Ctrl key.
2. Hover over the cuboid that should lead the group, then right-click (contextual click).
3. Choose ‘Group’ from the context menu.
   * The grouping feature will confirm the range and prevent the user from providing a range where both annotations are not present.
4. Click on an individual cuboid within the group to view the orthogonal view.
   * These orthogonal views are read-only as long as the cuboid is grouped.&#x20;

     <figure><img src="/files/fOzAPjeG2mPirE4qgo5d" alt="" width="563"><figcaption></figcaption></figure>
5. To ungroup:
   * Navigate to the frame where the grouping should end.
   * Right-click the lead cuboid and select ‘Ungroup’.
   * The ungroup will confirm the range the ungrouping action should be applied to.

> **Tip:** Use grouping to avoid drift and rework when dealing with attached or coordinated objects that stay aligned throughout a sequence.


# Image Playback

Image Playback allows users to view image sequences as a smooth, video-like stream, giving a clear sense of motion and scene continuity. This is particularly helpful during annotation review—users can spot inconsistencies, missed frames, or temporal drift in objects by watching the entire sequence unfold visually. This feature is both good and fast, significantly improving annotation validation without adding extra steps or overhead.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> This is particularly helpful during annotation review—users can spot inconsistencies, missed frames, or temporal drift.
{% endhint %}

<figure><img src="/files/RHAzeGZ7habmpjMvSrZp" alt=""><figcaption></figcaption></figure>

***

## Use Case

* **Autonomous Driving – Scene Context & Object Motion**\
  Helps reviewers understand object behavior over time—like lane changes or pedestrian motion—by watching the sequence play out.
* **Industrial Inspections – Detecting Temporal Drift**\
  Review sequences for shifts or drifts in bounding boxes or segmentation that may not be obvious frame-by-frame.
* **Agri-Tech – Monitoring Machinery or Movement Across Fields**\
  Identify how well stationary or moving objects (e.g., tractors, drones) are captured and tracked over time.

***

## Benefits

* **Good**: Enhances annotation quality by providing temporal context in a single, fluid view.
* **Fast**: Speeds up review and validation by replacing frame-by-frame scrubbing with real-time playback.

***

## Steps to Use Image Playback

1. When the batch loads, a cloud icon appears, above the reference image panel, indicating that images are being prepared in the background.
2. Hover over the icon to view loading progress.
3. Once the progress reaches 100%, the icon disappears and playback is fully enabled.
4. Switch to Annotate Image mode to begin playback.
5. Click Play on the sensor timeline to view the full sequence as a continuous animation.

> Tip: You don't have to wait for full loading. Playback begins once **x%** of the sequence is ready—though only a limited portion (x%) of the sequence will play until more is available.


# 3D Film Reel

Film Reel is a multi-frame editing interface designed to help annotators view and refine a cuboid across the entire sequence—frame by frame. Film Reel enables targeted, manual control over annotations without the need to scroll through every frame linearly. This tool is especially useful for tracking, correcting, or validating object behavior over time. It is both fast and good—accelerating annotation while increasing precision and reducing visual clutter.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> This tool is especially useful for tracking, correcting, or validating object behavior over time.&#x20;
{% endhint %}

<figure><img src="/files/q67JMrcZ1Q3GroJx54W9" alt=""><figcaption></figcaption></figure>

***

## Use Case

* **Adjusting object position, rotation, or size** across multiple frames for moving vehicles, machinery, or people.
* **Manually correcting misaligned cuboids** that were interpolated or auto-propagated across a sequence.
* **Quickly deleting frame-specific cuboids** during review without leaving the multi-frame context.

***

## Benefits

* **Fast**: Speeds up multi-frame review and editing by consolidating cuboid views in a single timeline interface.
* **Good**: Encourages accurate frame-level edits and reduces errors in object tracking or motion representation.
* **Lean**: Minimizes context switching between views or frames, improving efficiency with minimal overhead.

***

## Steps to Use Film Reel

1. Select a cuboid on the current frame.
2. Click on the Film Reel icon to open the grid-view mode.
3. A panel appears showing the cuboid's state across all frames where it exists.
4. Click a frame cell to activate editing mode:
   * A blue border appears.
5. You can now edit position, dimensions, or angle.
   * A keyframe is created, the cell's badge turns blue, and a blue line appears under the frame in the timeline.
6. Press Esc to exit edit mode; the blue border disappears.
7. You can scroll across frames within the Film Reel to review all appearances.
8. Use the trash icon to quickly delete a cuboid from a specific frame.

***

## 3D Film Reel - Demo

{% file src="/files/oVXQBgUCp6ygDpqsGiMY" %}


# 2D Film Reel

Film 2D enables annotators and reviewers to closely inspect object annotations captured across camera sensors. After an object is labeled and tracked in a camera view, reviewers can select that annotation and trigger a 2D film reel. This displays the annotation in a grid view across frames, with the ability to pan and zoom into the relevant area of the image. This makes it far easier to validate accuracy, consistency, and precision in object tracking. The feature is designed to be good and lean on process - ensuring high-quality review without unnecessary complexity.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Review 2D object annotations across frames in one grid. Quickly validate tracking consistency and edit annotations in place.
{% endhint %}

<figure><img src="/files/cW9sx8oB90jow7ubigCC" alt=""><figcaption></figcaption></figure>

***

## Use Case

* Reviewing a tracked object across multiple frames to confirm annotation accuracy.
* Validating object boundaries and positions when zooming into finer image details.
* Spot-checking specific annotations during QA before moving to final approval.

***

## Benefits

* Improves annotation quality by enabling closer inspection of object details.
* Streamlines the review process with an intuitive grid layout for annotations.
* Reduces rework by helping reviewers catch errors earlier in the pipeline.

***

## Steps to Use 2D Film Reel

1. Select a rectangle on the current frame.
2. Click on the Film Reel icon to open the grid mode.
3. A panel appears showing the rectangles state across all frames on that specific camera sensor.
4. Click a cell to activate editing mode:
   * A blue border appears.
5. You can now edit position, dimensions.
   * A keyframe is created, the cell's badge turns blue, and a blue line appears under the frame in the timeline.
6. Press Esc to exit edit mode; the blue border disappears.
7. You can scroll across frames within the Film Reel to review all appearances.
8. Use the trash icon to quickly delete a cuboid from a specific frame.


# MultiCam Grid View

The MultiCam Grid View is designed for efficient cross-camera, multi-frame object review and validation. After annotators complete 2D annotations and tracking across multiple camera sensors for a single object, this feature provides a consolidated view to verify annotation quality and consistency.

This feature is particularly valuable when:

* Validating object tracking across multiple synchronized camera feeds
* Reviewing annotation consistency for the same object captured from different angles
* Performing quality assurance on completed annotation tasks
* Identifying gaps or errors in multi-camera object tracking

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Review 2D object annotations across all camera sensors and frames in one grid. Quickly validate tracking consistency and edit annotations in place.
{% endhint %}

<figure><img src="/files/MN41BScFubPkpUAANEhs" alt=""><figcaption></figcaption></figure>

***

## Benefits

* **Fast:** View all annotations related to a single object across multiple camera sensors and frame sequences in one unified interface, eliminating time-consuming context switching between individual camera views.
* **Good:** Improve annotation quality and consistency through comprehensive visual validation. The intuitive grid layout organizes data logically—rows represent sequential frames while columns represent different camera sensors—making it easy to spot inconsistencies, gaps, or errors at a glance.
* **Cost Effective:** Lower operational costs by minimizing rework and reducing quality assurance time.

***

## Steps to Use MultiCamGrid View

### Accessing MultiCam Grid View

1. Create your annotation by tracking 2D objects as usual using your standard annotation workflow.
2. Select the object you wish to review and click on MultiCamGrid View on the Main Menu
3. Click on any annotation within the cell, it will activate the Annotation Details interface
   * Modify attribute values through the Annotation Details pop-up
   * Hit Save to save attribute changes
4. Resize the bounding box or 2D polygon by dragging the corners or edges
5. Translate the annotation by clicking and dragging
6. Changes are saved automatically

### Settings

#### Navigating the Grid

* **Rows**: Each row represents a frame in the sequence
* **Columns**: Each column represents a different camera sensor (refer to the column name and #-ing index)
* **Empty Cells**: Display "no object" message when the object is not present in that camera-frame combination

#### Customizing the Display

1. Adjust the number of camera sensor columns visible on screen using the layout settings (Images per row slider)
2. Configure based on your monitor size for optimal viewing experience

#### Reviewing Attributes

1. Enable attribute display from the view options
2. Select specific attributes to display, or choose to show all attributes
3. Colored tags will appear at the bottom edge of each image showing the attribute values
4. Compare attribute consistency across frames and cameras at a glance

***

## Best Practices

#### Before Using MultiCam Grid View

* Ensure 2D annotation and tracking is finished across all relevant camera sensors before entering grid view
* Work with one object at a time for focused review and validation

#### During Review

* Review frame by frame, checking each camera sensor's annotation for consistency
* Use the attribute display feature to quickly identify inconsistencies in classification or properties across views
* Pay attention to "no object" indicators, verify whether these represent true absence or missing annotations

#### Optimizing Display

* Start with a column count that fits comfortably on your monitor without requiring horizontal scrolling and also enables you to see the annotation. Find that balance.
* When reviewing specific properties, display only relevant attributes to reduce visual clutter
* For large sequences, break the review into manageable chunks rather than attempting to validate everything at once

#### Quality Assurance

* Check that the same object shows consistent positioning relative to its environment across different camera angles
* Verify smooth transitions in bounding box position and size across sequential frames
* Ensure attribute values remain consistent unless there's a valid reason for changes (e.g., occlusion state)

#### Editing Guidelines

* Use click-to-edit for fine-tuning rather than major corrections—significant errors may require returning to the standard annotation view


# Sanity Checks

Sanity Checks are intelligent guardrails that automatically monitor annotation quality in real-time, helping annotators maintain consistency and accuracy while tracking objects across frames.

{% hint style="success" %}
Sanity Checks catch tracking errors instantly. Set realistic movement thresholds to maintain annotation quality without slowing down your workflow.
{% endhint %}

<figure><img src="/files/vferKV2stegQ6m4C5XLP" alt=""><figcaption></figcaption></figure>

***

## Use Case

Annotation quality depends heavily on maintaining realistic object behavior across frames. However, even experienced annotators can inadvertently create unrealistic jumps in object position or rotation when working through large datasets or during fatigue.

**Sanity Checks address this by:**

* Detecting anomalous movements between consecutive frames that exceed physically realistic thresholds
* Identifying unrealistic rotation changes (yaw, pitch, roll) that may indicate tracking errors
* Alerting annotators immediately when thresholds are exceeded, allowing for instant correction

**Common scenarios include:**

* 3D cuboid annotation for autonomous vehicle datasets where objects shouldn't teleport between frames
* Tracking vehicles, pedestrians, or cyclists where sudden position jumps indicate annotation errors
* Maintaining smooth rotational transitions for objects changing orientation
* Quality control during high-volume annotation projects

***

## Benefits

#### For Annotators

* **Immediate Feedback**: Non-intrusive alerts appear as soon as a threshold is exceeded, enabling instant correction
* **Reduced Rework**: Catch errors during annotation rather than during QA review
* **Confidence**: Work with the assurance that obvious errors will be flagged
* **Learning Tool**: Understand realistic movement patterns through threshold feedback

#### For Project Managers

* **Higher Quality Output**: Systematic prevention of common annotation errors
* **Reduced QA Time**: Fewer errors reach the review stage
* **Consistent Standards**: Enforced thresholds ensure uniform quality across annotators
* **Data Integrity**: Training datasets maintain physical realism and consistency

***

## Steps to Use Sanity Checks

#### Setup: Defining Thresholds

1. Access Sanity Check configuration in the recipe by navigating to your project settings
2. Configure Movement Thresholds
   1. Set minimum (optional) and maximum allowed movement distance between consecutive frames for each object class
      1. Example: Vehicles might have a 5-meter threshold, while pedestrians might have a 2-meter threshold
   2. Consider your frame rate and typical object speeds when setting values
3. Configure Rotation Thresholds
   * Define minimum (optional) and maximum allowed changes in yaw, pitch, and roll between frames
     * Example: 15° for yaw (turning), 10° for pitch and roll on stable vehicles
   * Adjust based on object behavior and camera movement

#### During Annotation

1. Create Your Annotation by tracking objects as usual using your standard annotation workflow.
2. Real-Time Monitoring - As you move to each subsequent frame and adjust the annotation, Sanity Checks automatically analyze the changes.
3. The system compares object position and orientation against your defined thresholds.
4. Responding to Alerts
   * If a threshold is exceeded, a non-intrusive notification appears
     * The alert indicates which threshold was violated (movement distance, yaw, pitch, or roll)
   * Review the annotation to determine if:
     * The object genuinely moved that much (adjust threshold if needed)
     * An annotation error occurred (correct the current or previous frame)
5. Continue annotating once addressed

***

## Best Practices

* **Start Conservative:** Begin with stricter thresholds and relax them based on real-world feedback
* **Object-Specific Tuning**: Different object classes may require different threshold values
* **Team Calibration**: Discuss threshold settings with your annotation team to ensure they match actual scene dynamics
* **Iterative Refinement**: Review flagged instances periodically to optimize threshold values


# Authoring Information

The Annotation Authoring Information feature provides comprehensive tracking and visibility into the creation and modification history of annotations (cuboids, 3D polylines, and 2D bounding boxes). This feature captures critical metadata about who created or modified an annotation, when changes were made, how the annotation was generated, and where in the workflow it was edited.

Key information tracked includes:

* **Timestamp**: Creation and edit dates/times for each annotation
* **User Identity**: Email ID or employee ID of the creator/editor
* **Annotation Source**: Origin method (prelabel, manual drawing, smart automation like interpolation or dynamic sizing)
* **Workflow Stage**: The specific stage/node where changes occurred
* **Change History**: All attribute modifications, including positional, dimensional, rotational, and property changes
* **Visual Comparison**: Side-by-side visualization of any two historical versions

The system consolidates changes per session (stage + labeler combination) to show the final state rather than every incremental edit, providing a clear audit trail without overwhelming detail.

{% hint style="success" %} <img src="/files/qchq9tcQpS8cX7YBw03I" alt="" data-size="line"> Track who changed what, when, and how—then visually compare any two versions to validate annotation quality instantly.
{% endhint %}

<figure><img src="/files/bTttVw68ux3xAoQAIfGs" alt=""><figcaption></figcaption></figure>

***

## Use Cases

1. **Quality Assurance & Review:** Quality reviewers can trace annotation lineage to identify patterns in errors, verify that annotations meet quality standards, and understand which automated tools or manual processes produced specific results.
2. **Dispute Resolution:** When questions arise about annotation accuracy or consistency, teams can review the complete history to understand decision-making context and resolve disagreements with factual evidence.
3. **Debugging & Issue Investigation:** When annotation quality issues are detected downstream, teams can trace back through the history to identify where problems were introduced and prevent recurrence.

***

## Benefits

**Good:** Reviewers can quickly identify suspicious changes, verify automation accuracy, and ensure annotations meet project standards, resulting in higher-quality datasets.

**Fast:** Reduce time spent investigating quality issues from hours to minutes by quickly pinpointing when and where problems occurred.

**Cost Efficient:**&#x20;

* Identify and address quality issues early before they propagate through the pipeline, avoiding expensive late-stage corrections.
* Analyze prelabel vs. manual annotation performance to make data-driven decisions about where automation delivers ROI and where human expertise is essential.
* Understand which stages and annotators require more support, allowing managers to allocate training, supervision, and resources where they'll have the greatest impact.

***

## How to Use the Authoring Information

### Accessing Authoring Information

1. Click on any cuboid, 3D polyline, or 2D bounding box
2. Right-click and navigate to the Authoring Information. The Authoring Information panel appears
3. The authoring information panel displays the following information sorted on the recent changes:
   * Creation timestamp and creator identity
   * Most recent edit timestamp and editor identity
   * Annotation source (prelabel/manual/smart automation)
   * Workflow stage where changes occurred
   * List of all attribute changes made

### Understanding the Information Display

**User Identity**: Shows email address when available, otherwise displays employee ID for attribution.

**Source Indicators**:

* *Prelabel*: Annotation originated from automated prelabeling pipeline
* *Manual*: Created by human labeler from scratch
* *Automation*: Generated or modified by tools like interpolation, dynamic sizing, or propagation

**Stage Information**: Displays the workflow node (e.g., "Labeling/OP", "Review/QC") where the annotation reached its current state in that session.

**Change Consolidation**: Only the final state per session (stage + labeler) is shown, not every intermediate adjustment.

### Visual Comparison Feature

1. In the authoring information panel, click on the toggle beside each version
2. The system displays both versions simultaneously with the version history appearing on the right panel&#x20;

   <figure><img src="/files/aHWmFPx5wlteELyrk3ni" alt=""><figcaption></figcaption></figure>
3. Switch between split-screen, overlay, and difference highlighting modes

***

## Best Practices

### For Project Managers

**Regular Audits**: Schedule periodic reviews of authoring information to identify process bottlenecks, training needs, or quality issues before they escalate.

**Leverage Source Data**: Analyze prelabel vs. manual annotation metrics to optimize automation investment and understand where human expertise adds most value.

**Set Expectations**: Communicate to teams that authoring information is tracked for quality improvement, not punitive measures, to maintain a positive learning culture.

### For Quality Reviewers

**Start with Source**: When reviewing annotations, check the source first—prelabeled items may need closer scrutiny than manually created annotations that have been through multiple stages.

**Compare Versions Strategically**: Use visual comparison between initial creation and current state to quickly spot significant changes that warrant investigation.

**Document Patterns**: When you notice recurring issues from specific sources, stages, or individuals, document these patterns to drive systematic improvements.

**Validate Automation**: Regularly sample smart automation results to ensure interpolation, dynamic sizing, and other tools maintain accuracy.

### General Best Practices

**Version Comparison for Validation**: Always use visual comparison when investigating annotation discrepancies.

**Session Consolidation Awareness**: Remember that only final session states are shown—if you need more granular detail, review changes in real-time rather than retroactively.

**Document Exceptional Cases**: When unusual patterns appear in authoring history (e.g., multiple rapid edits), investigate and document root causes to prevent future issues.


# Tool Shortcuts

## Point Cloud View

1. Fit Point Cloud in Screen: `Ctrl + F`
2. Jump to Origin
   * Jump to the original state of when the task loaded: `Key O`
3. Toggle[ 2D/ 3D](/annotation-tool/tool-layout#id-2d-3d-mode) Modes: `Ctrl + G`&#x20;
4. Jump from Annotate 2D to Point Cloud: `Esc`&#x20;
5. Jump To: `Ctrl + J`&#x20;

## Navigation (Point Cloud)

1. Helicopter Mode
   * Move (front, back, right, left): `Key W, S, D, A`
   * Fly (up, down): `Key Q, E`
   * Looking Around: `4 Arrow Keys`
   * Zoom Control:&#x20;
     * `Mouse Wheel` or&#x20;
     * `Double-Click` to zoom in
2. Orbital Mode
   * Move (up, down, right, left): `4 Arrow Keys`
   * Orbit around:&#x20;
     * `Key W, S`  (Orbiting top to down)
     * `Key A, D` (Orbiting right to left)
   * Zoom Control:&#x20;
     * `Mouse Wheel` or&#x20;
     * `Double-Click` to Zoom In

## Object Visibility&#x20;

1. Ground & Ceiling Mover [know more](/annotation-tool/key-features/ground-and-ceiling-mover)
   * Ground Level Up/Down: `G + Mouse Wheel`
   * Ceiling Level Modification: `C + Mouse Wheel`

2. Enlarge Camera Images to Fullscreen:
   * `Double-click` on Image on the [Image Panel](https://docs.imerit-prod.io/annotation-tool/pages/t1P8d2reKe3nZWAkN2Kh#id-5.-image-panel)
   * Toggle/ Enlarge the first Image on the Image Panel: `Shift + Q`
     * Cycle forward through all camera sensors: `Shift + Q`
     * Cycle backward through all camera sensors: `Shift + QQ`
   * Contextual click on the image to open Annotate 2D

3. View Point Cloud on Image: Press `Key P` when any Image is toggled to fullscreen

   ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXfSEW94ZUyDnl2zZK69DfNPYwqI0_jA3UF25lBk_YDx3Gua7ae8vmFZZR7q9MY26K3AgUpOP49mTIHImNKw6gpdiTRHxapjno_3eOhdqq1HhXDuZ2z0j5QDSgwRe5-jLKDBHxAVhKxL31P1uNA520K1K4EF?key=lGhAQLv5xC3Ciuwf6zBTGQ)

4. View Object Edges using filter: `Shift+ I`

   ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcE3EfLOdRQhkV4WshM0LUwG77q_BSHVAGa_Tn0fCKIxln4fLELOrbXJGqgcuzEZSB0Ypi2Z7OBD0AxpgZL-9J_jQHrriHbtCsZXjcAfH1j7HNP_tN6QYmK5OFY7FBumuJBU5iG_4-Kriob0zR9oSSET6g?key=lGhAQLv5xC3Ciuwf6zBTGQ)

## Drawing Tools & Modification

1. Cuboid  ([Know more](/annotation-tool/drawing-tools/cuboid))
   * Rotate Object Direction (by 90°): `Key R`
   * Change Dimension (after selecting Cuboid)
     * Increase/ Decrease **Length** from **FRONT**:  `Ctrl+ -/=`
     * Increase/ Decrease **Length** from **BACK**:  `Ctrl+ 9/0`
     * Increase/ Decrease **Width** from **RIGHT**:  `Alt+ 9/0`
     * Increase/ Decrease **Width** from **LEFT** :  `lt+ -/=`
     * Increase/ Decrease **Height** from **TOP**:  `Shift+ -/=`
     * Increase/ Decrease **Height** from **BOTTOM**:  `Shift+ 9/0`
   * Move Cuboid
     * Front/ Back: `Ctrl+ O/P`
     * Right/ Left:  `Alt+ O/P`
     * Lower/ Higher : `Shift+ O/P`
   * Rotate Cuboid (clockwise/ anti-clockwise)

     * Roll: `Ctrl+ [ ]`
     * Pitch: `Alt+ [ ]`
     * Yaw: `Shift+ [ ]`

     ![](https://lh7-rt.googleusercontent.com/docsz/AD_4nXcfhLvwNWogjaM7AE63LwtHxXvhzBOePV4ge7FtVE7ieGjxo28KKsBhQKVpoQLtsXnwySg17GI9rwEx5NMgo6_-z1ifaxoz_-P7uzofslz4XbAl7KQ7vQaaY3VgtWfKQh-P8-crFb6xEuh5bDHbCJEy-Wo?key=lGhAQLv5xC3Ciuwf6zBTGQ)

2. Rectangle ([Know more](/annotation-tool/drawing-tools/rectangle))
   * Change Dimension (after selecting Cuboid)
     * Increase/ Decrease **Width** from **LEFT**:  `Ctrl+ 9/0`
     * Increase/ Decrease **Width** from **RIGHT**:  `Ctrl+ -/=`
     * Increase/ Decrease **Height** from **TOP**:  `Shift+ -/=`
     * Increase/ Decrease **Height** from **BOTTOM**:  `Shift+ 9/0`
   * Move Rectangle
     * Right/ Left:  `Ctrl+ O/P`
     * Lower/ Higher : `Shift+ O/P`

3. Polyline 3D
   * Create a vertex during Line Creation - `Left-click`
   * End Polyline - `Right-click`
   * Add Vertex - You can now quickly delete unwanted vertices on 3D polylines by simply pressing `CTRL + Left-click`
   * Delete Vertex - `CTRL + Right-click`

4. Paintbrush (Comming Soon)
   * Change Radius: `Ctrl + Mouse Wheel`
   * Remove Annotation: `Alt + Mouse Click & Drag`&#x20;
   * Confirm Segmentation: `Right-Click`&#x20;

## Actions on Annotation

1. &#x20;Hide/ Unhide Annotations: Select an Annotation & Press `Ctrl+ 1` to hide/ unhide Non-Selected ones
2. Copy Annotation: `Ctrl+ C`
3. Paste Annotation: `Ctrl+ V`
4. Duplicate Annotation: `Ctrl+ D`
5. Delete selected annotation from the current sensor: Key Del
6. Delete selected annotation from the current sensor across all Frames: Shift+ Del

## Interpolation

1. Add/ Remove a [Keyframe](/annotation-tool/key-features/keyframe-interpolation): `Key K`

## Navigation Across Frames

1. Previous Frame:  Key ,&#x20;
2. Next Frame :  Key .&#x20;
3. Jump 5 Frames backwards: Shift+ ,&#x20;
4. Jump 5 Frames forward: Shift + .&#x20;
5. Jump 10 Frames backward: Ctrl+ ,&#x20;
6. Jump 10 Frames forward  Ctrl+ .

## General

1. View Point Cloud Node: Shift+ N
2. View Loaded Points: Shift+ B
3. View Distance from Ego Vehicle: Press `Key 1` & hover over the points to see the distance.
4. View Distance from Selected Annotation: Press `Key2` & hover over the points to see the distance.
5. View/ Hide Batch Information : `Ctrl+ B`
6. Enable/ Disable Attribute information view (while hovering over Annotations): `Ctrl+ L`
7. Intensity picker: `CTRL+Shift+left-click`&#x20;
8. Undo - Redo: `CTRL + Z`, `CTRL + Shift + Z`


# Audit Tool

Audit Tool allows Customers to have access to submitted [batches](/project-setup/pre-process-data#batch) of the job after they have undergone all the [nodes](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates) of the [taskflow](/project-setup/create-taskflow/1.-taskflow-details#taskflow-templates).

## How to get here?

### From the Landing Dashboard

1. Go to the ‘Audit’ from the Solution listed on the [QuickServe Dashboard](/quickserve-platform) (from the gear icon) of the Solutions listed.
2. User is taken to the Audit Dashboard, where they can view all the submitted Batches.

   <figure><img src="https://lh7-us.googleusercontent.com/docsz/AD_4nXcYqzdsM-QLAWzBTjIaOuoau4wswK00aDF9Cs4DUNIDWK91o598tIaRGEnsW9JAZRTzq7x3RQPvdrblCtCLh7lQBZ2QsyPdrzQuwgfCVPwdVsPfPdfnujFq8PieHn1h9smzR0pBlXaLXn7EMYrXMpHG1Nm3?key=lGhAQLv5xC3Ciuwf6zBTGQ" alt="" width="188"><figcaption></figcaption></figure>

### From Job Builder

1. Navigate to the Job Builder UI
2. Click on the 'Audit' button at the top right

<figure><img src="/files/l4h2UwszZr5sIlhxkMub" alt=""><figcaption></figcaption></figure>

### From All Batches

1. Go to 'Job Details' under the gear icon beside a job on Job Builder
2. Select 'All Batches' from the left navigation.
3. Select the 'Audit' button that appears above the batch table.&#x20;

<figure><img src="/files/ZvPKoTlNEEEoyB0qKK8r" alt=""><figcaption></figcaption></figure>

## Audit Dashboard

1. Select the Job from the dropdown to see all the batches with their status in the table below.

<figure><img src="/files/u7X8kxdiKtGaqVg8UzyP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/bhAuZPD2ocs4FOVl0iX9" alt=""><figcaption></figcaption></figure>

All batches will be listed under the dashboard. The table displays the following details:

* **Tasks**: Number of frames in one Batch
* **Annotations**: Total no. of Annotations created in a Batch&#x20;
* **Issues**: No. of Mistakes marked by the auditor
* **Issue Status (Open/ Closed/ Ignored):** No. of Issues under each Type
* **Status** (of the Batch)
  * LIP (Label in Progress) - Cannot be accessed by the auditor till labelling is complete
  * RFA (Ready for Audit) - Auditor can select this sequence provided no other sequence is assigned to them
  * AIP (Audit in Progress) - Auditor is currently reviewing the sequence
* **Assigned To** - Auditor Name
* **Last Updated** - Last time the sequence was submitted. A sequence can go through multiple rounds of audit
* **Action** - Launch the Audit Tool

## Audit Tool Interface

The tool opens in a new tab. The interface is similar to the [annotation tool](/annotation-tool/tool-layout) with all the annotation data&#x20;

The 'Issues' Link on the Header is enabled in the Audit Tool. Here is where the users can document issues as and when observed.

Note:

* The Annotations are non-editable
* The only action that takes place is marking issues

On the Issues Panel, auditors can see a summary of the issues created and also filter Issues from the Issue Title row.

<figure><img src="/files/YVMwLjQ4WY2WFGbh468z" alt=""><figcaption></figcaption></figure>

### How to Raise Issues

To create an issue user can do either of the two:&#x20;

1. Clicking on 'Issue' on the [Header](https://docs.imerit-prod.io/pages/t1P8d2reKe3nZWAkN2Kh#id-1.-header) opens the Issue Panel. Click on the '+' icon on the issue title row.&#x20;

<figure><img src="/files/PI9yrK5dumFgytKpZk8N" alt=""><figcaption></figcaption></figure>

2. Right-clicking on the annotation and select the ‘Create Issue’ option.

### Create Issue Card Details

Create Issue Card appears on the Issue panel with the following data required for input before saving:

<figure><img src="/files/GvjLuMS6eY9MpY8kt1Sn" alt="" width="188"><figcaption></figcaption></figure>

#### Frame&#x20;

* Start: Frame number where the issue is observed. The tool will automatically populate this with the current frame and will not prompt for an input
* End: Frame number till where the issue is observed if it spans across multiple frames. The tool will automatically populate this with the current frame assuming the error doesn't span beyond the current frame. The user can update to the frame till where it is applicable.

#### Class, Instance, Attribute Selection

Dropdown selection from the list defined in the Project Recipe.

#### Severity

Leverage this field to indicates the level of impact of an issue, ranging from critical to minor.&#x20;

#### Issue Type Selection

All the issues that can be observed are listed under [default](/project-setup/create-taskflow/1.-taskflow-details#default-template). The user must select whichever is applicable. The list of options for Issues is [customisable](/project-setup/create-taskflow/1.-taskflow-details#new).

Each error category is assigned a specific color, making it easier for the Auditor to quickly identify the type of issue they are looking for within the list. For example, 'blue' represents wrong annotations, 'green' indicates missing annotations, 'orange' signifies inconsistency in Track ID, and 'purple' refers to miscellaneous issues.

<figure><img src="/files/VliCZo5pzaM5S1DgQQvT" alt="" width="297"><figcaption></figcaption></figure>

#### Comments (if any)

### Issue Menu

Each Issue Card created has a few options which can be pulled up by clicking on the 3 vertical dots on the top right corner.

<figure><img src="/files/zISmAOokA2VTKzpQfJtu" alt="" width="227"><figcaption></figcaption></figure>

* Reply to the issue
* Ignore/ Close the Issue (the same gets reflected on the [Audit Dashboard](#audit-dashboard))
* 3D/ 2D markers to redirect the annotator's attention to a location.&#x20;
  * For a Missed Annotation: In this case Select the Class & Issue type as 'Missing Object'. After saving, click on the three dots to mark the location of the expected Annotation on the Image/ point cloud using 2D/ 3D Marker respectively.

> Quick Tip: To associate the card to the existing annotation, provide the class and instance details. This will allow users to click on the card to be redirected to where the issue lies.

### Auditing Complete

Once reviewing is completed, click on Accept or Reject on the top right of the tool.

1. Accept will change the status of the batch to Audit Accepted in the batch lifecycle
2. Reject will change the status of the batch to Audit Rejected in the batch lifecycle
3. WithHold is used when the Auditor is unsure and would like to revisit the batch.  The status of the batch turns to Withhold, letting all know that the decision is still pending.

<figure><img src="/files/2I09ccdALJ1yuLh32ALX" alt="" width="323"><figcaption></figcaption></figure>


# Visualization Tool

Visualization tool helps in overviewing the task after any batch submission. This shares the same interface as the [annotation tool](/annotation-tool/tool-layout). However, the annotation data that loads is non-editable and only for viewing.&#x20;

## How to get here?

* One can access [Batches](/project-setup/pre-process-data#data-terminology) ready for viewing by clicking on the ‘Visualization’ tab from the left navigation.&#x20;
* The list of Batches available for viewing is listed here.&#x20;
* Click on 'Open Visualization'. This opens the Annotation Tool with all the labelling data in a new Tab. &#x20;

<figure><img src="/files/Zmu6Sk3jR098owkiIkCE" alt=""><figcaption></figcaption></figure>

* Point Cloud and reference images load with data submitted on the respective node
* Data can only be viewed
* No updations to data created or feedback can be provided


# API Documentation


