esp32S3使用Edge Impulse实现唤醒词功能时,出现内存溢出错误,不断重启

ERR: Failed to allocate persistent buffer of size 576, does not fit in tensor arena and reached EI_MAX_OVERFLOW_BFER_COUNT

解决方案:

在导出的模型库找到这个文件tflite_learn_**_compiled.cpp;修改 kTensorArenaSize和EI_MAX_OVERFLOW_BUFFER_COUNT

参考配置

EI_MAX_OVERFLOW_BUFFER_COUNT   10到20左右就行

kTensorArenaSize根据自己单片机的ram配置,越大越好

改了之后就正常运行不再重启,如果后续报错

ERR: Failed to allocate scratch buffer of size 6440, reached EI_MAX_SCRATCH_BUFFER_COUNT

Failed to initialize the model (error code 1)     AI 推理错误码:  -6

解决方案:EI_MAX_SCRATCH_BUFFER_COUNT  值改为128,和上面同一个文件

程序正常跑之后还有一个坑,就是你的语音识别标签要对的上,下面代码可以把全部标签的识别值打印出来

Serial.println("模型内部的真实标签=");
    for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
        // 直接打印出模型认识的所有标签名字和对应的分数,不加任何过滤!
        Serial.printf("发现标签: [%s], 当前得分: %.2f\n", result.classification[ix].label, result.classification[ix].value);
    }
    Serial.println("=====================================");

做完这几个细节,所有的坑就踩完了,成功实现kws离线唤醒功能!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