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 = &micro_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)。
  • 将特征值归一化后填入输入张量。
  1. 执行推理并获取结果
    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];
      }
    }
    // 根据索引映射标签