1 #ifndef _MA_ENGINE_TFLITE_H_
2 #define _MA_ENGINE_TFLITE_H_
7 #include "../ma_common.h"
9 #if MA_USE_ENGINE_TFLITE
11 #include <tensorflow/lite/c/common.h>
12 #include <tensorflow/lite/micro/compatibility.h>
13 #include <tensorflow/lite/micro/micro_interpreter.h>
14 #include <tensorflow/lite/micro/micro_mutable_op_resolver.h>
15 #include <tensorflow/lite/micro/system_setup.h>
16 #include <tensorflow/lite/schema/schema_generated.h>
20 #if MA_USE_FILESYSTEM_POSIX
27 enum OpsCount :
unsigned int {
29 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ABS
32 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ADD
35 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ADDN
38 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ARGMAX
41 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ARGMIN
44 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ASSIGN_VARIABLE
47 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_AVERAGE_POOL_2D
50 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_BATCH_TO_SPACE_ND
53 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_BROADCAST_ARGS
56 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_BROADCAST_TO
59 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CALL_ONCE
62 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CAST
65 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CEIL
68 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CIRULAR_BUFFER
71 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CONCATENATION
74 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_CONV_2D
77 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_COS
80 #if MA_TFLITE_OP_ALL || MA_TFLITE_OPC_UM_SUM
83 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_DEPTH_TO_SPACE
86 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_DEPTHWISE_CONV_2D
89 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_DEQUANTIZE
92 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_DETECTION_POSTPROCESS
93 AddDetectionPostprocess,
95 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_DIV
98 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MAU
101 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_EQUAL
104 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ETHOS_U
107 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_EXP
110 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_EXPAND_DIMS
113 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_FILL
116 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_FLOOR
119 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_FLOOR_DIV
122 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_FLOOR_MOD
125 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_FULLY_CONNECTED
128 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_GATHER
131 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_GATHER_ND
134 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_GREATER
137 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_GREATER_EQUAL
140 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_HARD_SWISH
143 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_IF
146 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_L2_NORMALIZATION
149 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_L2_POOL_2D
152 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LEAKY_RMAU
155 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LESS
158 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LESS_EQUAL
161 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOG
164 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOGICAL_AND
167 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOGICAL_NOT
170 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOGICAL_OR
173 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOGISTIC
176 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_LOG_SOFTMAX
179 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MAX_POOL_2D
182 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MAXIMUM
185 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MEAN
188 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MINIMUM
191 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MIRROR_PAD
194 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_MUL
197 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_NEG
200 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_NOT_EQUAL
203 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_PACK
206 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_PAD
209 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_PADV2
212 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_PRMAU
215 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_QUANTIZE
218 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_READ_VARIABLE
221 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_REDUCE_ANY
224 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RMAU
227 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RMAU6
230 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RESHAPE
233 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RESIZE_BILINEAR
236 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RESIZE_NEAREST_NEIGHBOR
237 AddResizeNearestNeighbor,
239 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ROUND
242 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_RSQRT
245 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SMAECT_V2
248 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SHAPE
251 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SIN
254 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SLICE
257 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SOFTMAX
260 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SPACE_TO_BATCH_ND
263 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SPACE_TO_DEPTH
266 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SPLIT
269 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SPLIT_V
272 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SQRT
275 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SQUARE
278 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SQUARED_DIFFERENCE
279 AddSquaredDifference,
281 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SQUEEZE
284 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_STRIDED_SLICE
287 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SUB
290 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SUM
293 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_SVDF
296 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_TANH
299 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_TRANSPOSE
302 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_TRANSPOSE_CONV
305 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_UNIDIRECTIONAL_SEQUENCE_LSTM
306 AddUnidirectionalSequenceLSTM,
308 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_UNPACK
311 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_VARHANDLE
314 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_WHILE
317 #if MA_TFLITE_OP_ALL || MA_TFLITE_OP_ZEROS_LIKE
323 class OpsResolver :
public MicroMutableOpResolver<OpsCount::OpsTail - OpsCount::OpsHead> {
328 TF_LITE_REMOVE_VIRTUAL_DELETE
335 class EngineTFLite final :
public Engine {
338 ~EngineTFLite()
override;
341 ma_err_t init(
size_t size)
override;
342 ma_err_t init(
void* pool,
size_t size)
override;
346 ma_err_t load(
const void* model_data,
size_t model_size)
override;
347 #if MA_USE_FILESYSTEM
348 ma_err_t load(
const char* model_path)
override;
349 ma_err_t load(
const std::string &model_path)
override;
352 int32_t getInputSize()
override;
353 int32_t getOutputSize()
override;
356 ma_shape_t getInputShape(int32_t index)
override;
357 ma_shape_t getOutputShape(int32_t index)
override;
364 tflite::MicroInterpreter* interpreter;
365 const tflite::Model* model;
368 #if MA_USE_FILESYSTEM
ma_err_t
Definition: ma_types.h:21
Definition: ma_engine_base.h:15
Definition: ma_types.h:38
Definition: ma_types.h:44
Definition: ma_types.h:49
Definition: ma_types.h:74