Input to the run_classifier function
The input to therun_classifier
function is always a signal_t
structure with raw sensor values. This structure has two properties:
total_length
- the total number of values. This should be equal toEI_CLASSIFIER_DSP_INPUT_FRAME_SIZE
(frommodel_metadata.h
). E.g. if you have 3 sensor axes, 100Hz sensor data, and 2 seconds of data this should be 600.get_data
- a function that retrieves slices of data required by the DSP process. This is used in some DSP algorithms (like all audio-based ones) to page in the required data, and thus saves memory. Using this function you can store (f.e.) the raw data in flash or external RAM, and page it in when required.
get_data
function expects floats to be returned, but you can use the int8_to_float and int16_to_float helper functions if your own buffers are int8_t
or int16_t
(useful to save memory). E.g.:
Signal layout for time-series data
Signals are always a flat buffer, so if you have multiple sensor data you’ll need to flatten it. E.g. for sensor data with three axes:Signal layout for image data
The signal for image data is also flattened, starting with row 1, then row 2 etc. And every pixel is a single value in HEX format (RRGGBB). E.g.:Directly quantize image data
If you’re doing image classification and have a quantized model, the data is automatically quantized when reading the data from the signal to save memory. This is automatically enabled when you callrun_impulse
. To control the size of the buffer that’s used to read from the signal in this case you can set the EI_DSP_IMAGE_BUFFER_STATIC_SIZE
macro (which also allocates the buffer statically).
Static allocation
To statically allocate the neural network model, set this macro:EI_CLASSIFIER_ALLOCATION_STATIC=1
EI_TENSOR_LOCATION="<.where_to_allocate>"
- Here,<.where_to_allocate>
can be a memory region such as “.sram,” depending on your target’s linker file.
EI_DSP_IMAGE_BUFFER_STATIC_SIZE=1024