Uploader
You can upload your existing data samples and datasets to your project directly through the Edge Impulse Studio Uploader.
The uploader signs local files and uploads them to the ingestion service. This is useful to upload existing data samples and entire datasets, or to migrate data between Edge Impulse instances.
The uploader currently handles these types of files:
.cbor
- Files in the Edge Impulse Data Acquisition format. The uploader will not resign these files, only upload them..json
- Files in the Edge Impulse Data Acquisition format. The uploader will not resign these files, only upload them..csv
- Files in the Edge Impulse Comma Separated Values (CSV) format. If you have configured the "CSV wizard", the settings will be used to parse your CSV files..wav
- Lossless audio files. It's recommended to use the same frequency for all files in your data set, as signal processing output might be dependent on the frequency..jpg
and.png
- Image files. It's recommended to use the same ratio for all files in your data set..mp4
and.avi
- Video file. You can then from the studio split this video file into images at a configurable frame per second.
Need more?
If none of these above choices are suitable for your project, you can also have a look at the Transformation blocks to parse your data samples to create a dataset supported by Edge Impulse. See Building your Transformation Blocks
To upload data using the uploader, go to the Data acquisition page and click on the uploader button as shown in the image below:

uploader icon
Bounding boxes?
If you have existing bounding boxes for your images dataset, make sure your project's labeling method is set to Bounding Boxes (object detection), you can change this parameter in your project's dashboard.
Then you need to upload any label files with your images. You can upload object detection datasets in any supported annotation format. Select both your images and the labels file when uploading to apply the labels. The uploader will try to automatically detect the right format.

The visual uploader
Select individual files: This option let you select multiple individual files within a single folder. If you want to upload images with bounding boxes, make sure to also select the label files.
Select a folder: This option let you select one folder, including all the subfolders.
Select which category you want to upload your dataset into. Options can be
training
, testing
or perform an 80/20 split between your data samples.For datasets that are not using bounding boxes, a label can be automatically inferred from the file name, see the Ingestion service documentation. Alternatively, you can also manually set this label directly from the uploader.
Image datasets can be found in a range of different formats. Different formats have different directory structures, and require annotations (or labels) to follow a particular structure. We support uploading data in many different formats in the Edge Impulse Studio.

Dataset annotation formats
Image datasets usually consist of a bunch of image files, and one (or many) annotation files, which provide labels for the images. Image datasets may have annotations that consist of:
- A single-label: each image has a single label
- Bounding boxes: used for object detection; images contain 'objects' to be detected, given as a list of labeled 'bounding boxes'
When you upload an image dataset, we try to automatically detect the format of that data (in some cases, we cannot detect it and you will need to manually select it).
Once the format of your dataset has been selected, click on Upload Data and let the Uploader parse your dataset:

Click upload data

