# Welcome

Guide on how to use the Mindkosh annotation platform to quickly label images, videos and Lidar datasets.

Welcome to a new way of labeling your data!

We are glad you chose Mindkosh to deliver the high quality datasets your Machine Learning projects deserve. With Mindkosh you can easily manage large Data labeling projects and the teams that work on them. All while using a feature-rich Annotation tool built for efficiency and large volumes of data.

You can find information about all aspects of the platform here. If you would like to see the platform in action, or need visual help performing some actions, you can visit our [Youtube channel](https://www.youtube.com/channel/UCVRp5p9kuXOTsywDNiAQLjQ).

You might also be interested in joining our [**Discord Channel**](https://discord.gg/EcjavQvp)


# Key terms

**Organization** — A central place to manage your annotation teams.

**Tasks** — A labeling task.

**Projects** — A central place to organize related labeling tasks.

**Batches** — The smallest unit of work that can be assigned to a user.

**Orphan Tasks** — Tasks that do not belong to any project.

**Annotation workspace** — The workspace with annotation tools that let's you label your data.

**Annotation guide** — A document describing instructions on how to label the data.

**Track** — A set of shapes on different frames that correspond to the same object.

**Attribute** — An additional property of an annotated object (e.g. color, size etc.).


# Recommended browsers

We recommend using Google Chrome and Mozilla Firefox for using Mindkosh. The platform only works on Desktop.

Our team optimizes and runs all of our tests on both Google Chrome and Mozilla Firefox.

While Mindkosh should work on other web browsers, we do not recommend using Mindkosh on Safari, Edge or Internet Explorer.

If you are using a web browser other than Google Chrome or Mozilla Firefox and you encounter a bug, we may not be able to support you at this time.

If you have any questions, please reach out to us at <support@mindkosh.com>.


# Customer Support

We make it a mission to make sure you enjoy using our platform. Contact us through email, slack, chat or create a ticket.

At Mindkosh, we make it a mission to make sure you enjoy using our platform. In case of an issue, we make sure to provide timely resolutions upon communication from users.&#x20;

{% hint style="info" %}

#### **Support business hours**

Support is available during normal business hours, which span from 9:00 AM to 8:00 PM Indian Standard Time on Monday through Saturday, with the exclusion of major Indian holidays.
{% endhint %}

## Get in touch using in-app chat

You can get in touch with us directly through the in app chat, which located at the bottom right of the page.

## Create a ticket in-app

You can also create a track-able ticket from within the app. Click on the help icon in the top bar, and select create ticket. Once a ticket has been created, you will receive an email with details on how to track the status of the ticket.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FPF1t3sDa8uT1QZe9cDR9%2Fimage.png?alt=media&amp;token=8370c1c7-9cef-40ba-b5c2-ec96c393f484" alt=""><figcaption></figcaption></figure>

##

## Contact us through Slack

You can join our slack channel using [this invite link.](https://join.slack.com/t/mindkoshai/shared_invite/zt-21g1o9ip2-TyzYCOal78qBMO0WCzasMA) If you receive a message saying the link is expired, send us an email at <support@mindkosh.com>, and we will send you a new invite link.

Free users can post on the public channels and also chat one-on-one with other members. Paid users will have a private channel dedicated for them, and will get priority support.

##

## Contact us through Email

To get support for an issue you are facing, simply send us an email at **<support@mindkosh.com>** . To make sure that we identify your issue quickly and can provide you with relevant support, specify the following information in the email.

1. **Account**\
   Email ID and organization name of the account that encountered the issue.
2. **Issue urgency**
   1. High: I cannot use Mindkosh at all. (Example: you are unable to login, the app does not load etc).
   2. Medium: A particular feature is not working. (Example: Segmentation tool is not working properly).
   3. Low: I occasionally face issues using Mindkosh . (Example: Annotations are sometimes not shown properly). d. Very low: General query, suggestion or bug report.
3. **Relevant Screenshot**\
   If possible, please include relevant screenshots that can help explain the issue you are facing. A screen-record would be even better!
4. **Description**\
   Describe the issue in as much detail as possible so that we can quickly pin-point the issue and help you as soon as possible. If relevant, also include the time at which you started facing the issue.


# Datasets

Use datasets to manage your raw data.

All your raw data - including images, point clouds and videos are managed through datasets. You can add tags to each file in your dataset to organize it into different subsets.

To create a dataset, select what type of data you would like to upload, and where you would like to upload it.&#x20;

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fdc08SsFEBlxM9Ckrm2Aq%2Fadding_data_to_mindkosh_from_cloud_storage.png?alt=media&amp;token=499bbb25-3e2a-4879-aa5a-0922644089aa" alt=""><figcaption></figcaption></figure>

You can upload data to your datasets multiple times. [**Check out this guide**](/management/datasets/uploading-data) **to see the different ways in which you can add your data to Mindkosh.**

Once uploaded, you can see it in a list and filter by tags.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FcFMuiemWyXYT4ol3uY3q%2Fdataset_files_mindkosh.png?alt=media&amp;token=655acdc1-b0d8-4605-91fa-4c0b7db4533c" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
To start labeling this uploaded data, you need to create a task and attach a dataset to it. [Check out this guide](/management/tasks#creating-a-new-task) to see how you can create a task.
{% endhint %}

&#x20;

### Using tags

Tags are a great way to organize your data on Mindkosh. For e.g. if you have multi-modal data, you can tag the data from each sensor with a specific tag to easily identify it.

{% hint style="success" %}
You can add multiple tags to each file
{% endhint %}

Another way to tags is to segment your data in meaningful ways. For e.g. imagine that you are uploading data captured on specific days. You could tag the data from each day with a specific tag, to easily identify the files captured on a particular day. These tags can then be used to label data from specific days in separate tasks.


# Uploading data

Ingest data through the UI, SDK or connect your own cloud storage.

You can add data to your datasets on Mindkosh in a few different ways.

### Uploading using the UI

You can upload most data types directly from the UI. To do this, either create a new dataset, or select an existing dataset. On the dataset page, click on the **Add files** button at the top. Then you can upload your data by simply dragging and dropping your files. Note that you will only see files with supported file formats for the selected dataset type.

{% hint style="warning" %}
Adding reference images to point clouds (for example for Sensor fusion use cases), is not supported through the UI. These can only be added using the SDK. The same applies to reference images for other images - for example, depth and thermal images to a RGB image.
{% endhint %}

**Supported formats for Images**

PNG (Single channel and RGB), JPG, JPEG, BMP, WEBP

**Supported formats for point clouds**

ASCII PCD, Binary PCD, Binary compressed PCD

{% hint style="warning" %}
You can only upload 1000 files at a time using the UI. If you have more files, you can upload them in chunks. However it is recommended that you use the SDK to upload large number of files.  &#x20;
{% endhint %}

###

### Uploading using SDK

Please refer to the [documentation on SDK](/python-sdk/uploading-data) to see how you can upload data using the SDK. Note that you need an SDK token to be able to use the SDK - please get in touch with us to get one.

### Adding data from cloud storage

Instead of uploading the data to our servers, you can also connect your own Cloud storage to Mindkosh. In this setup, your data is never stored on Mindkosh servers, and is instead streamed directly from your storage to the user's browser.&#x20;

To add data from your own cloud storage, you first need to add your cloud credentials to Mindkosh. This is a one-time process. Once you've added your credentials, you can add data any number of times without having to add credentials.&#x20;

We currently support AWS S3, Microsoft Azure and Google Cloud storage.&#x20;

To add data from your cloud storage:

1. Create a new Dataset.
2. Select **User cloud** as the storage location.
3. Select the appropriate Cloud provider and follow the steps outlined below.
   1. AWS S3
   2. MS Azure
   3. Google cloud storage

{% hint style="info" %}
When you create the dataset, the entered location will be scanned for relevant files and added to the dataset. Note that only files in the root of the entered location are scanned. Sub-directories are not scanned.
{% endhint %}

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fdc08SsFEBlxM9Ckrm2Aq%2Fadding_data_to_mindkosh_from_cloud_storage.png?alt=media&amp;token=499bbb25-3e2a-4879-aa5a-0922644089aa" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
When connecting your cloud storage with Mindkosh, there may be outbound data transfer charges extracted by your cloud storage provider. You may need to refer to your cloud provider's setup to see if this applies to you. As an example, in most AWS S3 setups, there is an outbound data transfer charge of USD 0.09 per GB of data that is transferred out of S3. &#x20;
{% endhint %}

#### Adding data from AWS S3

Make sure you've added your credentials before creating the dataset. You can check out the [guide to add your credentials for AWS S3 here](/management/datasets/connecting-with-aws-storage). To add data from your S3 bucket, enter the following details.&#x20;

**Location**\
The AWS region of your bucket\
\
**Bucket name**\
Enter your bucket name. Note that you need to enter just the bucket name, without prefixes like *https* or *S3,* or ending slashes.

**Directory**\
Enter the directory that contains the images/pointclouds you want to add to your dataset. Note that we only scan the root directory entered here and skip any sub-directories. Make sure your data is in the directory mentioned here.

For example, if your images are stored in this manner:\
\
`s3://example_bucket_name/sample_dataset/slice_1/image_0001.png`&#x20;

`s3://example_bucket_name/sample_dataset/slice_1/image_0002.png`

You would enter, `example_bucket_name` as the bucket, and `sample_dataset/slice_1/` as the directory, and all images in this directory would be added to the dataset.

#### Adding data from MS Azure

Make sure you've added your credentials before creating the dataset. You can check out the [guide to add your credentials for MS Azure](/management/datasets/connecting-with-azure-storage). To add data from a container on Azure, enter the following details.&#x20;

**Location**\
The region of your container\
\
**Storage Account/Container name**\
Enter your storage account and container name separate by a  `/`.  For e.g. if your your storage account name is `teststorageaccount` and container name is `testcontainer`, you would enter the following - `teststorageaccount/testcontainer`

**Directory**\
Enter the directory within the container that contains the images/pointclouds you want to add to your dataset. Only enter the directory inside the container, do not include the container name itself. If you files are in the root container - that is, they are not inside a directory, simply enter `/` in the directory box.

For example, if your images are stored in this manner:\
\
`testcontainer/sample_dataset/slice_1/image_0001.png`&#x20;

`testcontainer/sample_dataset/slice_1/image_0002.png`

You would enter `sample_dataset/slice_1/` as the directory, and all images in this directory would be added to the dataset.

#### Adding data from Google cloud storage

Make sure you've added your credentials before creating the dataset. You can check out the [guide to add your credentials for Google storage](/management/datasets/connecting-with-google-cloud-storage). To add data from a bucket on Google cloud, enter the following details.&#x20;

**Location**\
The region of your bucket\
\
**Bucket name**\
Enter your bucket name. Note that you need to enter just the bucket name, without prefixes like *https* or ending slashes.

**Directory**\
Enter the directory within the bucket that contains the images/pointclouds you want to add to your dataset. Only enter the directory inside the container, do not include the container name itself. If you files are in the root container - that is, they are not inside a directory, simply enter `/` in the directory box.

For example, if your images are stored in this manner:\
\
`testbucket/sample_dataset/slice_1/image_0001.png`&#x20;

`testbucket/sample_dataset/slice_1/image_0002.png`

You would enter `sample_dataset/slice_1/` as the directory, and all images in this directory would be added to the dataset.


# Connecting with AWS storage

See how you can add your AWS credentials to connect your own AWS S3 buckets to your datasets on Mindkosh.

To connect your AWS account with Mindkosh and add data, you first need to add your AWS credentials.&#x20;

{% hint style="warning" %}
When connecting your own Cloud service account with Mindkosh, please note that data egress charges may be applicable on your Cloud storage account. Please check with your cloud provider for more details.&#x20;
{% endhint %}

## Create an IAM user on AWS

Create an IAM user on AWS, and attach a policy with read access rights over the bucket and location you intend to use. When asked to choose the AWS credential type. select **Access key - Programmatic access**. We do not require AWS console access.

An example policy you can attach to the new user is given below. Be sure to replace *example-bucket* with your own bucket name.

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::<example-bucket>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<example-bucket>/*"
            ]
        }
    ]
}

```

{% hint style="warning" %}

#### Remember to save the API Access keys

Once you have created a new user, you will be prompted to save the Access keys you just created. Make sure to click on the "**Download .csv**" button. If you close the tab, and reopen it, you will not be able to view the Secret access key required to access data from your bucket.
{% endhint %}

##

## Set CORS policy

In order to enable the browser to directly fetch the files from your cloud storage, you will need to set the right CORS policy on the bucket, so the browser does not block loading the files. Here is how you can do it for a bucket on AWS S3.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FltvF675Ynt1mKKH9RzYQ%2Fsetting-cors-on-s3-to-connect-to-mindkosh.jpg?alt=media&amp;token=ec009cd9-6399-4f1e-8aaf-6ad6d6fe9139" alt="Permissions section on a AWS s3 bucket"><figcaption></figcaption></figure>

1. Open the bucket on the AWS console.
2. Switch to the Permissions tab.
3. Scroll down to the CORS section and enter the following policy.

```json
[
    {
        "AllowedHeaders": [
            "Access-Control-Allow-Origin"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "https://app.mindkosh.com",
        ],
        "ExposeHeaders": [
            "Access-Control-Allow-Origin"
        ]
    }
]
```

## Add credentials to Mindkosh

{% hint style="danger" %}
Only organization admins can add cloud storage credentials on Mindkosh&#x20;
{% endhint %}

With the permissions setup, we are now ready to add the credentials to Mindkosh. To add cloud storage credentials, go to the Organization page from the left sidebar on Mindkosh.&#x20;

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F7NigpzmfdEMsIqUnmOHo%2Fimage.png?alt=media&amp;token=30c4ea19-bb9b-40e9-831e-09b3d5b8d6bc" alt=""><figcaption></figcaption></figure>

Click on the Manage Keys button in the AWS S3 section, and enter the following keys in the appropriate boxes:

1. `Access key ID`
2. `Secret Access key`

Once the credentials have been setup, you can create a dataset to add data from your storage. [Checkout the steps mentioned here to do this.](/management/datasets/uploading-data#adding-data-from-aws-s3)


# Connecting with Azure storage

See how you can add your Microsoft Azure credentials to connect your own Azure buckets to your datasets on Mindkosh.

To connect your Azure storage with Mindkosh and add data, you first need to add your Azure credentials.

{% hint style="warning" %}
When connecting your own Cloud service account with Mindkosh, please note that data egress charges may be applicable on your Cloud storage account. Please check with your cloud provider for more details.&#x20;
{% endhint %}

### Creating credentials for Azure

The recommended method to connect your storage with Mindkosh is through the use of *Azure Active Directory* (also called *Azure Entra ID*). To create credentials you need to do the following:

1. Create a resource group if you don't already have one.  [Follow the steps outline here](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal).
2. Create a storage account, if you don't already have one. [You can follow the steps here.](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview)
3. Create a storage container, where your data will be stored. [Follow the steps here](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
4. Create a service user via  Azure active directory by registering a new app. [Here is a guide to doing this](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app).
   1. Once the app is registered, you can create credentials to access it. We need the following tokens to access your storage data, so please keep them handy for the next steps.
      1. client-id
      2. client-secret
      3. tenant-id\ <br>

         <div data-full-width="true"><figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FH3HnaOj7m1LeqpQ5jQlt%2Fadding-azure-credentials-to-mindkosh.jpg?alt=media&amp;token=86f20767-84ed-47fc-9f24-6724cecca4d6" alt=""><figcaption></figcaption></figure></div>
5. Assign role based access policy for the user which includes access to relevant buckets. You can learn more about various ways in which you [can do this here](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal?tabs=delegate-condition). For example, if you want to grant access at the container level:
   1. Go to the storage container
   2. Go to the IAM section from left sidebar
   3. Click on Add role assignment
   4. Add the role *Storage Blob Data Reader* and the application created above

### Setting CORS

In order to enable the browser to directly fetch the files from your cloud storage, you will need to set the right CORS policy on the bucket, so the browser does not block loading the files. Here is how you can do it for a container on Azure.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FdDWGdQRW2hLuMQQr9Tpt%2Fmindkosh-setting%20cors-azure.jpg?alt=media&amp;token=be63ed4e-178e-47b2-9b2c-2b1423c19ac8" alt=""><figcaption></figcaption></figure>

1. Go to the container page
2. Go to the CORS page in the Settings section in the left sidebar
3. Set the following values
   1. Allowed origins : `app.mindkosh.com`
   2. Allowed methods: `GET`
   3. Allowed headers: `*`
   4. Exposed headers: `content-length`
   5. Max-age: `120`

## Add credentials to Mindkosh

{% hint style="danger" %}
Only organization admins can add cloud storage credentials on Mindkosh&#x20;
{% endhint %}

With the permissions setup, we are now ready to add the credentials to Mindkosh. To add cloud storage credentials, go to the Organization page from the left sidebar on Mindkosh.&#x20;

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F7NigpzmfdEMsIqUnmOHo%2Fimage.png?alt=media&amp;token=30c4ea19-bb9b-40e9-831e-09b3d5b8d6bc" alt=""><figcaption></figcaption></figure>

Click on the Manage Keys button in the MS Azure section, and enter the following keys in the appropriate boxes:

1. `client-id`
2. `client-secret`
3. `tenant-id`&#x20;

Once the credentials are setup, you can create a dataset to add data from your storage. [Checkout the steps mentioned here to do this.](/management/datasets/uploading-data#adding-data-from-ms-azure)


# Connecting with Google cloud storage

See how you can add your Google cloud storage credentials to connect your own Google storage buckets to your datasets on Mindkosh.

{% hint style="warning" %}
When connecting your own Cloud service account with Mindkosh, please note that data egress charges may be applicable on your Cloud storage account. Please check with your cloud provider for more details.&#x20;
{% endhint %}


# Organization

Easily manage your annotation team on Mindkosh

Organizations in Mindkosh work similar to how workspaces work in slack.

You can be part of multiple organizations at once. Each organization is a separate entity and data from one organization cannot be accessed through another organization.

Note that subscriptions are also applied at the organization levels. For example, if you have a paid plan applied at Organization 1, other organizations will not be able to benefit from it, and will need separate plans.

At login you will be asked to choose the organization you want to log in to. Once logged in, you can switch between organizations at any time by using the organization dropdown in the left sidebar.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F7mZnehXb2BSnIH7v5I9f%2F42be375-Screenshot_from_2022-08-01_17-35-24.png?alt=media&amp;token=7a86a806-b370-430f-b36f-905d82f89e46" alt="Switching between organizations"><figcaption></figcaption></figure>

An organization is created for you when you create a new account on Mindkosh. This is your default organization. You can change your organization's name, invite new users or manage existing users in your organization by going to the Organization page from the left sidebar.

#### Inviting users to your organization

To invite users to your organization, head over to the Organizations page from the left sidebar, and enter the email of the user you wish to add to your team.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fz5DSs961gPC1Ynmaqk52%2Fimage.png?alt=media&amp;token=383f6114-1f37-47db-a6f5-b5940c9cf984" alt=""><figcaption></figcaption></figure>

In addition to the email, you can also specify the access level you wish to grant to the user. By default, the access level is Admin.

When you invite a user to your organization, she will receive an email to accept the invitation. If the invited user does not have a Mindkosh account, she will be prompted to create one. If the user is already on Mindkosh, she can accept the invitation by using the link in the email, or by going to the platform and checking the notifications.

#### Managing existing users

You deactivate an exiting user or change their access level from the list of all users on the Organization page. You can also reactivate an inactive user from the same list.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FJa08t6qzIhVU5R2Eeujz%2Fimage.png?alt=media&amp;token=e5ffa0bd-40fc-426f-8845-c47aaf314b74" alt=""><figcaption></figcaption></figure>


# Projects

Manage your annotation projects on Mindkosh

A central place to organize related labeling tasks.

Projects can be assigned to Admin/User type users so they can easily manage all details regarding the project.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FRQyUOpGMQbZU4X5GwRpL%2Fimage.png?alt=media&amp;token=4fae390b-e9ce-440f-b3fe-042bb08d7e21" alt=""><figcaption><p>Only Admins and Asignees to a project can access the tasks inside them</p></figcaption></figure>

**Visibility** - Projects are only visible to Admins and Project managers assigned to the project. Tasks within a project are accessible to all project assignees.


# Tasks

Annotate data on Mindkosh using tasks

A labeling task. Contains labels, images, annotation guide, images, workspace setting etc.

Tasks can be divided into [labeling batches](/management/batches) which can be assigned to users.

**Visibility** - Tasks belonging to a project are only visible to Admins, Project managers assigned to the project, and any user assigned to a batch that is part of the task.

Once created, images cannot be added/removed from the task. If you want to add more data, simply create another task with the new images within the same project.

Tasks can be in three modes

1. In progress - A task stays in this mode until at-least one batch is moved to validation mode
2. Validation - Once at-least one batch moves to validation.
3. Completed - When all batches of the task have been completed.

#### **Orphan Tasks**&#x20;

Tasks that do not belong to any project. Orphan tasks are a quick way to get started. These can also be used as training tasks because they are visible to the entire organization

Visibility - Orphan tasks are visible and accessible to everyone within an organization. For this reason, while they are powerful, they should be created with care.

## Creating a new task

Tasks need to be associated with an existing dataset to add data to them. Before you follow the following instructions, please make sure you have the dataset created, and that data has been added to it. [Check out this guide](/management/datasets) to know more about datasets, and how to upload your data.

To create a new task, go to the Tasks page from the left sidebar, and click on the **Create new task** page.

### Basic Settings

Enter basic details for your task

**Parent Project (optional)**\
If you would like to add this task to an existing project, you can choose one from here. You can also do this after creating a task.

**Workflow modes**\
Each batch of data starts in the Annotation mode and ends in Completed mode. You can choose to add other workflow modes here to suit your requirements. *Note that this setting cannot be updated later.*

**Annotation type and tools**\
Customize the tools visible on the annotation page. These can be updated later. For segmentation projects, please make sure to select polygon, which is the main method of drawing segmentation masks on Mindkosh.<br>

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FKDrRgSPtQYyoAmXVkEkc%2Fimage.png?alt=media&amp;token=bc74be9b-d01d-44a8-a872-1d9ca8ad926b" alt=""><figcaption></figcaption></figure>

###

### Setup Labels

Setup the ontology for this task. If you already have the labels added to another task. You can copy them to the new task directly. For a detailed guide on setting up an ontology, please [refer to this guide](/management/class-labels).

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FWM7ZusN4Zp8nCF9RiVVB%2Fimage.png?alt=media&amp;token=a8bfd504-d69b-4014-9554-8e619f050ddb" alt=""><figcaption></figcaption></figure>

### Upload data

You are now ready to add data to the task. To do this

**Add Dataset**\
Select an existing dataset of the appropriate data type.&#x20;

**Select Tags (optional)**\
If you've added tags to your files, you can also choose to filter the data using them. For example, if you've added data from multiple cameras in the same dataset, and would like to create a task from left-camera only, you can tag them with left-cam, and choose this tag here.

**Number of Batches (optional)**\
If you would like your data to be distributed into multiple batches, you can do so here. Each batch can later be assigned to individual annotators, reviewers etc. If left blank, all data will be added to a single batch.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FFaABJ1e2OiWVM4Xb0BX2%2Fimage.png?alt=media&amp;token=eddb753a-dfca-4400-bc9b-ea0f428280be" alt=""><figcaption></figcaption></figure>

### Labeling a task

To start labeling a task, go to the task page by clicking on the appropriate task on the Tasks page. And click on **Label**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Faiq60HoASITcV5fDqJx4%2Fimage.png?alt=media&amp;token=a62531fe-019c-44c9-ae47-1dad351e79e8" alt=""><figcaption></figcaption></figure>


# Batches

The smallest unit of work that can be assigned to a user.

Batches can be assigned an annotator as well as a reviewer.

An annotator can label images, create issues and ask for a review. He cannot submit a review or mark the batch as finished. Asking for a review moves the batch into validation mode.

A reviewer can submit a review and mark the batch as finished. This moves the batch to completed mode.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F1pFG1OCnTGhZmnPee3Ep%2Fimage.png?alt=media&amp;token=a7d99233-7fb0-4707-b4f8-fa93714c7c16" alt=""><figcaption><p>Batches can be assigned to Annotators and QC for better access management</p></figcaption></figure>

A batch can be in four modes

1. **Annotation** - Every batch starts in this mode. And stays in this mode until images are being labeled
2. **Validation** - A batch moves into this mode, when it is submitting for a review. When an annotator has finished labeling images in a batch, he can submit it for a Quality Check.
3. **Quality Check** - The final Quality check for the batch. Once complete, the QC can submit a review with ratings for the annotations.
4. **Completed** - When a reviewer marks the batch as completed, it moves to Completed mode.

**Visilibity** — Batches can be viewed by Admins, Project Managers assigned to parent projects and annotators assigned as an Annotator or a Reviewer to the batch.


# Class labels

How to add label classes and define an ontology for an annotation task

You can create an ontology and add labels to a task either when creating it or editing it. Note that you cannot delete an existing label or attribute.

If you already have the labels defined in another task, you can also copy those when setting up labels for a new task. Simply select the task from which you would like to copy labels.

When creating a label, you can specify its Name and color, and add attributes of various types.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FhHjp7ctUxhYeeyhUKTro%2Fimage.png?alt=media&amp;token=db00d210-c40e-4e49-9a7e-278596c5f717" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Once a task has been created, labels and attributes cannot be deleted. However they can be edited and more labels/attributes can be added from the Labels tab on the task page.
{% endhint %}

### Basic settings

**Color**\
You can set the color of the class by clicking on the color box to the left of the label name

**Class order**\
To set the order in which labels should appear on the annotation screen, hold the drag icon to left of a label's row and drag it into the right position.

**Track**\
Turn this on if you want to track objects of this class across frames, with consistent ID and automatic interpolation.

**Semantic and Instance mask**\
This specifies how polygons are drawn in different settings. For polygon labeling tasks, choose None. For Semantic or Instance Labeling tasks, choose the appropriate setting for each class. You can find more about [Segmentation Mask labeling here. ](/image-video-annotation/image-segmentation-tool#semantic-and-instance-labeling)

**Default Dimensions (Lidar only)**\
Set the default dimensions of this object. Once this is set, whenever you place a cuboid of this label on a point cloud, it will be of this size.

**Lock Dimensions (Lidar only)**\
If you are tracking an object across frames and want its dimensions to stay consistent throughout its lifetime, set this to true. This will make sure any time you make a change to the object's size in any frame, it will be copied to all other frames automatically.&#x20;

###

### Class attributes

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FtVTOKGhOvOyz1dcwzS0E%2Fimage.png?alt=media&amp;token=fcdb1a92-de73-4b21-b188-36e7931e9b0f" alt=""><figcaption></figcaption></figure>

You can add attributes of the following types to a label:

1. **Select -** Adds a dropdown with multiple options from which a single value can be chosen.
2. **Text** - Add a box to allow user to enter free-form text. This can be used for small text entries like license plates as well as for longer form entries for OCR use-cases.
3. **Number** - Add a box to allow user to enter any numerical value.
4. **Radio button** - Adds a group of radio buttons from which a single value can be chosen.
5. **Checkbox** - True or False type value.

Further, each attribute can be marked as *Mutable* and *Required.*

1. **Mutable** - Only applies to Tracks. If checked, this allows the attribute values to change from frame to frame for the same object. For example, a car can be occluded or not occluded in different frames, so its Mutable property should be set to True. Other attributes however, such as License plate, type of car, color etc. are unique to the object, so their Mutable property should be set to False.
2. **Required -** Set this to true if you want to set a validation check to ensure the labeler has set an appropriate value to the attributes. If an annotation fails this test, it will be highlighted in red on the annotation page.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F7XJto6WwQ1bbVEzc2vbW%2Fimage.png?alt=media&amp;token=eccbcb90-5348-4a05-b04a-5abce2c7b0c6" alt=""><figcaption><p>If an attribute is marked required, and it has not bee set by the labeler, it will be highlighted in red.</p></figcaption></figure>


# Exporting annotations

Guide on how to export completed annotations in various formats like COCO and YOLO on the Mindkosh Annotation platform

Mindkosh supports a variety of annotation formats when exporting the completed annotations. To export annotations from a task, create a *Release*. You can manage Releases from the Release tab on the task page.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FXCalQr7n2f7LrEr8MsSc%2Fimage.png?alt=media&amp;token=b1b554c9-8760-45d6-8ae5-38b552e4f2d1" alt=""><figcaption></figcaption></figure>

The release page shows you a list of all the releases created earlier. If you want to download a previously exported set of annotations, you can do so from here.&#x20;

To create a new release, click on the "Create new release button", which will take you to the New release page. Once on that page, select the batches you would like to export, and click on on *Create release.* This will open up the format selection dialog box.

###

### Choosing an annotation format for export

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FCWxF7Ay1IzOQIYSNS9mr%2Fimage.png?alt=media&amp;token=5df22cc7-4987-49fb-a9a7-8d78dd73dada" alt=""><figcaption></figcaption></figure>

Choose the format you would like to export in. Do note that not all formats support all types of annotations. For example, the YOLO format only supports bounding box annotations. If you have polygons in your task, those will not be included in the YOLO export.

Optionally, you can also add a description to keep track of the releases. You can also use the description to add a version system to your exports, as shown in the image above.

#### Supported formats for Image annotation

1. COCO
2. Pascal VOC
3. YOLO - Bounding boxes only
4. CVAT for images
5. CVAT for Video - Applicable to videos only
6. Datumaro
7. Segmentation Mask - Single channel PNG masks for semantic and instance segmentation
8. TFRecord

#### Supported format for point cloud annotation

As of now, only Mindkosh format is supported when exporting point cloud annotations.[ Details of the format can be found here](/python-sdk/mindkosh-point-cloud-annotation-format).  Annotations in the Mindkosh format can be converted to others like KITTI using the Python SDK. For other formats, get in touch with us, and our team would be happy to assist you.

###

### Downloading the annotations

Creating a release can take some time depending on the volume of data and the type of annotation involved. You can see the status of the release on the Releases page. Once the annotations are ready for download, the status will change to "Ready". You will also get a notification indicating the release is ready for download. You can then download the release by clicking on the download button for that release. &#x20;

{% hint style="danger" %}
Please note that you can only maintain 10 releases at any time. Once you have reached that limit, you will need to delete a release, in order to create a new one.
{% endhint %}


# Quality management

How to use Quality management tools on Mindkosh to create high quality datasets

When creating a task, you can choose what Quality levels you want to impose when annotating.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FOV1Dlsy78fGjI7Ez7g4X%2Fimage.png?alt=media&amp;token=9617c390-c53b-493a-83f3-04884acdbdcd" alt=""><figcaption></figcaption></figure>

Every task will have at-least the Annotation(L1) mode. When completed, each batch can also be marked as completed.

In addition, you can add

1. Validation mode (L2)
2. Quality Check mode (L3)

You can choose to have any combination of these modes.

Checkout [Permissions](/management/quality-management/permissions)to see which users can&#x20;

1. Access the batch to annotate.
2. Move batches between different modes.
3. Create reviews.

### Review

Users can use reviews to give feedback to the Assignees of a batch. Using a review, you can:

1. Rate the annotation quality (On a scale of 10)
2. Accept a batch. In this case the batch is marked complete.
3. Reject the batch. In this case the batch moves back to the Annotation mode.

You can post multiple reviews as you perform Quality Check through various workflows. When creating a new review you can view all the reviews created on the batch.

You can also view the Review history directly from the task page, by clicking on the Review history button for the particular batch.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FX4xXQNH1TO31mO8OXOi8%2FScreenshot%20from%202024-02-14%2014-41-09.png?alt=media&amp;token=8fcb8e60-374e-4578-be0f-73085c5ea506" alt=""><figcaption></figcaption></figure>


# Permissions

Users assigned to the parent project of a task can freely access or move any batch into any of the available modes. They can also freely add reviews.

For users only assigned to a batch, the following permissions apply.

### Batch access

| Batch mode                              | User assigned as       |
| --------------------------------------- | ---------------------- |
| Annotation                              | Assignee, Reviewer, QC |
| Validation                              | Reviewer, QC           |
| Quality Check                           | QC                     |
| Completed (All modes active)            | QC                     |
| Completed (Validation mode active)      | Reviewer               |
| Completed (QC mode active)              | QC                     |
| Completed (Only Annotation mode active) | Assignee               |

### Review access

| Modes active                | Allowed to |
| --------------------------- | ---------- |
| All modes active            | QC         |
| Validation mode active      | Reviewer   |
| QC mode active              | QC         |
| Only Annotation mode active | Assignee   |

### Mode change access

| Mode change              | Allowed to                                                           |
| ------------------------ | -------------------------------------------------------------------- |
| Annotation -> Validation | Assignee, Reviewer, QC                                               |
| Annotation -> QC         | Assignee(If no validation mode), Reviewer, QC                        |
| Annotation -> Completed  | Assignee(If no validation and QC modes), Reviewer(If no QC mode), QC |
| Validation -> Annotation | Reviewer, QC                                                         |
| Validation -> QC         | Reviewer, QC                                                         |
| Validation -> Completed  | Reviewer(If no QC mode), QC                                          |
| QC -> Validation         | QC                                                                   |
| QC -> Annotation         | QC                                                                   |
| QC -> Completed          | QC                                                                   |


# Access levels

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fbv5DhUswWlHaJ4AO2oaP%2F6269f40-Mindkosh-app-heirarchy.jpg?alt=media&amp;token=1b2eea3d-d382-4e80-8426-310d1f5244d9" alt="Access levels"><figcaption></figcaption></figure>

Mindkosh supports following types of users, with decreasing levels of permissions.

1. [**Admin**](/management/access-levels/admin)
2. [**User (Project Manager)**](/management/access-levels/user)
3. [**Annotator**](/management/access-levels/annotator)


# Annotator

An annotator cannot access projects, and is only allowed to access tasks where he is assigned to a batch - either as an Annotator, a Reviewer or a Quality Checker.

1. Tasks
   1. Annotators can view Tasks where the annotator is assigned to a batch.
   2. Annotator is not allowed to edit the task, export the annotations or access any Auto-annotate features.
2. Batches
   1. Work on batches assigned to them
3. Issues
   1. Can create issues and comment on them.
4. Review
   1. Annotator can review a batch only he is the Quality Checker assigned to that batch


# User

User type users have total control of projects that they create or are assigned to. They also have all access to tasks that are not within any project. They can

1. Projects
   1. Create projects
   2. Edit/Delete assigned projects
2. Tasks
   1. Create tasks inside assigned projects
   2. Create orphan tasks - tasks without a parent project.
   3. Edit/Delete orphan tasks and tasks within assigned projects.
   4. Export annotations
   5. Run auto-annotate features
   6. Assign users to batches.
3. Issues
   1. Can create issues and comment on them.
4. Review
   1. Can review a batch.

{% hint style="info" %}
These rules only apply if the user is assigned to the project. If they are simply assigned to a batch, they have the same permissions as an annotation type user.
{% endhint %}


# Admin

Has total control over the organization. In addition to everything a user type user can do, Admin users can

1. Organization
   1. Update organization name
   2. Invite new users
   3. Delete existing users/pending invitations
   4. Setup AWS access keys


# Workspace overview

This is the screen where you can label your images/videos. The layout of the annotation workspace depends on the type of task.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FheqKAbkKLke0RVkYPdQ5%2F3821b55-Screenshot_from_2022-04-23_18-49-33.png-mh.png?alt=media&amp;token=ef903102-2081-45de-bc12-c4c037eb9ab6" alt="Annotation workspace"><figcaption></figcaption></figure>

However, ever task will have the following common components.

1. [**Header**](/image-video-annotation/workspace-overview/header)
2. [**Appearance**](/image-video-annotation/workspace-overview/appearance)
3. [**Settings**](/image-video-annotation/workspace-overview/settings)


# Header

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F5klgpxGRxk70uiYivZaY%2F85de8f4-Screenshot_from_2022-06-01_18-02-07.png?alt=media&amp;token=3b1b932f-b246-43c0-9b7f-82dd32bebfc8" alt=""><figcaption></figcaption></figure>

**Menu**

1. Finish the batch - Mark the job as completed.
2. Open task - Open the task the current batch is part of.

**Save** Save progress. Your work is automatically saved at small intervals. You can choose the interval in the settings scree.

**View labeling guide** Open labeling guide associated with the task.

**Navigation**

1. Next/previous buttons -- Go to the next or previous Image/Video frame
2. Image number -- Go to the entered image/Video frame.
3. Navigation behaviour -- Navigate between all images, or just images that have an issue attached to them.

**Batch mode**

1. Label - this indicates whether the current batch is in Annotation, Validation or Completed mode.
2. Submit for review/Complete batch button - Depending on what mode the current batch is in, this button allows you to move the batch to a new mode.

**Annotation mode**

1. [Object Detection](/image-video-annotation/annotation-sections)
2. Classification
3. Attribute Annotation

**Help**

1. User guide - Access this user guide.
2. Start tour - start a virtual tour of the workspace.
3. Contact us - Get in touch with us.

**Fullscreen**

**Close** -- Close the annotation workspace and go to the task page.


# Appearance

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fr4X1Gx6CFcSjsG3EXQgM%2Ff1ecb83-Screenshot_from_2022-06-03_18-50-04_3rd_copy.png?alt=media&amp;token=02c1c2ea-a64e-47e7-9170-c625bc1d0eb3" alt="Appearance section"><figcaption></figcaption></figure>

**Color by label** This is the default behaviour. All objects of the same label will be shown in same color. You can adjust the opacity of objects when they are selected and when they are not selected, by using the slider.

**Color by instance** This option shows all objects in different colors, regardless of their labels.

**Opacity** Opacity of the color mask on all objects

**Selected opacity** Opacity of the color mask on the object that is currently selected.


# Settings

The settings screen is divided into two sections

**Canvas Settings**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FGTUpGmnZ037Qdrl4qXbI%2F0b49116-canvas_settings.png?alt=media&amp;token=a2d68fa6-64d7-4e6c-b610-673a85591150" alt="Settings panel - Canvas settings"><figcaption></figcaption></figure>

1. Enable auto save - Save your work automaticlly
2. Always show object details - Always show the name and other details of a labeled object
3. Automatic bordering - When drawing shared borders for a polygon, highlight exisiting points on the existing polygon, so you can mark the common points.

**Image Settings**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fd2tV07uPnkjN09DCqtp6%2F56c0f14-image_settings.png?alt=media&amp;token=d196d7b8-efb7-41b3-9d55-a666a23d216d" alt="Settings panel - Image settings"><figcaption></figcaption></figure>

1. Select canvas background color - Change the color of the background of the canvas. Default is white.
2. Show grid - Show vertical and horizontal lines dividing the image on the canvas. a. Grid size - number of grid lines to show. b. Grid color - color of the grid lines. c. Grid opacity - opacity of the grid lines.
3. Rotate all images - Rotate all images in the current batch.
4. Brightness, Contract and Saturation settings for the current image.


# Annotation sections

The annotation workspace has the following components in addition to the 3 components common to all labeling modes (Header, Settings and Appearance).

To label an object, simply select a tool from the Tools section, and start marking objects on the image. Once drawn, the objects can be moved across the image. The object can also be edited by right clicking on it, or by using the object card in the right sidebar.

[**Tools section**](/image-video-annotation/annotation-sections/tools-section)

[**Labels**](/image-video-annotation/annotation-sections/labels-section)

[**Objects List**](/image-video-annotation/annotation-sections/objects-list)


# Tools section

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FP6zCZdxPQvf0FLYWkC8Q%2Fimage.png?alt=media&amp;token=09351f46-27f2-41db-b8a1-5ee11b0b29fb" alt=""><figcaption></figcaption></figure>

You can choose what tools to show in the section here, when creating the task. You can also edit an existing task to make such changes.

1. Move - move image/labels
2. Move image - move image only.
3. Fit image to screen - Zoom the screen to fit it within the workspace.
4. Rotate - rotate the image left/right. You can rotate all images in a job from the settings screen.
5. Bounding box - Draw rectangular bounding boxes around objects.
6. Polygon - draw polygons around object boundaries. To close the current shape, either click on an existing vertex in shape or press the "n" key. This tool is also used for marking segmentation boundaries.
7. Cuboid - draw cuboids on the image. You can move individual faces of the cuboid by clicking on the face and moving it. To adjust the height, width and depth, move the edges of the cuboid.
8. Keypoint - Draw keypoint on the image.
9. Polyline - Draw polylines. To finish a polyline, click on an existing point or press 'n'.

### Merge bounding boxes

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FW3HDnXbehuPxtykEh28i%2Fimage.png?alt=media&amp;token=86cce00b-1266-4e5c-b378-ce42d29060c3" alt=""><figcaption></figcaption></figure>

The last tool available in the tools section is the Merge bounding boxes tool. This allows you to merge two or more bounding boxes of the same label into a single bounding box covering the area covered by all the merging boxes.

To use this tool:

1. Select the label for which you would like to merge bounding boxes. All bounding boxes not of this label will be ignored.
2. Click on the Merge bounding boxes tool button.
3. This will create the new bounding box. Note that this also merges text and checkbox attribute values into the new bounding box's attribute. This means that this can be used for merging text entries for [OCR](/image-video-annotation/ocr-annotation-tool).


# Labels section

Easily select, filter or lock label classes for your annotation task

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FJFn0uvei9r36xptGABme%2Fe4c4951-Screenshot_from_2022-06-03_18-50-04_another_copy.png?alt=media&amp;token=fc7fa6a6-290e-43c6-8b00-d21237b29df0" alt="Labels section"><figcaption></figcaption></figure>

&#x20;All your labels show up here.

1. Select a label by clicking on the label section. Once selected, all your objects will be drawn with this label.
2. Clicking on the "eye" icon, hides/shows all objects labeled with this class.
3. Clicking on the "lock" icon locks changes to all objects labeled with this class, so you dont accidentally edit the wrong objects.


# Objects list

See how you can filter, copy, hide and do more with your annotated objects.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FIewUolZjVcRlVlCg7fI0%2Fimage.png?alt=media&amp;token=1e04d906-022b-4e29-bfd5-2940b6833d2a" alt=""><figcaption></figcaption></figure>

The Objects section in the right sidebar shows all labeled objects in the current image.

1. The icon on the left side of each object card shows what kind of object it is - bounding box, polygon, cuboid etc
2. You can also see the source of the annotation (*Manual* or *automatic*) as well as it's unique ID.
3. Within each object card you can
   1. Update the label of the object.
   2. Hide/show the object.
   3. Lock/unlock editing of the object.
   4. Pin the card at the top of the list.
   5. Copy the object. Once copied, it can be pasted anywhere on the image by pressing `ctrl + v`
   6. Copy a link to the object. This can be shared with your team to quickly view the object.
   7. Delete the object
4. Finally, you can also access the attributes, if you have added them.

### Using filters

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FXRZ41v3ZXeydaPYr0Y4P%2Fimage.png?alt=media&amp;token=3f1749f5-d047-408c-bdb2-b2552f93319d" alt=""><figcaption><p>Use filters to only see annotations objects of interest</p></figcaption></figure>

Filters are a powerful way to focus on annotation objects of interest. To gets started, click on the filter icon at the top of the right sidebar. This will bring up the filters window.

1. Hover over the grey area at the center to bring up the *Add rule* button.
2. Click on *Add rule* to add a new filter
3. Choose what property you want to filter by:
   1. Label
   2. Shape - Rectangle(bounding box), polygon, polyline etc.
   3. Type (Track or single annotations)
   4. Width
   5. Height
   6. Attribute values
   7. Object ID
4. Select how you want the values to be checked.
5. Enter the desired value of the property.
6. Click on *Submit* to apply the filter.

{% hint style="info" %}
Filters are really powerful. Experiment with various settings to see what you can do with them!
{% endhint %}


# Rotated bounding boxes

Quick guide on how to annotate images with rotated bounding boxes on the Mindkosh platform.

To create rotated bounding boxes

1. Create a bounding box like you normally would.
2. Click and hold the rotation point (Located inside the bounding box), and move it to rotate the bounding box
3. Hold shift while moving the mouse to *snap* to 5° increments.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FmiLHrt81cMIpuhQHFnTQ%2FScreenshot%20from%202024-01-01%2019-50-30.png?alt=media&amp;token=02e62e33-182d-4269-bf0d-199427244677" alt=""><figcaption><p>To rate a bounding box use the rotate point inside the box (White with black outline)</p></figcaption></figure>

#### Exporting rotated bounding boxes

Currently, exporting rotated bounding boxes is only supported in the CVAT format. All other formats will ignore the rotation and simply include the original non-rotated bounding box co-ordinates.

Support for other formats is being added and will be available soon.


# Cuboids over 2D images

Draw Cuboids with front and back faces over 2D images

While cuboids are inherently 3D objects, you can draw a cuboid with different front and back faces over 2D images in Mindkosh.

To do this, first make sure you've selected the Cuboid tool when creating the task. On the annotation screen, select the cuboid tool.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fa0eoakcHAJ8IlZ18k69N%2F2d-cuboid-labeling-tool.png?alt=media&amp;token=3eb0eb25-e8ea-4025-a4dc-c0cf70d69e9a" alt=""><figcaption></figcaption></figure>

Then draw the cuboid by drawing the *Front* face of the object just like you would draw a 2D bounding box - simply Click on one corner of the face and drag the mouse over to the opposite corner.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FcA4fahyyAA3mp0O0FlxT%2Fdrawing-2d-cuboid-over-image.png?alt=media&amp;token=71f74d09-1e54-4326-86ad-f032afeb656a" alt=""><figcaption></figcaption></figure>

This will result in a cuboid with the front face as drawn by you and a parallel, similar sized back face.

The faces can be moved individually by clicking over each face and moving them to the desired location. You can also adjust the width of the back face. However, as you can see from the image above, you can only adjust one side of the back face. The height of both front and back faces is locked and stays the same.


# Auto-annotation

To auto-annotate your task with bounding boxes, click on the Auto annotation button on the task page.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fc02Akf6sZ3oLprvZhnEC%2FScreenshot%20from%202024-01-01%2020-23-52.png?alt=media&amp;token=0b1972ff-d52b-4c81-8fca-970f0262c511" alt=""><figcaption><p>Auto annotate button on the task page</p></figcaption></figure>

When you click on the Auto-annotate button, you will see a dialog box asking you to map the Model labels with the task labels. Any labels in your task whose name matches the labels that the Model can predict will be auto-populated.&#x20;

For any other labels, simply select the labels from model and from the task, and the returned output will be assigned the correct labels.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Ff9ZCLXQE0OT3AA751Ixk%2FScreenshot%20from%202024-01-01%2020-24-15.png?alt=media&amp;token=36a28192-a2d0-44db-8fae-ad45261b3630" alt=""><figcaption></figcaption></figure>

Please note that you can only schedule 1 auto-annotate run for a task at a time.


# Image segmentation tool

Learn how to perform Image segmentation annotation on Mindkosh.

To work with image segmentation, use the Polygon tool. To make sure the polygon tool is available in the annotation workspace, when creating the task, make sure Object Detection is checked as the type of task, and Polygon is checked as one of the annotation tools you want to use.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FGD3A0O0y3Ez1NowRmDnI%2Fimage.png?alt=media&amp;token=ba4469ca-f776-48f6-9d0b-0ab9b81362d2" alt=""><figcaption></figcaption></figure>

### Semantic and Instance labeling

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FZqNxxSjTyAQWgdEh2CbC%2Fimage.png?alt=media&amp;token=f2f18f30-8561-4a80-9c50-b4072810f205" alt=""><figcaption></figcaption></figure>

When setting up the labels in a task, you can specify if a label is Semantic, Instance or polygon. Only choose polygon if you require overlapping polygons rather than segmentation mask.

Choosing the right type of Mask is important to ensure the output masks are correctly formatted, and helpful features like snapping and merging of overlapping polygons can work properly.

**Snapping**

Both Snapping and Merging are automatically turned on for both Semantic Mask and Instance mask classes. However they work slightly differently for each. For Semantic segmentation classes, only objects of different classes are snapped to a common boundary if they overlap. For Instance Segmentation classes, all objects are snapped to ensure different instances of the same label have properly formed boundaries as well. This essentially amounts to *drawing under* the existing mask.&#x20;

**Merging**

Merging only applies to Semantic Segmentation classes. Objects of the same class are automatically merged into a single object if they overlap. This is intendes to reduce clutter and make managing annotations easier.

Both settings can be manually turned on/off from the Settings on the annotation workspace.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FE9Jt9k9TI8jqGFZ8UlWP%2Fmerging_snapping_settings.png?alt=media&amp;token=4d69a50b-d467-4e9b-9a8f-98dbe765aa4e" alt=""><figcaption></figcaption></figure>

### Creating masks

To start creating a segmentation mask, select the Polygon tool, and click anywhere on the image to add a point to the mask. When the mask is complete, press the `N` key on the keyboard to complete the mask.&#x20;

Instead of clicking to place each point, you can also press and hold the `Shift` key, and simply move your mouse. This will place points at regular intervals all along the path followed by the mouse.

Once created, you can copy the mask and paste it anywhere on the image. This can be helpful when you have multiple objects in the image that have very similar boundaries. To do this, first copy the object by pressing the copy button in object card in the right sidebar. This will create a movable mask outline. When ready, click anywhere in the image to place the copied mask.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FluNwGPYLgouoYmGsIXP1%2FScreenshot%20from%202023-04-10%2018-02-15.png?alt=media&amp;token=1edc174c-7e27-462c-acf8-7d20ebd33ecf" alt="Copy pasting a segmentation mask"><figcaption><p>Copy pasting a segmentation mask</p></figcaption></figure>

### Updating a mask

Once a mask has been created, you can update it in multiple different ways.

1. To **move a an existing point**. simply drag the point using your mouse.
2. To **delete a point**, right click on the point and click on delete in the context menu. When a point is deleted, it's neighboring points are joined to create a new path.
3. To **update part of the mask**
   1. Press and hold the `Shift` key.
   2. Click on the starting point of the path you want to update.
   3. Add the new points.
   4. Click on any existing point of the original mask to close the new path and update the mask.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F2PCUQ81WgSXZnDgzFSJr%2FScreenshot%20from%202023-04-10%2018-07-09.png?alt=media&amp;token=55e160b0-e0de-432b-acd4-62f48a3ac4c5" alt="Editing a mask by adding a new path"><figcaption><p>Editing a mask by adding a new path</p></figcaption></figure>

### Working with Layers

When there are a lot of objects in an image, they can often overlap with each other. While automatic snapping and merging fix this issue, you can also use layers to achieve a similar result. Layers are also useful if you have an object that is completely inside another, in which case the outer object's polygon will completely contain the smaller object. Using layers is the proper way to handle such a situation.

An object in a higher layer (e.g. Layer 1 is higher than Layer 0) will be placed over an object in a lower layer. When an object is placed over another, it effectively *masks it -* hiding any overlapping parts of the object in the lower laye&#x72;*.* By default all objects are drawn in Layer 0. In order to move them to a higher or lower layer, use the two buttons below the Label selection dropdown in the object card.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FPBBKFARVuEoC3NZna42L%2FScreenshot%20from%202023-04-10%2017-56-38.png?alt=media&amp;token=22801e31-7237-42ac-a215-1649ae6d30c9" alt="Arranging objects in layers"><figcaption><p>Objects arranged in layers</p></figcaption></figure>

At any point, if you want to preview the segmentation mask, open the Segmentation sub-menu in the left sidebar, and check "Show segmentation mask".

{% hint style="warning" %}
If you have turned off Snapping from Settings, objects in your image can overlap with each other. In this case, avoid placing overlapping objects in the same layer. Otherwise, exported masks can contain arbitrary order of the objects, placing some masks above others.
{% endhint %}

### Exporting masks

Once the masks have been created, you can export them in many different formats.

To export the annotations as PNG masks, choose Segmentation mask from the export annotations dialog box on the task page. The downloaded files will contain both semantic segmentation as well instance segmentation masks in separate directories. Do note that processing the masks can take some time. You will receive a notification when the export is ready.

If you wish to export the annotations in polygon format - choose one of the following formats.

1. COCO
2. Datumaro
3. Pascal VOC
4. YOLO
5. Mindkosh


# Magic Segment

Guide on using Mindkosh's semi-automatic semantic segmentation tool to quickly label images for segmentation.

The magic segment tool is our automatic segmentation tool to let you draw object boundaries with a few clicks. To use magic segment, make sure you choose Polygon as one of the annotation tools during task creation.

### Magic Segment credits

To use the Magic Segment tool, you need credits. As a free users, you get 50 credits when you sign up. You consume a credit when you create an object boundary. To see the current status of your credits, click on the right arrow in the Segmentation section in the left sidebar. Note that a credit is only consumed if you accept the boundary predicted by the tool. If you wish to buy more credits, please get in touch with us at **<support@mindkosh.com>**

### Creating boundaries automatically

To start creating object boundaries, click on the magic wand icon in the Segmentation section in the left sidebar. Once in this mode, you need to provide positive as well as negative points to the tool in order to create a good object boundary.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FJpxkPTQrvJFqLNj17DsR%2FScreenshot%20from%202023-04-13%2017-35-10-mh.png?alt=media&amp;token=5ae35a5a-ddce-44a0-9599-f4293c28f3aa" alt="The wand icon to activTE Magic Segment"><figcaption><p>The wand icon to activate Magic Segment</p></figcaption></figure>

#### Positive examples

To provide a positive example (a point that lies inside the object), use the `Left mouse button` to click anywhere within the target object. This point will be displayed in green. If the returned boundary is missing some parts of the object, provide another positive point to the tool by clicking anywhere within the left out area.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fj9Qd5A3RqhogJ5vucjXl%2FScreenshot%20from%202023-04-13%2017-41-16.png?alt=media&amp;token=ff0f1d52-2b3f-40a7-b1bd-88f657ee6458" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Processing each positive/negative point takes a few seconds. If you see a loading animation on the Magic wand icon, it means we are processing the request.
{% endhint %}

#### Negative Examples

If the returned boundary includes other objects (parts of image that are not part of the target object), you can provide the tool with a negative example. Use the `Right mouse button` to click anywhere within the extra area to do this. These points will be displayed in red.

#### Completing the mask

To complete the mask, click on the Complete button at the top of the image. In most cases boundaries can be drawn within 4-5 clicks. Here is a video showcasing the Magic Segment tool in action.

{% embed url="<https://youtu.be/jWj7QnIxFYo>" %}


# Video Annotation

Detailed guide on how to quickly annotate videos using automatic interpolation.

All tools available for Image annotation are also available in video annotation. You can use Bounding box, Polygon, Polyline, Keypoint and Cuboid tools to label your objects. You can also create issues, navigate between frames, or switch between Object Detection, Classification and Attribute annotation modes.

### **Video Annotation basics**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fn3SUIRzQma4BFpNFtHPa%2Fad1c2b7-player.png?alt=media&amp;token=68cbdbd8-fd2d-4667-afb4-21c85d03771a" alt="Video player details" width="485"><figcaption><p>The video bar appears at the bottom of the screen in video annotation tasks</p></figcaption></figure>

#### **Skip step**

This is the number of frames that the skip forward or skip backward buttons on either side of the play button, will skip. So if you have 20 set as the skip step, when you press the skip forward button, you will move 20 frames forward. To move a single frame backward or forward use the navigation buttons at the top.

#### **Track Objects**

This switch allows you track an object across the video. In a track, labels on different frames are marked as belonging to the same object moving through the video. When the switch is turned on, any object you label will be labeled in track mode.

In this mode, the object sidebar shows a slightly different object card, as can be seen in the image above. You can move between different frames that the object track is in, using buttons in this card.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FZ6BiLadPGg1gDj9G35oj%2Fvideo-annotation-occluded.png?alt=media&amp;token=4507618c-4c66-4bde-bcf5-7b528f452fb9" alt=""><figcaption><p>A track object card</p></figcaption></figure>

#### Ending a track

When the track is finished (object goes out of view), mark the track's end by clicking on the End track (first button in the object card in the right sidebar) button. This will stop propagating the labels in subsequent frames.

#### Skipping occluded frames

If an object is not visible in a frame but re-appears again a few frames later, you can mark it occluded from the object card as shown in the image above. Occluded objects are displayed with a broken line box, and are not included when exporting the annotations.

### **Automatic Interpolation**

When the track mode is turned on, automatic interpolation is automatically started as soon as you label at-least 2 frames in a track.

Interpolation can be used in two labeling flows:

**Labeling flow 1  (Intermediate interpolation)**

1. Label the first frame in which an object appears.
2. Adjust its position/size in the next frame.
3. Automatic interpolation will now adjust the bounding box in all subsequent frames.
4. If you adjustments in any of the subsequent frames, other frames will also be automatically adjusted.

**Labeling flow 2 (Forward interpolation)**

1. Label the first frame in which an object appears.
2. Skip a few frames.
3. Adjust the bounding box after a few frames.
4. All frames in between will be automatically adjusted.
5. Any subsequent frames will also be adjusted automatically.


# Importing videos

How to import videos for annotation on Mindkosh

### Specifications

**Supported file format**: MP4\
**Video encoding**: H.264 (also referred to as AVC)\
**Frame rate**: <=30 FPS<br>

{% hint style="info" %}
We automatically convert video files with frame rates > 30 , to a frame rate of 30.

In addition, we convert all videos with resolution width >1280, to videos with width 1280, while preserving the aspect ratio. For eg. videos of resolution 1920x1080 will be converted to videos of resolution 1280x720.

When exporting annotations, we automatically scale the annotation co-ordinates, so that they match the original resolution.
{% endhint %}

**Video size**: Maximum file-size of a single video is 500MB. If your video is larger, break it down into smaller videos and upload them separately. There are 2 ways in which you can cut a video:

1. Use a desktop software -there are many downloadable softwares that can cut videos. We recommend using [lossless-cut](https://github.com/mifi/lossless-cut). Here are the download links.\*&#x20;
   1. [Windows App store](https://www.microsoft.com/store/apps/9P30LSR4705L?cid=storebadge\&ocid=badge)
   2. [Mac App store](https://apps.apple.com/app/id1505323402)
   3. [Ubuntu Snap store](https://snapcraft.io/losslesscut)
2. Use the ffmpeg command line tool - <https://ffmpeg.org/>

### **Creating a task with Videos**

To create a task with Video annotation, simply select Video in the Upload data step when creating a new task. Note that a task can only have 1 video.

Once the video upload is complete, you will see the progress on post-processing the video. At this stage (Once upload is complete), you can safely move away from the page, or even close the browser and the video processing will continue on the server. Once the processing is complete, you will see the task populated with batches.

**Creating batches**

When uploading the video, you can also specify the number of batches you want to divide your task into. This will equally divide the video to create batches. Each batch can then be assigned to your team-members.

*\*Disclaimer - We are not involved with lossless-cut in any way. Links are being provided as a convenience and for informational purposes only; they do not constitute an endorsement or an approval by Mindkosh of any of the products, services or opinions of the involved entity. Mindkosh bears no responsibility for the accuracy, legality or content of the external site or for that of subsequent links. Contact the external site for answers to questions regarding its content.*


# OCR Annotation tool

See how you can automatically annotate images for OCR on Mindkosh

To label images for OCR, simply add an attribute to your labels with the *text* type, when creating a task. If you already have the task created, you can also edit it, and add new attributes to existing labels.

If you want to enter multiple entries for each label, you can also add multiple attributes of *text* type to the same label.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fcz2BilnsZowplDMXJel5%2Fimage.png?alt=media&amp;token=621b6faa-8eb5-48d5-a70a-2761efeb38e1" alt=""><figcaption><p>Add a Text type attribute to a label to enable OCR annotation</p></figcaption></figure>

Once the attribute has been added, you can draw bounding boxes over text, and enter free-form text in the attribute. To do this you have a few options:

1. Once the object has been drawn, right click on the annotation, and enter the text in the attribute text box at the bottom of the pop-up.
2. You can also do this through the object annotation cards in the right sidebar. If you don't see the attribute in the card, click the *Details* button to expand the attributes section.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fpk0Vg3mBH1K5dDUj6oLf%2Fimage.png?alt=media&amp;token=e80fa44c-3445-42cf-981d-5937edffa7a3" alt="" width="547"><figcaption></figcaption></figure>

3. If the text you want to enter is long, and does not fit in the small text box, you can bring up the text entry window by clicking on the three dots (...) to the right of the attribute text box.\ <br>

   <figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FMNGABu9wrhTFdptRpYKc%2Fimage.png?alt=media&amp;token=0c7443b3-8518-4572-892b-3dcc98daa90b" alt="" width="458"><figcaption></figcaption></figure>

### Automatic OCR annotation

{% hint style="warning" %}
To access Automatic OCR, you need credits which can be purchased separately. Each automatically annotated image consumes 1 credit. To buy credits, get in touch with our sales team at <sales@mindkosh.com>
{% endhint %}

To automatically detect and label all text in your images:

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FJfSd4mnMV2gfbf6gW73t%2Fauto-ocr-dialog-box.jpg?alt=media&amp;token=4a4c12fc-ed75-4403-ac99-36c130247b32" alt="" width="563"><figcaption><p>The auto-annotate dialog box for OCR</p></figcaption></figure>

1. Click on the *Run automatic OCR* button on the task page.
2. This will open up the label selection window.
   1. **Detect lines -** This will detect all text in form of lines. This is suitable for labeling documents, invoices etc, where text is mostly written as lines. You also need to select what label this text will be assigned, and in which attribute, the text value will be saved.
   2. **Detect tokens** - This will detect all text in form of tokens (words). This is suitable for labeling road signs, small blocks of text etc.
   3. You can also choose to label both. Be careful of doing this, as it will increase the number of objects added to the images, and you might need to remove a lot of unnecessary annotations.
   4. Choose the label which the bounding boxes around text will be assigned.
   5. Choose the attribute (property) where the text will be saved.
3. Depending on the number of images, it might take a few minutes to an hour to process the task. You can check the progress of the annotation on the task page.

{% hint style="info" %}
If you choose to automatically label both lines and tokens, it can be a good idea to use filters to reduce the number of annotations visible on the page. You can apply filters by clicking on the filter icon in the right sidebar. You can learn more about[ how to use filters here.](/image-video-annotation/annotation-sections/objects-list#using-filters)

You can also use the [Merge bounding boxes](/image-video-annotation/annotation-sections/tools-section#merge-bounding-boxes) tool to merge multiple annotations into a single bounding box. The text values are also copied when you merge. You can use this to, for e.g. quickly merge different lines of an address, into a single address object.
{% endhint %}

Merge annotations


# Keyboard shortcuts

### Workspace shortcuts

| Shortcut       | Key binding                | Description |
| -------------- | -------------------------- | ----------- |
| Next frame     | `ArrowRight`               |             |
| Previous frame | `ArrowLeft`                |             |
| Save           | `ctrl+s`                   |             |
| Undo action    | `ctrl+z`                   |             |
| Redo action    | `ctrl+shift+z` OR `ctrl+y` |             |

### Object manipulation

<table><thead><tr><th>Shortcut</th><th width="174.33333333333331">Key binding</th><th>Description</th></tr></thead><tbody><tr><td>Draw next object</td><td><code>N</code></td><td></td></tr><tr><td>Lock/unlock all objects</td><td><code>t+l</code></td><td>Change locked state for all objects in the side bar</td></tr><tr><td>Lock/unlock an object</td><td><code>l</code></td><td>Change locked state for an active object</td></tr><tr><td>Hide/show all objects</td><td><code>t+h</code></td><td>Change hidden state for objects in the side bar</td></tr><tr><td>Hide/show an object</td><td><code>h</code></td><td>Change hidden state for an active object</td></tr><tr><td>Delete object</td><td><code>del</code></td><td>Delete an active object</td></tr><tr><td>Force delete</td><td><code>shift+del</code></td><td>Force delete locked objects</td></tr><tr><td>Copy shape</td><td><code>ctrl+c</code></td><td>Copy shape to internal clipboard</td></tr><tr><td>Paste shape</td><td><code>ctrl+v</code></td><td>Paste copied shape on image</td></tr><tr><td>Propagate object</td><td><code>ctrl+b</code></td><td>Make a copy of the object on the following frames</td></tr><tr><td>Switch automatic bordering</td><td><code>Ctrl</code></td><td>Switch automatic bordering for polygons and polylines during drawing/editing</td></tr></tbody></table>

###

### Image manipulation

| Shortcut             | Key binding    | Description |
| -------------------- | -------------- | ----------- |
| Rotate clockwise     | `ctrl+r`       |             |
| Rotate anticlockwise | `ctrl+shift+r` |             |
| Brightness increase  | `shift+b+=`    |             |
| Brightness decrease  | `shift+b+-`    |             |
| Contrast increase    | `shift+c+=`    |             |
| Contrast decrease    | `shift+c+-`    |             |
| Saturation increase  | `shift+s+=`    |             |
| Saturation decrease  | `shift+s+-`    |             |

<br>


# Sensor fusion interface

Annotate data from multiple sensors like Lidars and cameras


# Point cloud cuboid annotation

There are 3 methods to label cuboids in 3D pointclouds - *Magic Select (Lasso)*, *One-click annotation* and *Click-to-place*. Depending on the use-case, you may find one method most suitable than the others. We describe all of them below.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FCLQKa9zlh5Aj4W0vWAAZ%2FScreenshot%20from%202023-08-19%2012-45-58.png?alt=media&amp;token=94c0ebbd-b8ab-4d77-ba1e-424da68f7889" alt=""><figcaption><p>The draw cuboid tool and the labels section below it</p></figcaption></figure>

### One Click annotation

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F1y2YgHWiU4LU7XApswqL%2FScreenshot%20from%202023-08-19%2012-41-41.png?alt=media&amp;token=658a2822-bfbe-4044-9918-f431efa261c9" alt=""><figcaption><p>When the Draw cuboid tool is selected, you can see a small yellow circle around points as you move over them.</p></figcaption></figure>

Using this method, you can label an object with just one click! To use it:

1. Choose a label for the object from the left sidebar.
2. Select the Draw cuboid tool from the left sidebar.
3. As you move your mouse over the pointcloud, you should now see a small yello circle around the points as you hover over them.
4. Find a point that belongs to the object, make sure you don't accidentally select a point *behind* the object.
5. Hold the `ctrl` key on the keyboard and click on the point.
6. The cuboid should now be drawn.

This method works best when a lot of the points of an object are visible, since it uses clustering to predict the shape of the object. If the object is very sparse, the other methods will work better.

### Magic Select

One click annotation works by using a technique called *clustering.* In some cases, where points of an object are far apart, this may not work. In such cases, you can use the Magic select tool to draw cuboids. Here is how it works:

1. Choose a label for the object from the left sidebar.
2. Select the Draw cuboid tool from the left sidebar.
3. Hold you right mouse button and draw a rough outline slightly *inside* the object.
4. The cuboid should now be drawn

### Click to place

If neither of the two methods described above work well, you can also place a cuboid of specified dimensions anywhere in the point cloud. To do this, simply hold `Shift` and click anywhere in the point cloud.

If you expect your objects to roughly be of the same size - for example, if you are labeling boxes in a warehouse - you can specify the default dimensions when setting up the label ontology. If these reference sizes are set, all cuboids of that label will be drawn with the same reference size. If the sizes are not set, a default size of `1m x 1m x 1m` will be used.&#x20;

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FCac4k5klMYr7o52tBqMp%2Flidar_ontology_label.png?alt=media&amp;token=5c788a9e-450c-46cb-83ff-bb8ec4599732" alt=""><figcaption></figcaption></figure>

### Editing a cuboid

Once drawn you have a few options to edit the cuboid

#### **Using top/side/front views**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Foit8qhQCtyQyYhocUaPI%2FScreenshot%20from%202023-08-19%2012-43-59.png?alt=media&amp;token=ae1fbfcd-0fec-487b-aca9-05b8467d941e" alt=""><figcaption><p>The top, side and front view of an object. The cuboid can be edited by dragging the corners of each plane.</p></figcaption></figure>

When you select an object, it's top, side and front views are shown at the bottom. You can click and drag the corners of these planes to change the dimensions of the cuboid. This is the easiest way to update a drawn cuboid

####

#### **Using the resize panel**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FY8uqq6R1TXBovxDjQyM4%2FScreenshot%20from%202023-08-19%2012-42-26.png?alt=media&amp;token=a0712d64-00b5-4c22-9f46-c7e01af0db01" alt=""><figcaption><p>The resize panel comes up when you select an object.</p></figcaption></figure>

When an object is selected, a resize panel appears over the pointcloud. You can use this to resize, rotate as well as move the cuboid.

**Step size**\
Sometimes you may want to make really large or really precise changes. Using the text box on the right side of each section, you can change the step size for every button press. Setting a lower value will help you make precise changes. Making the step size large will allow you to make large changes quickly.

**Cuboid size section**\
The first two rows in the panel are for updating the length, width and height of a cuboid. There are 6 sets of `+/-` buttons for the 6 faces if the cuboid. For e.g. The set of buttons in the first column and second row, refers to the bottom face of the cuboid.

**Rotation section**\
The third row allows you to rotate the cuboid in the X, Y and Z axes, in anti-clockwise( `+` buttons ) and clockwise( `-` buttons ) directions. At any point, clicking on the Reset button will reset all rotations and bring the cuboid back to 0° in all axes. The default step size is 2° - which means that for each press of the buttons, the cuboid will rotate by 2°. You can change that by entering a new value in the step size text box.

**Translation section**\
This section allows you to move the cuboid in X, Y and Z axes.

### Marking forward facing face

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fy7KOu9yodIWMGAkH0M7k%2Fimage.png?alt=media&amp;token=54f08fc2-a73f-4376-b252-b31df77ea5e4" alt=""><figcaption><p>Use the buttons in the Forward face section to change the face of an object</p></figcaption></figure>

To mark the front facing face(side) of a cuboid, use the Forward face section in the resize panel. Once marked, the front face will be highlighted.

#### Using Keyboard shortcuts

All of the operations listed above can also be performed using convenient keyboard shortcuts. You view a list of the available shortcuts by clicking on the Shortcuts icon at the top, as shown in the image below. You can also view a list of all the shortcuts [here](/3d-pointcloud-annotation/keyboard-shortcuts).<br>

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FKPSX4U0HGTfOlOrOyNMR%2FScreenshot%20from%202023-08-19%2013-58-18.png?alt=media&amp;token=93e66787-503c-4c85-9d17-536c2c101266" alt=""><figcaption><p>The keyboard shortcuts icon</p></figcaption></figure>


# Point cloud Object tracking

Create object tracks to track them across frames and use automatic interpolation to drastically reduce annotation time.

If you want to identify an object that appear across multiple frames and label it with a consistent ID, use tracking. When setting up the ontology, you can mark a label as a `Track` . When you annotate an object with a class marked as Track, it is automatically converted to a Track object. Currently, tracks are only supported for Cuboid annotations.

{% hint style="info" %}
All the usual methods of drawing a cuboid are available for tracks as well.
{% endhint %}

### Label Settings

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FfRGG8wMORXjtU0Dai3Qm%2Flidar_ontology_label.png?alt=media&amp;token=e6d9660d-1b19-4d3d-b342-3a501d220efb" alt=""><figcaption></figcaption></figure>

In addition to marking an object as a track, you can also lock the dimensions of a label and specify its default dimensions.

**Lock dimensions** *(Only applicable to tracks)*

Many objects in the real world are rigid - that is, their shapes and dimensions do not change over time. For example, a car's position and orientation may change over time, but its dimensions will stay the same. When a label's dimensions are locked, all objects of that class will maintain the same dimensions across all frames. If you update the size of an object in one frame, the same size will be automatically applied to all the frames the object appears in. An object with locked dimensions is specified with a lock icon in its annotation card.

**Default dimensions**

You can specify reference dimensions for a label if you expect all objects in your dataset to be of roughly the same size. You can then draw cuboids of this size by holding `Shift` and placing the cuboid anywhere in the point cloud. [More details here.](/3d-pointcloud-annotation/point-cloud-cuboid-annotation#click-to-place)

&#x20;

### Managing a track annotation object

When you draw the initial cuboid in a track, it will be automatically copied to all the subsequent frames. All these cuboids will have the same object ID.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2F8JyTvbkPrXeENDIeBvQZ%2Ftrack-object-card.png?alt=media&amp;token=181c9509-c261-471b-bf23-6857558f9d21" alt=""><figcaption></figcaption></figure>

**Ending a track**

To mark the end of a track, simply click on the *End track* icon - this is the right most icon the tool panel in the bottom section of the card, as shown above. Note that you should end the track in the frame *after* the last frame an object appears in. For example, if a car last appears in frame 12, you should end the track in frame 13.

**Labeling static objects**

If an object appears in multiple frames, but its position relative to the ego-vehicle does not change, you can mark it as a static object by clicking on the Lock button located on the right end of the section with object dimensions.&#x20;

**Occluded objects**

If an object disappears for a frame but is otherwise part of the track, you can mark it as occluded. To do this, use the button to the left the End track button.

**Navigation**

A frame in which you make any changes to an object is called a key-frame. You can navigate between the key-frames by using the next and previous buttons, located either side of the lock icon.

The frames on either side of these navigation icons, take you to the first and last frame of the track.

{% hint style="info" %}
You can hover over any button to display a Tooltip specifying what the button does.
{% endhint %}

### Automatic Interpolation

Automatic interpolation is automatically started as soon as you label at-least 2 frames in a track.

Interpolation can be used in two labeling flows:

\
**Labeling flow 1**

1. Label the first frame in which an object appears.
2. Adjust its position/size in the next frame.
3. Automatic interpolation will now adjust the cuboid in all subsequent frames.
4. If you adjustments in any of the subsequent frames, other frames will also be automatically adjusted.

**Labeling flow 2**

1. Label the first frame in which an object appears.
2. Skip a few frames.
3. Adjust the cuboid/size after a few frames.
4. All frames in between will be automatically adjusted.
5. Any subsequent frames will also be adjusted automatically.


# Point cloud Segmentation

How to perform semantic and instance segmentation annotation for point clouds on Mindkosh.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FuwxZ14UjsvEEfs5QfLJD%2FScreenshot%20from%202025-12-17%2019-41-31.png?alt=media&amp;token=60cc2799-a1d3-4b0e-bbdd-e5df6513d43c" alt=""><figcaption></figcaption></figure>

### Create a new segmentation object

To create a new segmentation object on a pointcloud, you can use the Lasso tool as described below.

1. Choose a label for the object from the left sidebar.
2. Select the Draw segmentation tool from the left sidebar.
3. Hold the Right mouse button, and draw a rough outline around the points you want to select.
4. A segmentation with the selected points is drawn.

### Editing an existing segmentation object

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FC4PIAdaPxC7okMKCfEDz%2Fmindkosh-update-pointcloud-segmentation.png?alt=media&amp;token=9f128c5c-ed1d-4f18-9d61-2530b1712ac6" alt=""><figcaption></figcaption></figure>

1. Select the object.
   1. You can select the object by clicking on the object card on the right.
   2. Or you can also select an object by holding `G`, and clicking on any of its points. Make sure you are in the Move mode to make this work. You can activate the Move mode by clicking the Move tool button from the left sidebar.
2. Hold the Right mouse button, and draw a rough outline around the points you want to add to the object , or you want to remove from the object.
3. The selected points will be highlighted in red. If you want to cancel the operation, press the `ESC` key
4. With the points selected, the `Add points` and `Remove points` buttons will appear inside the object card in the right sidebar.
5. Click on one of the buttons to update the segmentation.

### Moving points from one object to another

If you've already labeled an object, but want to move some of its points to another object, you can simply *draw over* the existing annotation. Mindkosh automatically ensures that each point only belongs to a single object.

1. Select the target segmentation object.
2. Select the points you want to add to this object, even if they belong to an existing object
3. Click on the Add points button in the object's annotation card from the right sidebar
4. The points will be removed from the other object and added to the currently selected one.

### Create segmentation from cuboids

You can also create segmentation objects from cuboids. To do this, first draw a cuboid around the points, then click on the **Create Seg Object** button in the object card from the right. This will add all points within the cuboid to a new Segmentation object.

This can be very handy if your objects are in roughly cuboid shapes, or if you can use [1-click annotation ](/3d-pointcloud-annotation/point-cloud-cuboid-annotation#one-click-annotation)to quickly label objects with cuboids.

### Hide and filter points

When creating annotations for segmentation, it can be helpful to isolate and identify points assigned a certain label.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FdEQZp3EH4SZSoHCETDtE%2Fmindkosh-filter%20pointcloud-points.png?alt=media&amp;token=3ecfcf61-7221-4dc1-964d-e5f306bbb03c" alt=""><figcaption></figcaption></figure>

**Filter points by class**

To entirely hide the points of a certain class, click on the filter icon for that class from the left sidebar. This can be very helpful to annotate to adjacent classes. Once you have labeled an object, you can hide it and proceed with labeling the neighbouring objects.

To aid segmentation of point clouds, we also provide an **All labeled** filter at the end of the label lis&#x74;*.* This will hide or show all labeled points. You can use this quickly see if any points were missed while labeling, while also making it easier to label by reducing clutter.


# Keyboard shortcuts

### Workspace shortcuts

| Shortcut             | Key binding      | Description                                                          |
| -------------------- | ---------------- | -------------------------------------------------------------------- |
| Next frame           | `ArrowRight`     | Go to the next file                                                  |
| Previous frame       | `ArrowLeft`      | Go to the previous file                                              |
| Save                 | `ctrl` + `s`     |                                                                      |
| Pan(move) pointcloud | `W A S D`        | Move around the pointcloud using the WASD keys                       |
| Rotate pointcloud    | `shift` + `WASD` | To rotate the pointcloud, hold the shift key and press the WASD keys |

### Cuboid manipulation

<table><thead><tr><th>Shortcut</th><th width="174.33333333333331">Key binding</th><th>Description</th></tr></thead><tbody><tr><td>Move in +X</td><td><code>x</code> + <code>=</code></td><td>Move cuboid in +X direction</td></tr><tr><td>Move in -X</td><td><code>x</code> + <code>-</code></td><td>Move cuboid in -X direction</td></tr><tr><td>Move in +Y</td><td><code>y</code> + <code>=</code></td><td>Move cuboid in +Y direction</td></tr><tr><td>Move in -Y</td><td><code>y</code> + <code>-</code></td><td>Move cuboid in -Y direction</td></tr><tr><td>Move in +Z</td><td><code>z</code> + <code>=</code></td><td>Move cuboid in +Z direction</td></tr><tr><td>Move in -Z</td><td><code>z</code> + <code>-</code></td><td>Move cuboid in -Z direction</td></tr><tr><td>Roll +</td><td><code>o</code> + <code>=</code></td><td>Rotate cuboid in +X direction</td></tr><tr><td>Roll -</td><td><code>o</code> + <code>-</code></td><td>Rotate cuboid in -X direction</td></tr><tr><td>Pitch +</td><td><code>p</code> + <code>=</code></td><td>Rotate cuboid in +Y direction</td></tr><tr><td>Pitch -</td><td><code>p</code> + <code>-</code></td><td>Rotate cuboid in -Y direction</td></tr><tr><td>Yaw +</td><td><code>i</code> + <code>=</code></td><td>Rotate cuboid in +Z direction</td></tr><tr><td>Yaw -</td><td><code>i</code> + <code>-</code></td><td>Rotate cuboid in -Z direction</td></tr><tr><td>Top face +</td><td><code>t</code> + <code>=</code></td><td>Increase height by moving the top face</td></tr><tr><td>Top face -</td><td><code>t</code> + <code>-</code></td><td>Decrease height by moving the top face</td></tr><tr><td>Under face +</td><td><code>u</code> + <code>=</code></td><td>Increase height by moving the bottom face</td></tr><tr><td>Under face -</td><td><code>u</code> + <code>-</code></td><td>Decrease height by moving the bottom face</td></tr><tr><td>Front face +</td><td><code>f</code> + <code>=</code></td><td>Increase width by moving the front face</td></tr><tr><td>Front face -</td><td><code>f</code> + <code>-</code></td><td>Decrease width by moving the front face</td></tr><tr><td>Back face +</td><td><code>b</code> + <code>=</code></td><td>Increase width by moving the back face</td></tr><tr><td>Back face -</td><td><code>b</code> + <code>-</code></td><td>Decrease width by moving the back face</td></tr><tr><td>Right face +</td><td><code>r</code> + <code>=</code></td><td>Increase length by moving the right face</td></tr><tr><td>Right face -</td><td><code>r</code> + <code>-</code></td><td>Decrease length by moving the right face</td></tr><tr><td>Left face +</td><td><code>l</code> + <code>=</code></td><td>Increase length by moving the left face</td></tr><tr><td>Left face -</td><td><code>l</code> + <code>-</code></td><td>Decrease length by moving the left face</td></tr></tbody></table>

###

<br>


# Point cloud navigation

### Moving around the Point cloud

**Using mouse**

Hold the `left mouse button` to rotate the pointcloud and hold you `middle mouse button`(the button below the scroll wheel) to pan the pointcloud.

**Using Keyboard shortcuts**

Use the `WASD` keys to move around the pointcloud. Hold `shift` and press `WASD` keys to rotate the pointcloud.

**Centering around a point**

To quickly center the view around a particular point, hold `ctrl` and press the `middle mouse button` over the point.

**Zooming in and out**

Use the scroll wheel on your mouse to zoom in or out of the pointcloud.

###

### Different camera views

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FfuTYP4Zt4ZnBoAdGnLe5%2Fnavigation%20(another%20copy).png?alt=media&amp;token=169c6b3a-ec19-471b-9ce9-fe50c4e447af" alt=""><figcaption><p>Preset camera tools</p></figcaption></figure>

You can quickly change the camera view to one of the preset views using the tools from the left sidebar. There are preset camera views for Center, top, behind, left and right angles.

### Distance attenuation

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FWepucdrKnzbAZlbHX6v3%2FScreenshot%20from%202023-11-21%2015-07-08.png?alt=media&amp;token=52447c5f-6f94-4861-a1f8-552f0c967225" alt=""><figcaption><p>Turning distance attenuation on or off</p></figcaption></figure>

With distance attenuation turned on, you will see fewer points when you are far away from them. As you zoom in, more and more points will be visible. This can be a very helpful trick to label large point clouds on older computers. It is turned on by default if the point cloud is large (>500K points).

<div><figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FI3rcpwhN71vnxtpEokFc%2FScreenshot%20from%202023-11-21%2015-06-35.png?alt=media&amp;token=4d785ac6-bec9-4c6c-8f38-8cd87f93f3e3" alt=""><figcaption><p>With Distance attenuation</p></figcaption></figure> <figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FQRpk9FbXxL3uy9JqHmtX%2FScreenshot%20from%202023-11-21%2015-06-40.png?alt=media&amp;token=c08d49f3-5acd-4f37-a0bc-bca432b01388" alt=""><figcaption><p>Without Distance attenuation</p></figcaption></figure></div>

### Changing point size

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Fh2xZzqxh7HPbb9uKKRlK%2FScreenshot%20from%202023-08-19%2016-52-32.png?alt=media&amp;token=cd3d251a-458d-4956-9d74-567a57e70299" alt=""><figcaption><p>Adjusting the point size</p></figcaption></figure>

To change the point size of the pointcloud, click on the point size tool in the left sidebar, and use the slider to adjust the point size.


# Settings

See what settings are available on Mindkosh to help you label point clouds quickly and efficiently.

You can access the settings section by clicking on the gears icon on the bottom left of the annotation page. Once you've made the required change, make sure to click on the *Apply* button to save the settings.

### General Settings

**Show ortho views**

Ortho views help you label cuboids by showing isolated views from top, front and side. When performing annotation for segmentation, these views do not offer any insight - so it may make sense to turn the ortho views off so you have more screen space to label point clouds.

**Color objects by instance**

By default, objects are colored by their class label's colors. When *Color* *by Instance* is checked however, all annotation objects are assigned a unique color regardless of their class label.&#x20;

This can be particularly helpful when labeling tracks, to identify an object across different frames, since each unique track object will have the same color across all frames.

### Coloring point clouds

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FzepvaWR96uSPoRzYrHHi%2Fmindkosh-color-pointclouds.png?alt=media&amp;token=59f07f55-dc2b-40f3-88be-95b96e5f5c9e" alt=""><figcaption></figcaption></figure>

You can add colors to your point cloud based on:

1. Intensity values - Only applicable if the point cloud has intensity values.
2. Height - Points at the same height are colored with the same color.&#x20;
3. Reference camera Images - If you have reference camera images and their calibrations parameters are properly set, you can color the point cloud with colors from the images. This can be incredibly helpful to identify objects in a point cloud.
4. RGB values - If the point cloud natively has colors for each point, you can choose this.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2Ftii76i1FlE971dCZG3OC%2Fmindkosh-pointclouds-colored-with-images.png?alt=media&amp;token=af078242-c3a4-4cda-82aa-3c1ab857ffae" alt=""><figcaption></figcaption></figure>

*Point cloud colored with reference image*

###

### Highlighting points

Use the settings section to highlight points around the ego vehicle. Note that this only highlights the points in question. You can still label anywhere within the point cloud.

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FAltS3FVhehiEMe5UOabl%2Fmindkosh-highlight-points.png?alt=media&amp;token=396716a6-75a4-4d87-bd9b-2a176ef225f0" alt=""><figcaption></figcaption></figure>

**Points within a certain distance**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FxMrNKJblvHuwc58VQ2IN%2FScreenshot%20from%202023-11-21%2015-39-59.png?alt=media&amp;token=4dec6da4-4158-4bad-818e-ca07c2c1e432" alt="" width="375"><figcaption><p>Points highlighted within 25 meters of the ego vehicle</p></figcaption></figure>

To highlight points within a certain distance from the ego vehicle, check the *Limit Distance* option, and enter the distance (in meters) from the ego vehicle you want to highlight.

**Points within a certain FOV**

<figure><img src="https://4219847035-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FaFKXVbOeJ2H3b8HBGVBG%2Fuploads%2FiKXC7ojHvxGXLkI91BX9%2FScreenshot%20from%202023-11-21%2015-40-11.png?alt=media&amp;token=a1731551-c011-4841-98ef-40fc3545c447" alt="" width="375"><figcaption><p>Points highlighted in XZ plane with a 30 FOV in each axis</p></figcaption></figure>

To highlight points within certain Field of view, select one of *XZ* or *YZ*, and then enter the angles(in degrees) in each axis.

For example, if you select *XZ*, and enter 30 in both text boxes, you will highlight points that fall within an angle of 30° in the X axis and 30° in the Z axis on the *XZ* plane.

**Points within the current camera FOV**

You can also highlight points that fall within the FOV of the currently selected reference camera.


# Getting started

How to get started with the Mindkosh SDK

[Github repo](https://github.com/Mindkosh/mindkosh-python-sdk)

[Example scripts](https://github.com/Mindkosh/mindkosh-python-sdk/tree/develop/examples)

[PyPi](https://pypi.org/project/mindkosh/)

### Setting up the SDK

The first thing you need to setup the SDK is a private access token. You can grab one by emailing us at <support@mindkosh.com> or getting in touch with us over Slack/phone.&#x20;

{% hint style="info" %}
Note that SDK access is only available for paid users.
{% endhint %}

Next, you'd want to install the SDK. Mindkosh SDK is available as a Pypi package can be installed using pip like so:

```py
pip install mindkosh
```

The SDK has been tested on Python 3.9 . While it may work on other versions, those haven't been tested and compatibility is not guaranteed. It is recommended that you install mindkosh in a separate python environment.

### Initializing the client

To do anything with the SDK, you first need to create a client using the SDK token. This can be done like so:

```py
## Initialize the client
client = mindkosh.Client(
    token = <"Your token here">,
)
```

You can check if this succeeded by fetching a list of all the tasks in your workspace.

```py
tasks = client.task.get()
print(f"Found {len(tasks)} tasks")
for task in tasks:
    print(task.name)
```


# Uploading data

See how you can upload and manage your datasets on Mindkosh using the SDK

Before you attempt to upload data, make sure you've followed [the steps outlined here](/python-sdk/getting-started) to setup the SDK.

### Uploading data of a single type

```py
from mindkosh import Client

## Upload all image files found in the specified directory
client.upload_data(
    dataset_id=dataset_id,
    resources=['/example_images/'],
    tags=['penguin'] ## optional
)

## Or specify the files to be uploaded
client.upload_data(
    dataset_id=dataset_id,
    resources=[
        '/home/user/Downloads/test1.pcd',
        '/home/user/Downloads/test2.pcd'
    ],
    tags=['forest'] ## optional
)
```

If you would like to specify different tags for each file, you can use the `ImageFile` or `PointCloudFile` objects.

```py
from mindkosh import Client, ImageFile

client.upload_imagefiles(
    dataset_id = dataset_id,
    imagefiles = [
        ImageFile(
            filepath='/path/to/image1',
            tags=["city1"]
        ),
        ImageFile(
            filepath='path/to/image2',
            tags=["city2"]
        )
    ]
)
```

{% hint style="info" %}
It can take up-to 2 minutes for the uploaded files to be processed. Before you create a task with the uploaded data, make sure you've given the files some time to be processed. You can check the UI to see if all the files have been processed and are visible in the dataset.
{% endhint %}

###

### Uploading lidar + camera data

To upload lidar point clouds + reference camera images, create point cloud file objects and specify the camera images as `ImageFile` objects. If available, calibration parameters can be specified as  Extrinsic parameters (For Lidar to camera projection) and Intrinsic (For camera to image projection) parameters. If these parameters have been specified, Mindkosh can automatically project cuboid annotations over reference camera images.

1. `intrinsic` - Specified in `[fx, fy, cx, cy]` form.
2. `extrinsic` - Specified in a 4x4 transformation matrix that can transform a point in the point cloud reference frame to the camera reference frame.
3. `camera_model` - Mindkosh supports two camera models - `PINHOLE` which is the most widely used, and `FISHEYE` . When specifying parameters for Fisheye, the `mirrorParameter` also needs to be set.
4. Parameters are set separately for each camera and for each frame. Even if they stay the same across a scene.
5. `device_id` - A unique number that can be used to identify a camera. This can be any number as long as it is unique across the cameras, and stays the same across frames. For e.g. if you have a left and right camera, you can assign the device ID 1 and 2 to them, across all frames.

{% hint style="danger" %}
**Mindkosh requires all files within a dataset to have unique names. This means that if your camera files have the same names (for e.g. the same `timestamp.png` for both left and right cameras), you will need to rename them by adding camera prefixes, so the names are unique.**
{% endhint %}

```py
from mindkosh import Client, PointCloudFile

pointcloudFrames = []
pcdfile1 = PointCloudFile(
    filepath = '/file/path1/pcd1.pcd',
    related_files = [
        ImageFile(
            filepath='/path/to/image1.png',
            tags=[],
            extra={
                ## Inrinsic camera parameter values specified in this order: 
                ### [fx, fy, cx, cy]
                "intrinsic": [255.520403, 449.883682, 250.828738, 255.237477],

                ## Extrinsic parameters, specifying the 4x4 projection matrix from lidar 
                ## to camera
                "extrinsic": [
                    [-0.735827, -0.65789, -0.0384775, 0],
                    [0.6567956, -0.70452916, 0.00140833, 0],
                    [-0.02255652, -0.0248216, 0.9993586, 0],
                    [0, 0, 0, 1]
                ],

                # Camera projection model - PINHOLE OR FISHEYE
                # For FISHEYE, the mirrorParameter must also be specified
                "cameraModel": "PINHOLE",
                ## Device ID must be unique for each camera.
                "device_id": 1
            }
        )
    ]
)

pointcloudFiles.append(pcdfile1)

client.upload_pointcloud_data(dataset_id=datasetId, pointcloudfiles=pointcloudFrames)
```


# Managing tasks

See how you can create and manage tasks on Mindkosh using the SDK

Once you've created a dataset and uploaded files to it, you can create a task to start annotating.

Here is how you can create a task.

```py
from mindkosh import Client, Label

labelsObjects = [
    mindkosh.Label(
        name="Pedestrian",
        color=hex_codes[0],
        sequence=1,
        attributes=[
            {
                'name': 'Age-group',
                'input_type': 'radio',
                'default_value': 'Adult',
                'mutable': False,
                'values': ['Adult', 'Child']
            }
        ]
    ),
    mindkosh.Label(name="Truck", color=hex_codes[1], sequence=2),
]

newTask = client.task.create(
    name="sample-task",
    labels=labelsObjects,
    dataset_id=datasetId,
    project_id=213,
    job_modes=['validation','qc'],
    batches=3,
    tags=['tag1'],
)
```

### Label properties

<table><thead><tr><th width="183">Property</th><th width="188">Type</th><th width="110">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td>string</td><td>Yes</td><td>Name of the task.</td></tr><tr><td><code>color</code></td><td>string</td><td>Yes</td><td>Color of the label in hex string.</td></tr><tr><td><code>sequence</code></td><td>integer</td><td>Yes</td><td>Order in which the label will appear.</td></tr><tr><td><code>track</code></td><td>boolean</td><td>No</td><td>Whether this label should be tracked across frames.</td></tr><tr><td><code>lock_dimenions</code></td><td>boolean</td><td>No</td><td>Only for tracked labels in Point cloud tasks. If set to true, the dimensions of an object stay the same across all frames. </td></tr><tr><td><code>type</code></td><td><code>non_mask</code> (default), <code>semantic_mask</code> or <code>instance_mask</code></td><td>No</td><td>Whether the label is a Segmentation label.</td></tr><tr><td><code>attributes</code></td><td>array of dictionaries</td><td>No</td><td>See the attributes section below.</td></tr></tbody></table>

#### Label attributes (properties)

Mindkosh supports the following types of attributes:

**Radio button**\
Specify a range of choices from which the labeler can choose only 1.

```py
{
    'name': 'Occlusion',
    'input_type': 'radio',
    'default_value': '0',
    'sequence': 1 ### Similar to label sequence, this specifies the order in which the property appears.
    'mutable': True, ### Only applicable to tracked labels. Can this attribute change from frame to frame?
    'values': ['0', '1', '2']
}
```

**Checkbox**\
Specify an attribute that can take on 2 values - `True` or `False`&#x20;

```py
{
    'name': 'Standing',
    'input_type': 'checkbox',
    'default_value': True,
    'sequence': 1 ### Similar to label sequence, this specifies the order in which the property appears.
    'mutable': True, ### Only applicable to tracked labels. Can this attribute change from frame to frame?
    'values' : ['true']
}
```

**Text**\
Enter freeform text. Can be used for OCR as well.

**Number**

### Task parameters

<table><thead><tr><th width="183">Property</th><th width="188">Type</th><th width="110">Required</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td>string</td><td>Yes</td><td>Name of the task</td></tr><tr><td><code>labels</code></td><td>array of <code>Label</code> objects</td><td>Yes</td><td>Labels </td></tr><tr><td><code>dataset_id</code></td><td>integer</td><td>Yes</td><td>Dataset ID of the dataset from which to create the task.</td></tr><tr><td><code>tags</code></td><td>array of strings</td><td>No</td><td>Create a task from the dataset files that have the specified tags</td></tr><tr><td><code>project_id</code></td><td>integer</td><td>No</td><td>Project ID of an existing project in which this task will be placed.</td></tr><tr><td><code>job_mode</code></td><td><code>['validation']</code> or<br><code>['validation', 'qc']</code></td><td>No</td><td>What annotation modes will be present in the task. By default only the annotation is present.</td></tr><tr><td><code>batches</code></td><td>integer</td><td>No</td><td>How many batches should the task data be divided into</td></tr></tbody></table>


# Upload existing annotations

How to upload existing annotations to tasks using the SDK


# Downloading annotations

How to setup webhooks and download annotations using the Python SDK


# Mindkosh point cloud annotation format

Description of the Mindkosh annotation format for cuboid, polyline and segmentation annotation for point clouds.

### Versioning

1. v1.1 - This format contains annotations from all frames in a single JSON file.
2. v1.2 - This format has separate JSON files for each frame.
3. v2.0 - This format contains the following additional fields:
   1. version
   2. task name

The following description corresponds to format version 2.0. If you have export files of other formats, you can use conversion scripts - `mindkosh1_1tomindkosh2.py`  and  `mindkosh1_2tomindkosh2.py`  (Found in the Python SDK) to convert them into the newer format. All exports created after June 28 2025, will be in format v2.x

### Export structure

#### JSON files

Each frame's annotations are specified in its own JSON file. For example, all cuboid annotations for frame 5 can be found in the `cuboids/5.json` file.

#### File list

The `frames_list.text` contains a list of the frame number and the filename separated by a space. Each frame is specified on a separate line.

#### Label specification

The `label_attrspec.json` file describes the labels and their attributes. Each label is described by an id, name, color, and attributes.

Each attribute is specified by an id, name, input type and default value. Input types can be `radio`, `text`, `number`, `checkbox`.

<figure><img src="https://mindkosh.slite.com/api/files/mzaOT0iqafVnaX/image.png?apiToken=eyJhbGciOiJIUzI1NiIsImtpZCI6IjIwMjMtMDUtMDQifQ.eyJzY29wZSI6Im5vdGUtZXhwb3J0IiwibmlkIjoibklqZmp0clpOM2tVMVIiLCJpYXQiOjE3ODc5MDg2NTMsImlzcyI6Imh0dHBzOi8vc2xpdGUuY29tIiwianRpIjoiemNfWEJzUnFOX20ya3oiLCJleHAiOjE3OTA1MDA2NTN9.ZBdgzu9WwqQgAlTc99S7QvQKSyPjhJ3BLpbQJiZNPqU" alt="image.png"><figcaption></figcaption></figure>

###


# Cuboid annotation format

Description of cuboid annotations exported in the Mindkosh format

Each annotation item is of the form:

```json
{
    "id": <annotation_id - unique for every instance of an object>,
    "track_id": <object id - unique for every object, null if it isnt a track>,
    "objectType": <classname>,
    "h": <height>,
    "w": <width>,
    "l": <length>,
    "keyframe": <Is this frame manually labeled? Applicable only for tracks>
    "item": {
        "tx": <x-co-ordinate of the center>,
        "ty": <y-co-ordinate of the center>,
        "tz": <z-co-ordinate of the center>,
        "rx": <rotation in radians around X-axis>,
        "ry": <rotation in radians around Y-axis>,
        "rz": <rotation in radians around Z-axis>,
        "occlusion": 0,
        "face": <FACE_ID describing which way the object is facing>
    }
    "attributes": [
        {
            "spec_id": <attribute_id>,
            "value": <value of the attribute>
        }
    ]
}
```

#### Face ID

FACE\_ID is encoded as follows. Note that the angle of rotation alone is enough to deduce the front face. FACE\_ID is a redundant field to deduce the same.

| ID | Direction vector |
| -- | ---------------- |
| 0  | +X               |
| 1  | -X               |
| 2  | +Y               |
| 3  | -Y               |
| 4  | +Z               |
| 5  | -Z               |

### Conventions

We follow the same convention as KITTI, with 1 major change - all our values are specified from the point cloud frame, rather than the camera frame.<br>

**Dimensions**<br>

1. Length is measured front-to-back.
2. Width is measured side-to-side
3. Height is measured from top-to-bottom

{% hint style="warning" %}
This assumes that the forward facing faces have been properly marked. By default the face is assumed to be in the positive Y direction (when the cuboid is un-rotated).
{% endhint %}

**Rotation**

Rotation is measured counter-clockwise from the Y axis (of the point cloud). It is always positive.

<figure><img src="https://mindkosh.slite.com/api/files/CsNY0qE5lD9vV_/IMG_0010.JPEG?apiToken=eyJhbGciOiJIUzI1NiIsImtpZCI6IjIwMjMtMDUtMDQifQ.eyJzY29wZSI6Im5vdGUtZXhwb3J0IiwibmlkIjoieFU1YWxtNWxaYVVJSlYiLCJpYXQiOjE3ODc5MDg4MzcsImlzcyI6Imh0dHBzOi8vc2xpdGUuY29tIiwianRpIjoicGo2X3VTSHlUWXhzcTciLCJleHAiOjE3OTA1MDA4Mzd9.SqU3AUsanYcY1xu2o4VmDjITFFaBwwyEbb2oY2x0024" alt="An example scenario when looking at an object top-down. Red axis is X, Green axis is Y."><figcaption><p>An example scenario when looking at an object top-down. Red axis is X, Green axis is Y.</p></figcaption></figure>


# Mindkosh Image annotation format

Details on the Mindkosh annotation format for images


# Image segmentation format

Description of the Mindkosh annotation format for semantic and instance segmentation in images.


# Object detection format

Description of the Mindkosh annotation format for object detection in images.

Image annotations in Mindkosh format contains annotations grouped by the image they are in, and the annotation type, which can be bounding boxes, polygons, polylines and points (keypoints). {

```json
"annotations": {
    "version": "1.1",
    "meta": {
      "task": {
        "labels": [
          {
            "id": 11695,
            "name": "goal_post",
            "attributes": [
              {
                "id": 1757,
                "name": "occlusion",
                "mutable": true,
                "input_type": "checkbox",
                "default_value": "",
                "values": "true\nfalse"
              }
            ]
          }
        ]
      }
    },
    "images": [
      {
        "id": 0,
        "name": "psg_marseille_first_half_1228.png",
        "width": 1280,
        "height": 720,
        "boxes": [
          {
            "id": 3015293,
            "label": 11695,
            "source": "manual",
            "point_order": -1,
            "related_ids": [],
            "created_mode": "annotation",
            "created_by": "sdevgupta",
            "updated_by": "None",
            "xtl": "599.73",
            "ytl": "163.63",
            "xbr": "658.33",
            "ybr": "188.35",
            "rotation": "21.3",
            "z_order": 0,
            "attributes": [
              { "id": 1757, "name": "occlusion", "value": "true" }
            ],
          }
        ]
      }
    ]
  }
}

```

**Property Description**

<table data-search="false"><thead><tr><th width="215"></th><th></th></tr></thead><tbody><tr><td><code>id</code></td><td>Annotation ID. Unique across Mindkosh.</td></tr><tr><td><code>label</code></td><td>Label ID. Can be referenced from the labels section</td></tr><tr><td><code>source</code></td><td>Can be manual, imported or automatic</td></tr><tr><td><code>related_ids</code></td><td>Array of annotation ID of other objects connected with this annotation</td></tr><tr><td><code>created_mode</code></td><td>Which annotation mode this annotation was created in. Can be annotation, validation, qc or completed</td></tr><tr><td><code>created_by</code></td><td>User who created the annotation</td></tr><tr><td><code>updated_by</code></td><td>User who updated the annotation</td></tr><tr><td><code>attributes</code></td><td>key value pairs of attributes if available</td></tr><tr><td><code>rotation</code></td><td>Orientation of a rotated bounding box. Excluded for axis-parallel bounding boxes.</td></tr><tr><td><code>z_order</code></td><td>Layer number of an annotation. Only applicable to polygons</td></tr></tbody></table>

#### Annotation description

<table><thead><tr><th width="150"></th><th></th></tr></thead><tbody><tr><td>boxes</td><td>Described by the top left and bottom right points of the box. <code>xtl, ytl, xbr, ybr</code></td></tr><tr><td>polygons</td><td>Flat array of the points - x<sub>1,</sub> y<sub>1,</sub> x<sub>2</sub>, y<sub>2</sub>, x<sub>3</sub>, y<sub>3.</sub> Last point connects to the first point.</td></tr><tr><td>polylines</td><td>Same as the polygons. Last point does not connect to the first point.</td></tr><tr><td>points</td><td>Flat array of the points</td></tr><tr><td>cuboids</td><td>Described by the top-left and bottom right corners of the front and the back face.<br><code>xtl1, ytl1, xbr1, ybr1, xtl2, ytl2, xbr2, ybr2</code></td></tr></tbody></table>

#### Ordered bounding box

For ordered bounding boxes, the `point_order` property is set to a value between 1 and 8. It can be interpreted as follows:&#x20;

<table data-search="false"><thead><tr><th width="104">Value</th><th>Description</th></tr></thead><tbody><tr><td>-1</td><td>Bounding box was created without point order.</td></tr><tr><td>1</td><td>The top-left corner of an un-rotated bounding-box is the first point. The other points are in clockwise direction.</td></tr><tr><td>2</td><td>The top-right corner of an un-rotated bounding-box is the first point. The other points are in clockwise direction.</td></tr><tr><td>3</td><td>The bottom-right corner of an un-rotated bounding-box is the first point. The other points are in clockwise direction.</td></tr><tr><td>4</td><td>The bottom-left corner of an un-rotated bounding-box is the first point. The other points are in clockwise direction.</td></tr><tr><td>5</td><td>The top-left corner of an un-rotated bounding-box is the first point. The other points are in anti-clockwise direction.</td></tr><tr><td>6</td><td>The top-right corner of an un-rotated bounding-box is the first point. The other points are in anti-clockwise direction.</td></tr><tr><td>7</td><td>The bottom-right corner of an un-rotated bounding-box is the first point. The other points are in anti-clockwise direction.</td></tr><tr><td>8</td><td>The bottom-left corner of an un-rotated bounding-box is the first point. The other points are in anti-clockwise direction.</td></tr></tbody></table>

#### Tracks

Tracks are tracked objects across frames with the same ID. The same object across different frames has different annotation IDs but the same `track_id`.

The property `occluded` specifies if the object is part of the same track but not visible in the current frame.

Additionally the `related_track_ids` describes an array of other tracks that are connected with a particular tracked object.


# Security policy

How we keep your data safe and secure at all times

### **Authentication**

Users can authenticate using their email and password, or through their Gmail accounts using Google sign-in. When you invite users to your organization, the invited user is prompted to set a password before his account is created.

**Password strength**

We require users to have at-least 1 capital letter, a number and a special character in their passwords to protect against weak passwords. We never save passwords in plain-text. All passwords are saved using an industry standard hash protocol which prevents a malicious actor from reverse-engineering a password from the saved hash. We are in the process of setting up 2F authentication, so interested users can opt to enforce 2FA login for all their users.

### **Data Security**

**Encryption of sensitive data**

All cloud access keys are encrypted at rest with AES 128. They are only decryted at the time of using, and never saved in decrypted form. All data is stored on mounted EBS volumes in the Amazon AWS infrastructure, and we leverage all of the platform’s built-in security, privacy and redundancy features.

**Data in transit**

All data that passes through Mindkosh is encrypted. All connections from the browser to the Mindkosh platform are encrypted in transit using TLS SHA-256 with RSA Encryption. Mindkosh requires HTTPS for all services.

### **Risk Management**

**Monitoring**

Logs for all services, including databases, web servers and AI/ML processing servers are backed up every day, and stored on Amazon S3 for a year. All logs are constantly monitored for suspicious activity using a combination of 3rd party vulnerability scanning and our own systems.

**Vulnerability assessment**

We regularly work with security professionals and white-hat hackers to scan our systems for vulnerabilities that might harm our infrastructure or our customers' data and privacy.

**Snapshots**

We snapshot all our systems every 8 hours, and maintain the last 6 snapshots going over the last two days. In case of a security breach, we can restore a working system within minutes.

**Backups**

All our databases are backed up daily, and the last 7 backups are maintained. All EBS volumes are automatically replicated within the same region as part of the standard AWS policy. In addition, we also replicate EBS volumes across regions to protect against AWS services being down in the primary operating region.

**Data Retention**

We retain all data for your organization, for upto 6 months after your subscription expires. If you decide to come back within that time, you will be able to re-use all of that data. You can also download all your data at any point during that 6 month period. If you would like us to delete all your data at any point, let us know at <support@mindkosh.com> and we will be happy to do it for you.

**Compliance**

All our systems are developed with [CIS-Level 1 standards](https://www.cisecurity.org/cis-benchmarks/cis-benchmarks-faq). We are also in the process of getting SOC 2 compliance certification.


