TinyML:在微控制器上运行 AI
FreeGuideOnline
最新
2026-07-02
cpp // 使用 xxd 命令: xxd -i model.tflite > model.h // 或者直接粘贴模型字节到数组 extern const unsigned char g_model[]; extern const int g_model_len;
3. **初始化解释器**:
```cpp
static tflite::MicroErrorReporter micro_error_reporter;
static tflite::ErrorReporter* error_reporter = µ_error_reporter;
static const tflite::Model* model = tflite::GetModel(g_model);
static tflite::MicroMutableOpResolver<6> resolver;
resolver.AddDepthwiseConv2D();
resolver.AddFullyConnected();
resolver.AddReshape();
resolver.AddSoftmax();
static tflite::MicroInterpreter static_interpreter(model, resolver, tensor_arena, kTensorArenaSize);
tensor_arena 是预分配的字节数组,大小通常需要 16-32 KB,可在实验中调整。
4. 音频预处理:
- 使用板载 PDM 库获取 16 kHz 单声道样本。
- 每 20 ms 生成一帧频谱,缓存 1 秒(49 帧)组成输入特征图(40 x 49)。
- 将特征值归一化后填入输入张量。
- 执行推理并获取结果:
TfLiteStatus invoke_status = interpreter->Invoke(); TfLiteTensor* output = interpreter->output(0); int max_index = 0; float max_score = output->data.f[max_index]; for (int i = 1; i < output->dims->data[1]; ++i) { if (output->data.f[i] > max_score) { max_index = i; max_score = output->data.f[i]; } } // 根据索引映射标签