Data uploaded
Leave the data unlabeled, you can manually label your data sample in the studio.
The Edge Impulse object detection acquisition format provides a simple and intuitive way to store images and associated bounding box labels. Folders containing data in this format will take the following structure:
.
├── testing
│ ├── bounding_boxes.labels
│ ├── cubes.23im33f2.jpg
│ ├── cubes.23j3rclu.jpg
│ ├── cubes.23j4jeee.jpg
│ ...
│ └── cubes.23j4k0rk.jpg
└── training
├── bounding_boxes.labels
├── blue.23ijdngd.jpg
├── combo.23ijkgsd.jpg
├── cubes.23il4pon.jpg
├── cubes.23im28tb..jpg
...
└── yellow.23ijdp4o.jpg
2 directories, 73 files
The subdirectories contain image files in JPEG or PNG format. Each image file represents a sample and is associated with its respective bounding box labels in the
bounding_boxes.labels
file.The
bounding_boxes.labels
file in each subdirectory provides detailed information about the labeled objects and their corresponding bounding boxes. The file follows a JSON format, with the following structure:version
: Indicates the version of the label format.files
: A list of objects, where each object represents an image and its associated labels.path
: The path or file name of the image.category
: Indicates whether the image belongs to the training or testing set.- (optional)
label
: Provides information about the labeled objects.type
: Specifies the type of label (e.g., a single label).label
: The actual label or class name of the object.
- (Optional)
metadata
: Additional metadata associated with the image, such as the site where it was collected, the timestamp or any useful information. boundingBoxes
: A list of objects, where each object represents a bounding box for an object within the image.label
: The label or class name of the object within the bounding box.x
,y
: The coordinates of the top-left corner of the bounding box.width
,height
: The width and height of the bounding box.
bounding_boxes.labels
example:{
"version": 1,
"files": [
{
"path": "cubes.23im33f2.jpg",
"category": "testing",
"label": {
"type": "label",
"label": "cubes"
},
"metadata": {
"version": "2023-1234-LAB"
},
"boundingBoxes": [
{
"label": "green",
"x": 105,
"y": 201,
"width": 91,
"height": 90
},
{
"label": "blue",
"x": 283,
"y": 233,
"width": 86,
"height": 87
}
]
},
{
"path": "cubes.23j3rclu.jpg",
"category": "testing",
"label": {
"type": "label",
"label": "cubes"
},
"metadata": {
"version": "2023-4567-PROD"
},
"boundingBoxes": [
{
"label": "red",
"x": 200,
"y": 206,
"width": 74,
"height": 75
},
{
"label": "yellow",
"x": 370,
"y": 245,
"width": 79,
"height": 73
}
]
}
]
}
Want to try it yourself? Check this cubes on a conveyor belt dataset in Edge Impulse Object Detection format. You can also retrieve this dataset from this Edge Impulse public project. Data exported from an object detection project in the Edge Impulse Studio is exported in this format.
The COCO JSON (Common Objects in Context JSON) format is a widely used standard for representing object detection datasets. It provides a structured way to store information about labeled objects, their bounding boxes, and additional metadata.
A COCO JSON dataset can follow this directory structure:
.
├── testing
│ ├── _annotations.coco.json
│ ├── cubes.23im33f2.jpg
│ ├── cubes.23j3rclu.jpg
│ ├── cubes.23j4jeee.jpg
│ ...
│ └── cubes.23j4k0rk.jpg
└── training
├── _annotations.coco.json
├── blue.23ijdngd.jpg
├── combo.23ijkgsd.jpg
├── cubes.23il4pon.jpg
├── cubes.23im28tb..jpg
...
└── yellow.23ijdp4o.jpg
2 directories, 73 files
The
_annotations.coco.json
file in each subdirectory provides detailed information about the labeled objects and their corresponding bounding boxes. The file follows a JSON format, with the following structure:Categories
The "categories" component defines the labels or classes of objects present in the dataset. Each category is represented by a dictionary containing the following fields:
id
: A unique integer identifier for the category.name
: The name or label of the category.- (Optional)
supercategory
: A higher-level category that the current category belongs to, if applicable. Thissupercategory
is not used or imported by the Uploader.
Images
The "images" component stores information about the images in the dataset. Each image is represented by a dictionary with the following fields:
id
: A unique integer identifier for the image.width
: The width of the image in pixels.height
: The height of the image in pixels.file_name
: The file name or path of the image file.
Annotations
The "annotations" component contains the object annotations for each image. An annotation refers to a labeled object and its corresponding bounding box. Each annotation is represented by a dictionary with the following fields:
id
: A unique integer identifier for the annotation.image_id
: The identifier of the image to which the annotation belongs.category_id
: The identifier of the category that the annotation represents.bbox
: A list representing the bounding box coordinates in the format [x, y, width, height].- (Optional)
area
: The area (in pixels) occupied by the annotated object. - (Optional)
segmentation
: The segmentation mask of the object, represented as a list of polygons. - (Optional)
iscrowd
: A flag indicating whether the annotated object is a crowd or group of objects.
Edge Impulse uploader currently doesn't import the
area
, segmentation
, iscrowd
fields._annotations.coco.json
example:{
"info": {
"description": "Cubes on conveyor belt",
"version": "1.0",
"year": 2023,
"contributor": "Edge Impulse",
"date_created": "2023-07-04"
},
"categories": [
{
"id": 0,
"name": "cubes"
},
{
"id": 1,
"name": "green",
"supercategory": "cubes"
},
{
"id": 2,
"name": "blue",
"supercategory": "cubes"
},
{
"id": 3,
"name": "red",
"supercategory": "cubes"
},
{
"id": 4,
"name": "yellow",
"supercategory": "cubes"
}
],
"images": [
{
"id": 0,
"height": 960,
"width": 1280,
"file_name": "cubes.23im33f2.jpg",
"date_captured": "2023-06-29T15:09:34+00:00"
},
{
"id": 1,
"height": 960,
"width": 1280,
"file_name": "cubes.23j3rclu.jpg",
"date_captured": "2023-06-29T15:09:34+00:00"
},
...
],
"annotations": [
{
"id": 1,
"image_id": 0,
"category_id": 2,
"bbox": [321,397,117,113],
"area": 13221,
"segmentation": [],
"iscrowd": 0
},
{
"id": 2,
"image_id": 0,
"category_id": 3,
"bbox": [887,447,132,122],
"area": 16104,
"segmentation": [],
"iscrowd": 0
},
{
"id": 3,
"image_id": 1,
"category_id": 3,
"bbox": [470,529,129,126],
"area": 16254,
"segmentation": [],
"iscrowd": 0
},
...
]
}
The OpenImage dataset provides object detection annotations in CSV format. The
_annotations.csv
file is located in the same directory of the images it references. A class-descriptions.csv
mapping file can be used to give short description or human-readable classes from the MID LabelName
.An OpenImage CSV dataset usually has this directory structure:
.
├── class-descriptions.csv
├── testing
│ ├── _annotations.csv
│ ├── cubes.23im33f2.jpg