mirror of
https://github.com/espressif/esp-sr.git
synced 2025-09-15 15:28:44 +08:00
test: add more test case for multinet
This commit is contained in:
parent
687a9aeb5f
commit
32d1339772
@ -202,7 +202,7 @@ class IdfPytestEmbedded:
|
||||
for item in items:
|
||||
# default timeout 5 mins
|
||||
if 'timeout' not in item.keywords:
|
||||
item.add_marker(pytest.mark.timeout(5 * 60))
|
||||
item.add_marker(pytest.mark.timeout(8 * 60))
|
||||
|
||||
# filter all the test cases with "--target"
|
||||
if self.target:
|
||||
|
||||
@ -125,6 +125,88 @@ TEST_CASE("multinet cpu loading", "[mn]")
|
||||
TEST_ASSERT_EQUAL(true, mn_state == ESP_MN_STATE_DETECTED);
|
||||
}
|
||||
|
||||
TEST_CASE("multinet set commands and detect", "[mn]")
|
||||
{
|
||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
||||
srmodel_list_t *models = esp_srmodel_init("model");
|
||||
char *model_name = esp_srmodel_filter(models, ESP_MN_PREFIX, NULL);
|
||||
esp_mn_iface_t *multinet = esp_mn_handle_from_name(model_name);
|
||||
|
||||
model_iface_data_t *model_data = multinet->create(model_name, 6000);
|
||||
int frequency = multinet->get_samp_rate(model_data);
|
||||
int audio_chunksize = multinet->get_samp_chunksize(model_data) * sizeof(int16_t);
|
||||
char *lang = multinet->get_language(model_data);
|
||||
esp_mn_commands_update_from_sdkconfig(multinet, model_data);
|
||||
unsigned char* data = NULL;
|
||||
size_t data_size = 0;
|
||||
if (strcmp(lang, ESP_MN_ENGLISH) == 0) {
|
||||
data = (unsigned char*)tell_me_a_joke;
|
||||
data_size = sizeof(tell_me_a_joke);
|
||||
printf("commands: tell me a joke, size:%d\n", data_size);
|
||||
} else if(strcmp(lang, ESP_MN_CHINESE) == 0) {
|
||||
data = (unsigned char*)da_kai_kong_tiao;
|
||||
data_size = sizeof(da_kai_kong_tiao);
|
||||
printf("commands: da kai kong tiao, size:%d\n", data_size);
|
||||
}
|
||||
|
||||
int16_t *buffer = (int16_t *) malloc(audio_chunksize);
|
||||
int chunks = 0;
|
||||
struct timeval tv_start, tv_end;
|
||||
gettimeofday(&tv_start, NULL);
|
||||
esp_mn_state_t mn_state;
|
||||
esp_mn_error_t *error_phrases = NULL;
|
||||
esp_mn_commands_clear();
|
||||
|
||||
if (strcmp(lang, ESP_MN_ENGLISH) == 0) {
|
||||
if (strcmp(model_name, "mn5q8_en") == 0) {
|
||||
esp_mn_commands_add(1, "TfL Mm c qbK");
|
||||
esp_mn_commands_add(2, "Sgl c Sel");
|
||||
} else {
|
||||
esp_mn_commands_add(1, "TELL ME A JOKE");
|
||||
esp_mn_commands_add(2, "SING A SONG");
|
||||
}
|
||||
error_phrases = esp_mn_commands_update();
|
||||
} else if(strcmp(lang, ESP_MN_CHINESE) == 0) {
|
||||
esp_mn_commands_add(1, "da kai kong tiao");
|
||||
esp_mn_commands_add(2, "guan bi kong tiao");
|
||||
error_phrases = esp_mn_commands_update();
|
||||
} else {
|
||||
printf("Invalid language\n");
|
||||
}
|
||||
multinet->print_active_speech_commands(model_data);
|
||||
|
||||
while (1) {
|
||||
if ((chunks + 1)*audio_chunksize <= data_size) {
|
||||
memcpy(buffer, data + chunks * audio_chunksize, audio_chunksize);
|
||||
} else {
|
||||
memset(buffer, 0, audio_chunksize);
|
||||
}
|
||||
mn_state = multinet->detect(model_data, buffer);
|
||||
if (mn_state == ESP_MN_STATE_DETECTED) {
|
||||
esp_mn_results_t *mn_result = multinet->get_results(model_data);
|
||||
if (mn_result->num > 0)
|
||||
printf("detected: command id:%d, string:%s\n",mn_result->command_id[0], mn_result->string);
|
||||
else
|
||||
printf("timeout\n");
|
||||
break;
|
||||
}
|
||||
chunks++;
|
||||
if (chunks > 600)
|
||||
break;
|
||||
}
|
||||
gettimeofday(&tv_end, NULL);
|
||||
int tv_ms=(tv_end.tv_sec-tv_start.tv_sec)*1000+(tv_end.tv_usec-tv_start.tv_usec)/1000;
|
||||
chunks -= 7;
|
||||
int run_ms = (chunks)*audio_chunksize/sizeof(int16_t)*1000/frequency;
|
||||
printf("Done! Took %d ms to parse %d ms worth of samples in %d iterations. CPU loading(single core):%.1f%%\n",
|
||||
tv_ms, run_ms, chunks, tv_ms*100.0/run_ms);
|
||||
|
||||
multinet->destroy(model_data);
|
||||
esp_srmodel_deinit(models);
|
||||
TEST_ASSERT_EQUAL(true, error_phrases == NULL);
|
||||
TEST_ASSERT_EQUAL(true, mn_state == ESP_MN_STATE_DETECTED);
|
||||
}
|
||||
|
||||
TEST_CASE("multinet set commands", "[mn]")
|
||||
{
|
||||
vTaskDelay(500 / portTICK_PERIOD_MS);
|
||||
@ -367,4 +449,4 @@ TEST_CASE("multinet modify commands", "[mn]")
|
||||
multinet->destroy(model_data);
|
||||
esp_srmodel_deinit(models);
|
||||
TEST_ASSERT_EQUAL(true, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user