esp-sr/main/multinet_test.c

59 lines
2.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_mn_iface.h"
#include "esp_mn_models.h"
#include "dl_lib_coefgetter_if.h"
#include "multinet_test.h"
#include "dakaidiandeng.h"
static const esp_mn_iface_t *multinet = &MULTINET_MODEL;
void multinetTask(void *arg)
{
model_iface_data_t *model_data = arg;
int audio_chunksize = multinet->get_samp_chunksize(model_data);
int chunk_num = multinet->get_samp_chunknum(model_data);
int16_t *buffer = malloc(audio_chunksize * sizeof(int16_t));
assert(buffer);
int chunks = 0;
while (1) {
if ((chunks+1)*audio_chunksize*sizeof(int16_t) <= sizeof(dakaidiandeng)) {
memcpy(buffer, dakaidiandeng+chunks*audio_chunksize*sizeof(int16_t), audio_chunksize * sizeof(int16_t));
} else {
memset(buffer, 0, audio_chunksize*sizeof(int16_t));
}
int command_id = multinet->detect(model_data, buffer);
chunks++;
if (chunks == chunk_num || command_id > -1) {
if (command_id > -1) {
printf("MN test successfully, Commands ID: %d.\n", command_id);
break;
} else {
printf("can not recognize any speech commands\n");
}
break;
}
}
printf("TEST2 FINISHED\n\n");
multinet->destroy(model_data);
vTaskDelete(NULL);
}
void multinet_test()
{
int start_size = heap_caps_get_free_size(MALLOC_CAP_8BIT);
printf("Start free RAM size: %d\n", start_size);
//Initialize multinet model
model_iface_data_t *model_data = multinet->create(&MULTINET_COEFF, 6000);
//define_speech_commands(multinet, model_data);
printf("multinet RAM size: %d\nRAM size after multinet init: %d\n",
start_size - heap_caps_get_free_size(MALLOC_CAP_8BIT), heap_caps_get_free_size(MALLOC_CAP_8BIT));
xTaskCreatePinnedToCore(&multinetTask, "multinet", 2 * 1024, (void*)model_data, 5, NULL, 1);
}