ESP-IDF 音频识别拓展组件使用

我这段时间尝试在微雪的 ESP-32 One 上面使用 PlatformIO (下称PIO)开发程序,但是在查找官方资料的时候,碰见了一些问题:

  • 乐鑫有自己专门的音频开发框架 ESP-ADF,这不仅仅是一堆源文件,ESP-ADF 独立且可以包含或者引用 ESP-IDF,无法与 PIO 联动或者使用 PIO 管理。
  • PIO 目前没有对 ESP-ADF 的官方支持。
  • ESP-ADF 默认只支持有限的官方开发板。
  • 微雪的官方文档几乎没有提到 ESP-ADF……

有没有一种方法,在使用 PIO 的同时,又使用来自 ESP-ADF 的部分库呢?

ESP32 One
ESP 32 One 就是这货

研究一下代码,我发现,乐鑫方面使用 CMake 管理开发环境,ESP-ADF 根目录下的文件里有这么一行:

set(EXTRA_COMPONENT_DIRS $ENV{ADF_PATH}/components)

同时,被引用的 ESP-SR (单独的语音识别库)也提及:

These algorithms are provided in the form of a component

虽然乐鑫没有详细解释过 component 到底是什么贵物,但可以合理猜测这就是乐鑫互相引用代码库的方式。(略微吐槽一下:EXTRA_COMPONENT_DIRS 显然不是 CMake 官方的配置,但乐鑫却默认用户早就应该熟悉 CMake 并知道他们在 IDF 的 CMake 里整了什么妖蛾子……)

所以接下来就很简单。

(再次吐槽:微雪官方教程里用了 ESP-WHO 的官方的旧版示例 ,本来是给ESP-EYE板子用的……况且官方在新版里删除了这个例程)

用 PlatformIO 新建一个项目。板子选 esp32cam ( 反正带摄像头,应该差不多),框架选 ESP-IDF。

打开新建的项目文件夹,编辑 CMakeList.txt,添加:

set(EXTRA_COMPONENTS_DIRS components/)

然后将 ESP-SR 下载到 components 文件夹里。

这个时候运行 PIO 菜单的 Run Menuconfig,应该可以看到音频识别相关配置了。

现在可以编译音频识别相关项目,但有可能失败,因为 ESP-SR 的 CMake 配置里有多余的 "-Wl,--start-group" 标志传递给了链接器,到时候有链接失败可能。

类似上图,到 components/esp-sr/CMakeLists.txt 删除这些条目即可。

发表回复

您的电子邮箱地址不会被公开。