espressif / esp-sr

Speech recognition
Other
557 stars 104 forks source link

请问0.8.0版本如何配置为连续识别(CONTINUOUS_RECOGNITION)模式 (AIS-1013) #50

Closed wangxiankang closed 1 year ago

wangxiankang commented 2 years ago

您好,我在esp-sr ## 0.7.0 可以通过以下配置修改为连续识别模式,升级到 ## 0.8.0后发现Kconfig文件改动了很多,没看到在哪里设置连续识别模式,请相关开发大佬帮忙解答以下,0.8.0版本的sr如何配置成连续识别模式,我的开发板是ESP32_S3_KORVO2_V3,测试demo为wwe.

当前我在用的 esp-sr: commit 08b9ffc8642394226b526a268f8a03840de89405 (HEAD) Author: sxy sunxiangyu@espressif.com Date: Wed Aug 24 12:07:37 2022 +0800

bugfix: Fix ld error for macOS

命令词识别模式

命令词识别支持两种基本模式:

用户可以通过 menuconfig -> ESP Speech Recognition -> speech commands recognition mode after wake up 来对以上两种模式进行切换,默认为 SINGLE_RECOGNITION 模式。

注:CONTINUOUS_RECOGNITION 模式下对单个词的识别率略低于 SINGLE_RECOGNITION 模式下的单个词识别率。

wangxiankang commented 2 years ago

0.8.0版本的sr关于识别模式的配置为:

choice CHINESE_SR_MN_MODEL_SEL prompt "Chinese Speech Commands Model" default SR_MN_CN_MULTINET4_5_SINGLE_RECOGNITION depends on USE_MULTINET help Select the Wake Word Engine to be used.

config SR_MN_CN_NONE
    bool "None"

config SR_MN_CN_MULTINET2_SINGLE_RECOGNITION
    bool "chinese single recognition (mn2_cn)"
    depends on IDF_TARGET_ESP32

config SR_MN_CN_MULTINET4_5_SINGLE_RECOGNITION
    bool "chinese recognition (mn4_cn)"
    depends on IDF_TARGET_ESP32S3

config SR_MN_CN_MULTINET4_5_SINGLE_RECOGNITION_QUANT8
    bool "chinese recognition (mn4q8_cn)"
    depends on IDF_TARGET_ESP32S3

config SR_MN_CN_MULTINET5_RECOGNITION_QUANT8
    bool "english recognition (mn5q8_cn)"
    depends on IDF_TARGET_ESP32S3

endchoice

没找到关于CONTINUOUS_RECOGNITION相关配置,请大佬解答以下。谢谢

wangxiankang commented 2 years ago

通过查看文档发现文档和当前0.8.0不符,文档修改者为 Wang Wang Wang.

文档路径:esp-adf/components/esp-sr/docs/speech_command_recognition.README_cn.md 发现,文档内是这样写的:

MultiNet 是为了在 ESP32 系列上离线实现多命令词识别而设计的轻量化模型,目前支持 200 个以内的自定义命令词识别。

支持中文和英文命令词识别(英文命令词识别需使用 ESP32S3)
支持用户自定义命令词
支持运行过程中 增加/删除/修改 命令词语
最多支持 200 个命令词
支持单次识别和连续识别两种模式
轻量化,低资源消耗
低延时,延时500ms内
支持在线中英文模型切换(仅 ESP32S3)
模型单独分区,支持用户应用 OTA

命令词识别支持两种基本模式:

单次识别
连续识别 当命令词识别返回状态为 ESP_MN_STATE_DETECTED 时退出命令词识别,则为单次识别模式;
当命令词识别返回状态为 ESP_MN_STATE_TIMEOUT 时退出命令词识别,则为连续识别模式;

feizi commented 1 year ago

你好,如果你使用 ESP32_S3_KORVO2_V3 开发板, 建议直接使用master 分支,参考esp-skainet/examples,目前默认支持一次唤醒多次识别。 新的算法也会优先支持ESP32-S3。

wangxiankang commented 1 year ago

你好,如果你在开发 ESP32_S3KORVO2_V3,建议直接使用新的分支,参考-skainet/examples,默认支持一次监控,并 支持 ESP32-S3。

感谢您的回复。我目前使用的是esp-adf master分支,我是基于wwe demo进行开发调试的,我稍后看一下您说的skainet/examples。另外想问一下,在我当前的demo基础上如何修改可以支持到单次唤醒,多次识别那?

wangxiankang commented 1 year ago

我还是想基于ADF去开发我的应用,参考的demo是 wwe、今天趁着周末看了一下adf下,recorder_sr.c 、audio_recorder.c 等相关代码,最后注释了一句代码实现了单次唤醒连续识别功能,具体方法是修改recorder_sr.c 文件的第193行附近: if (mn_state == ESP_MN_STATE_DETECTED) { esp_mn_results_t *mn_result = multinet->get_results(recorder_sr->mn_handle); if (recorder_sr->mn_monitor) { recorder_sr->mn_monitor(mn_result->command_id[0], recorder_sr->mn_monitor_ctx); //cb -> thisself -> user }

if CONFIG_IDF_TARGET_ESP32

        recorder_sr_enable_wakenet_aec(recorder_sr);

endif

        // detect_flag = 0;//停止检测 single detect model
    }

将上面detect_flag = 0; 注释掉即可。