Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The official Python SDK for Edge Impulse is designed to help machine learning practitioners build and deploy models for embedded hardware and edge AI applications.
Profile your model to estimate RAM, ROM, and inference speed
Convert your model to C++ to deploy on edge hardware
Interact with Edge Impulse projects to collect data, train models, and deploy them to edge devices
List of versions and changes can be found in this changelog.
Install the Edge Impulse Python SDK:
Estimate RAM, ROM, and inference speed for a variety of hardware platforms:
To learn about the full functionality, see the resources below.
Welcome to the Edge Impulse API, SDKs and Libraries documentation. Here, you will find developer resources to integrate Edge Impulse with your projects, whether you're working on a machine learning prototype or deploying a solution at scale. Our resources are designed to be straightforward and accessible, helping you get your projects up and running with minimal setup. Most of the sections in this documentation are automatically generated. If anything is unclear, please reach out on Edge Impulse Forum or contact your customer success/solution engineer.
If you are looking for our getting started or product guides, tutorials, edge AI hardware targets documentation, you can have a look at the main Edge Impulse documentation.
If you are looking for the libraries and SDKs open source codes, they are hosted on our Github organization.
The Edge Impulse Python SDK is designed to help machine learning practitioners build and deploy models for edge AI hardware targets. Directly from Python scripts, it allows you to collect data, profile and export your models to a C++ Library and much more. See the "deployment options" listed in the return of this function ei.model.list_deployment_targets()
.
It's perfect for integrating into existing Python-based workflows or Jupyter Notebooks.
Quick Start: Install via pip install edgeimpulse
Source Code: GitHub repository
Python package documentation: egdeimpulse python package
Documentation: Python SDK Documentation
Tutorials: Python SDK tutorials
Deploy your trained models using our inferencing SDKs available in multiple programming languages:
C++: Deploy on any device with our optimized C++ library for microcontrollers and embedded systems.
Python (Linux and MacOS): Ideal for prototyping on desktops or devices like the Raspberry Pi.
Node.js (Linux and MacOS): Embed machine learning models into your Node.js applications.
C++ (Linux and MacOS): This library lets you run machine learning models and collect sensor data on Linux machines using C++. You can also use it to generate your .eim
model files.
The remote management server implements a two-way protocol between devices and Edge Impulse, which allows users to control devices (for example to acquire new data) straight from the Studio. Devices can either connect directly to the remote management service over a WebSocket or can connect through a proxy like the serial daemon using the serial protocol. The remote management protocol is not used for data ingestion, as a result, you will need to use the ingestion service for this.
The Serial Protocol enables devices to communicate directly with the Edge Impulse CLI or Studio over a serial connection using AT commands. This makes it easy to send data to your Edge Impulse project for training or inference without needing an internet connection.
The ingestion API is used to send data to Edge Impulse. It's available on both HTTP and HTTPS endpoints and requires an API key to authenticate. It can be used with the remote management protocols or in your data pipelines. The ingestion API works with the available data acquisition formats
For developers looking to integrate Edge Impulse into their systems at a deep level, our OpenAPI specifications provide a comprehensive and detailed view of all the API endpoints. These are ideal for building custom integrations or for developers who need to automate their workflows.
We also provide a Python API-bindings package.
Common base class for all non-exit exceptions.
Parameters
message
Bases
builtins.Exception
builtins.BaseException
Subclasses
edgeimpulse.exceptions.InvalidAuthTypeException
edgeimpulse.exceptions.InvalidDeployParameterException
edgeimpulse.exceptions.InvalidDeviceException
edgeimpulse.exceptions.InvalidEngineException
edgeimpulse.exceptions.InvalidModelException
edgeimpulse.exceptions.InvalidTargetException
edgeimpulse.exceptions.MissingApiKeyException
edgeimpulse.exceptions.TimeoutException
edgeimpulse.exceptions.UnsuccessfulRequestException
edgeimpulse.exceptions.UnsupportedSampleType
Common base class for all non-exit exceptions.
Parameters
message
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when an invalid parameter is passed.
Parameters
msg: str
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when an invalid device is passed.
Parameters
device: str
profile_devices: List[str]
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when an invalid engine is passed.
For a list of valid engines use edgeimpulse.model.list_engines()
.
Parameters
validation_error
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Common base class for all non-exit exceptions.
Parameters
msg: str
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when an invalid target is passed.
For a list of valid targets use edgeimpulse.model.list_deployment_targets()
.
Parameters
deploy_target: str
target_names: List[str]
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Common base class for all non-exit exceptions.
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when a timeout has been reached.
Parameters
msg: str
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Common base class for all non-exit exceptions.
Parameters
error: Optional[str]
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Exception raised when attempting to upload or download a data type that is not supported by Edge Impulse.
Parameters
error: Optional[str]
Bases
edgeimpulse.exceptions.EdgeImpulseException
builtins.Exception
builtins.BaseException
Initialize the Edge Impulse Api.
Parameters
host: str = None
key: str = None
key_type: str = 'api'
Class variables
classify: edgeimpulse_api.api.classify_api.ClassifyApi
Classify samples
client: edgeimpulse_api.api_client.ApiClient
The client used for initializing the apis, use set_client
to update the client
deployment: edgeimpulse_api.api.deployment_api.DeploymentApi
Work with deployment targets
devices: edgeimpulse_api.api.devices_api.DevicesApi
Work with devices in your project
dsp: edgeimpulse_api.api.dsp_api.DSPApi
Work with digital signal processing (feature extraction)
export: edgeimpulse_api.api.export_api.ExportApi
Export datasets and projects
feature_flags: edgeimpulse_api.api.feature_flags_api.FeatureFlagsApi
Enable and disable feature flags
host: str
Edge Impulse studio host (defaults to production)
impulse: edgeimpulse_api.api.impulse_api.ImpulseApi
Work and manage your impulse
jobs: edgeimpulse_api.api.jobs_api.JobsApi
Start and manage long running jobs
learn: edgeimpulse_api.api.learn_api.LearnApi
Work with keras and pretrained models
login: edgeimpulse_api.api.login_api.LoginApi
Login and authenticate
optimization: edgeimpulse_api.api.optimization_api.OptimizationApi
Optimize the model with the eon tuner
organization_blocks: edgeimpulse_api.api.organization_blocks_api.OrganizationBlocksApi
Work with organization blocks
organization_create_project: edgeimpulse_api.api.organization_create_project_api.OrganizationCreateProjectApi
Automate project creation for organizations
organization_data: edgeimpulse_api.api.organization_data_api.OrganizationDataApi
Work with organization data
organization_data_campaigns: edgeimpulse_api.api.organization_data_campaigns_api.OrganizationDataCampaignsApi
Work with organization campaigns
organization_jobs: edgeimpulse_api.api.organization_jobs_api.OrganizationJobsApi
Start run and manage organization jobs
organization_pipelines: edgeimpulse_api.api.organization_pipelines_api.OrganizationPipelinesApi
Work with organization pipelines
organization_portals: edgeimpulse_api.api.organization_portals_api.OrganizationPortalsApi
Create and manage organization portals
organizations: edgeimpulse_api.api.organizations_api.OrganizationsApi
Work with your organizations
performance_calibration: edgeimpulse_api.api.performance_calibration_api.PerformanceCalibrationApi
Calibrate your model with real world data
projects: edgeimpulse_api.api.projects_api.ProjectsApi
Create and manage your projects
raw_data: edgeimpulse_api.api.raw_data_api.RawDataApi
Work with your project data
upload_portal: edgeimpulse_api.api.upload_portal_api.UploadPortalApi
Create and manage data upload portals
user: edgeimpulse_api.api.user_api.UserApi
Manage user activating, creation, updating and information
Authenticate against Edge Impulse.
Parameters
self
key: str
key_type: str = 'api'
host: str = None
Return
None
Retrieve the default project ID from the api key.
Returns: int: The project associated with the api key.
Parameters
self
Return
int
Set the API client and initialize the APIs wit that client.
Parameters
self
client: edgeimpulse_api.api_client.ApiClient
Return
None
Wrapper class for the Edge Impulse data acquisition format.
See here for more information: https://docs.edgeimpulse.com/reference/data-acquisition-format.
Parameters
protected: edgeimpulse.data.sample_type.Protected
payload: edgeimpulse.data.sample_type.Payload
signature: str = None
Class variables
payload: edgeimpulse.data.sample_type.Payload
protected: edgeimpulse.data.sample_type.Protected
signature: str
Wrapper class for the sensor data.
Information about the data acquisition format can be found here: https://docs.edgeimpulse.com/reference/data-acquisition-format.
Parameters
device_type: str
sensors: List[edgeimpulse.data.sample_type.Sensor]
values: List[List[float]]
interval_ms: Optional[int] = 0
device_name: Optional[str] = None
Class variables
device_name: Optional[str]
device_type: str
interval_ms: Optional[int]
sensors: List[edgeimpulse.data.sample_type.Sensor]
values: List[List[float]]
Wrapper class for information about the signature format.
More information can be found here: https://docs.edgeimpulse.com/reference/data-acquisition-format.
Parameters
ver: str = 'v1'
alg: Literal['HS256', 'none'] = 'none'
iat: Optional[int] = None
Class variables
alg: Literal['HS256', 'none']
iat: Optional[int]
ver: str
Wrapper class for sample data, labels, and associated metadata.
Sample data should be contained in a file or file-like object, for example, as the return from open(..., "rb")
. The upload_samples()
function expects Sample objects as input.
Parameters
data: io.BufferedIOBase
filename: Optional[str] = None
category: Optional[Literal['training', 'testing', 'anomaly', 'split']] = 'split'
label: Optional[str] = None
bounding_boxes: Optional[Sequence[dict]] = None
metadata: Optional[dict] = None
sample_id: Optional[int] = None
structured_labels: Optional[Sequence[dict]] = None
Class variables
bounding_boxes: Optional[Sequence[dict]]
category: Optional[Literal['training', 'testing', 'anomaly', 'split']]
data: io.BufferedIOBase
filename: Optional[str]
label: Optional[str]
metadata: Optional[dict]
sample_id: Optional[int]
structured_labels: Optional[Sequence[dict]]
Wrapper for the response from the Edge Impulse ingestion service when retrieving sample information.
Parameters
sample_id: Optional[int] = None
filename: Optional[str] = None
category: Optional[str] = None
label: Optional[str] = None
Class variables
category: Optional[str]
filename: Optional[str]
label: Optional[str]
sample_id: Optional[int]
Wrapper for the response from the Edge Impulse ingestion service when uploading a sample along with the sample that was uploaded.
Parameters
sample: edgeimpulse.data.sample_type.Sample
response: dict
Represents a sensor in the Edge Impulse data acquisition format.
Note: The units must comply with the SenML units list: https://www.iana.org/assignments/senml/senml.xhtml
Parameters
name: str
units: Literal['m', 'kg', 'g', 's', 'A', 'K', 'cd', 'mol', 'Hz', 'rad', 'sr', 'N', 'Pa', 'J', 'W', 'C', 'V', 'F', 'Ohm', 'S', 'Wb', 'T', 'H', 'Cel', 'lm', 'lx', 'Bq', 'Gy', 'Sv', 'kat', 'm2', 'm3', 'l', 'm/s', 'm/s2', 'm3/s', 'l/s', 'W/m2', 'cd/m2', 'bit', 'bit/s', 'lat', 'lon', 'pH', 'dB', 'dBW', 'Bspl', 'count', '/', '%', '%RH', '%EL', 'EL', '1/s', '1/min', 'beat/min', 'beats', 'S/m', 'B', 'VA', 'VAs', 'var', 'vars', 'J/m', 'kg/m3', 'deg', 'NTU', 'rgba'] = 'm/s'
Class variables
name: str
units: Literal['m', 'kg', 'g', 's', 'A', 'K', 'cd', 'mol', 'Hz', 'rad', 'sr', 'N', 'Pa', 'J', 'W', 'C', 'V', 'F', 'Ohm', 'S', 'Wb', 'T', 'H', 'Cel', 'lm', 'lx', 'Bq', 'Gy', 'Sv', 'kat', 'm2', 'm3', 'l', 'm/s', 'm/s2', 'm3/s', 'l/s', 'W/m2', 'cd/m2', 'bit', 'bit/s', 'lat', 'lon', 'pH', 'dB', 'dBW', 'Bspl', 'count', '/', '%', '%RH', '%EL', 'EL', '1/s', '1/min', 'beat/min', 'beats', 'S/m', 'B', 'VA', 'VAs', 'var', 'vars', 'J/m', 'kg/m3', 'deg', 'NTU', 'rgba']
Response from the Edge Impulse server when uploading multiple samples.
Parameters
successes: List[edgeimpulse.data.sample_type.SampleIngestionResponse]
fails: List[edgeimpulse.data.sample_type.SampleIngestionResponse]
Check the current state of the tuner and optionally waits until the tuner has completed.
Parameters
timeout_sec=60
wait_for_completion=True
Return
edgeimpulse_api.models.optimize_state_response.OptimizeStateResponse
Retrieve and print logs for the tuner coordinator job.
Returns: None
Parameters
limit: int = 500
Return
None
Retrieve and print logs for the tuner job.
Returns: None
Parameters
limit: int = 500
Return
None
Replace the current impulse configuration with the one used by the trial.
Parameters
trial_id: str
Return
edgeimpulse_api.models.start_job_response.StartJobResponse
Start a tuner job with custom configuration.
Parameters
config: edgeimpulse_api.models.optimize_config.OptimizeConfig
Return
edgeimpulse_api.models.start_job_response.StartJobResponse
Start the EON tuner with default settings. Use start_custom_tuner
to specify config.
Parameters
target_device: str
classification_type: str
dataset_category: str
target_latency: int
tuning_max_trials: int = None
name: str = None
Return
edgeimpulse_api.models.start_job_response.StartJobResponse
Get a tuner trial report dataframe with model metrics and block configuration.
This method needs pandas to be installed.
Generate a dataframe on the tuner trials including used input, model, learn block configuration and model validation metrics.
Parameters
state: edgeimpulse_api.models.optimize_state_response.OptimizeStateResponse
Wrapper class for sample data, labels, and associated metadata.
Sample data should be contained in a file or file-like object, for example, as the return from open(..., "rb")
. The upload_samples()
function expects Sample objects as input.
Parameters
data: io.BufferedIOBase
filename: Optional[str] = None
category: Optional[Literal['training', 'testing', 'anomaly', 'split']] = 'split'
label: Optional[str] = None
bounding_boxes: Optional[Sequence[dict]] = None
metadata: Optional[dict] = None
sample_id: Optional[int] = None
structured_labels: Optional[Sequence[dict]] = None
Class variables
bounding_boxes: Optional[Sequence[dict]]
category: Optional[Literal['training', 'testing', 'anomaly', 'split']]
data: io.BufferedIOBase
filename: Optional[str]
label: Optional[str]
metadata: Optional[dict]
sample_id: Optional[int]
structured_labels: Optional[Sequence[dict]]
Delete all samples in a given category.
If category is set to None
, all samples in the project are deleted.
Parameters
category: Optional[str] = None
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
Return
Optional[edgeimpulse_api.models.generic_api_response.GenericApiResponse]
Delete a particular sample from a project given the sample ID.
Parameters
sample_id: int
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
Return
Optional[edgeimpulse_api.models.generic_api_response.GenericApiResponse]
Delete any samples from an Edge Impulse project that match the given filename.
Note: the filename
argument must not include the original extension. For example, if you uploaded a file named my-image.01.png
, you must provide the filename
as my-image.01
.
Parameters
filename: str
category: Optional[str] = None
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
Return
Optional[Tuple[edgeimpulse_api.models.generic_api_response.GenericApiResponse]]
Download samples by their associated IDs from an Edge Impulse project.
Downloaded sample data is returned as a DownloadSample
object, which contains the raw data in a BytesIO object along with associated metadata.
Important! All time series data is returned as a JSON file (in BytesIO format) with a timestamp column. This includes files originally uploaded as CSV, JSON, and CBOR. Edge Impulse Studio removes the timestamp column in any uploaded CSV files and computes an estimated sample rate. The timestamps are computed based on the sample rate, will always start at 0, and will be in milliseconds. These timestamps may not be the same as the original timestamps in the uploaded file.
Parameters
sample_ids: Union[int, Sequence[int]]
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
max_workers: Optional[int] = None
show_progress: Optional[bool] = False
pool_maxsize: Optional[int] = 20
pool_connections: Optional[int] = 20
Return
List[edgeimpulse.data.sample_type.Sample]
Given an ID for a sample in a project, return the filename associated with that sample.
Note that while multiple samples can have the same filename, each sample has a unique sample ID that is provided by Studio when the sample is uploaded.
Parameters
sample_id: int
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
Return
Optional[str]
Get the sample IDs and filenames for all samples in a project, filtered by category, labels, and/or filename.
Note that filenames are given by the root of the filename when uploaded. For example, if you upload my-image.01.png
, it will be stored in your project with a hash, such as my-image.01.png.4f262n1b.json
. To find the ID(s) that match this sample, you must provide the argument filename=my-image.01
. Notice the lack of extension and hash.
Because of the possibility for multiple samples (i.e. different sample IDs) with the same filename, we recommend providing unique filenames for your samples when uploading.
Parameters
filename: Optional[str] = None
category: Optional[str] = None
labels: Optional[str] = None
api_key: Optional[str] = None
num_workers: Optional[int] = 4
timeout_sec: Optional[float] = None
Return
List[edgeimpulse.data.sample_type.SampleInfo]
Extract label and category information from the filename and assigns them to the sample object.
Files should look like this myfiles/training/wave.1.cbor where wave is label and training is the category.
Parameters
sample
file
Return
None
Convert numpy values to a sample that can be uploaded to Edge Impulse.
Parameters
values
sensors: Sequence[edgeimpulse.data.sample_type.Sensor]
sample_rate_ms: int
Return
edgeimpulse.data.sample_type.Sample
Convert a dataframe to a single sample. Can handle both timeseries and non-timeseries data.
In order to be inferred as timeseries it must have:
More than one row
A sample rate or an index from which the sample rate can be inferred
Therefore must be monotonically increasing
And int or a date
Parameters
df
sample_rate_ms: Optional[int] = None
label: Optional[str] = None
filename: Optional[str] = None
axis_columns: Optional[List[str]] = None
metadata: Optional[dict] = None
category: Literal['training', 'testing', 'split'] = 'split'
Return
edgeimpulse.data.sample_type.Sample
Upload a directory of files to Edge Impulse.
The files can be in CBOR, JSON, image, or WAV file formats. You can read more about the different file formats accepted by the Edge Impulse ingestion service here:
https://docs.edgeimpulse.com/reference/ingestion-api
Parameters
directory: str
category: str = None
label: str = None
metadata: dict = None
transform: Optional[<built-in function callable>] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload samples from a downloaded Edge Impulse dataset and preserving the info.labels
information.
Use this when you've exported your data in the studio.
Parameters
directory: str
transform: Optional[<built-in function callable>] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload numpy arrays as timeseries using the Edge Impulse data acquisition format.
Parameters
data
labels: Sequence[str]
sensors: Sequence[edgeimpulse.data.sample_type.Sensor]
sample_rate_ms: int
metadata: dict = None
category: Literal['training', 'testing', 'split'] = 'split'
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload non-timeseries data to Edge Impulse where each dataframe row becomes a sample.
Parameters
df
feature_cols: List[str]
label_col: str = None
category_col: Optional[str] = None
metadata_cols: Optional[List[str]] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload a dataframe to Edge Impulse where each of columns represent a value in the timeseries data and the rows become the individual samples.
Parameters
df
sample_rate_ms: int
data_col_start: Optional[int] = None
label_col: Optional[str] = None
category_col: Optional[str] = None
metadata_cols: List[str] = None
data_col_length: Optional[int] = None
data_axis_cols: List[str] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload a dataframe where the rows contain multiple samples and timeseries data for those samples.
It uses a group_by
in order to detect what timeseries value belongs to which sample.
Parameters
df
timestamp_col: str
group_by: str
feature_cols: List[str]
label_col: Optional[str] = None
category_col: Optional[str] = None
metadata_cols: Optional[List[str]] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload a single dataframe sample.
Upload a single dataframe sample to Edge Impulse.
Parameters
df
label: str = None
sample_rate_ms: int = None
filename: str = None
axis_columns: Optional[List[str]] = None
metadata: Optional[dict] = None
category: Literal['training', 'testing', 'split'] = 'split'
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload a directory of files to Edge Impulse.
The samples can be in CBOR, JSON, image, or WAV file formats.
Parameters
directory: str
category: str = None
label: str = None
metadata: dict = None
transform: Optional[<built-in function callable>] = None
Return
edgeimpulse.data.sample_type.UploadSamplesResponse
Upload one or more samples to an Edge Impulse project using the ingestion service.
Each sample must be wrapped in a Sample
object, which contains metadata about that sample. Give this function a single Sample
or a sequence of Sample
objects to upload to your project. The data
field of the Sample
must be a raw binary stream, such as a BufferedIOBase object (which you can create with the open(..., "rb")
function).
Parameters
samples: Union[edgeimpulse.data.sample_type.Sample, Sequence[edgeimpulse.data.sample_type.Sample]]
allow_duplicates: Optional[bool] = False
api_key: Optional[str] = None
timeout_sec: Optional[float] = None
max_workers: Optional[int] = None
show_progress: Optional[bool] = False
pool_maxsize: Optional[int] = 20
pool_connections: Optional[int] = 20
Return
edgeimpulse.data.sample_type.UploadSamplesResponse