本文为 Arcs-mini 开发板配置离线命令词的教程。
SDK 版本需要在 2.5.0 及以上
可通过命令git log查看版本,如果版本过低,请使用命令git pull --rebase拉取最新 SDK
离线状态下,说【小聆小聆】唤醒开发板,然后说【打开灯光】能有对应日志输出。
连接云端成功状态下,说离线命令词【打开灯光】将会被忽略。
如果您不想重新编译代码而希望直接体验本固件,可点击下载。
.hex 文件拖入 cskburn desktop 后选择 ADB 设备进行烧录即可。
如果您想直接查看所有代码,可点击下载。
下载后,将其替换 arcs_mini 项目的
apps和src文件夹
算法资源固件下载:
wake_word.bin
下载后,将其替换 arcs_mini 项目的
res/arcs-mini/wake_word.bin文件
最后,参考文档《SDK编译教程》编译烧录即可
逐一执行以下命令拉取分支,以获取代码:
git remote add sample_repo https://cloud.listenai.com/listenai_hwtan/arcs_mini.git
git fetch --all
git switch -c sample/offline_cammand sample_repo/sample/offline_cammand
登录算法资源打包平台













下载的压缩包解压出来

路径:{算法资源包}\Standard_product\stage1_install\res下找到文件cae_esr.bin和wrap.json
把文件拖到 SDK,路径:arcs_mini/res/arcs-mini/wake_work
在 SDK 根目录执行命令 python3 ./tools/romfs.py pack -i ./res/arcs-mini/wake_word -o ./res/arcs-mini/wake_word.bin

由于默认开启云端唤醒词资源自动下载更新功能,因此需要关闭。
找到 SDK 的配置文件(路径:arcs_mini/apps/arcs-mini/prj.conf),增加 CONFIG_OTA_DISABLE_WAKEWORD_UPDATE=y

2.5.0下默认是 0ms,也就是不会进入离线命令词模式,设置超时时间之后,唤醒后的一段时间能够识别离线命令词,超时后回到待唤醒状态。
找到 SDK 的文件(路径arcs_mini/src/server/lschat_server/wakeup/app_wakeup.c),修改代码:

新增 SDK 的文件(路径arcs_mini/apps/arcs-mini/offline_cammand.c),增加代码:
#include <stdint.h>
#include "sys_init.h"
#include "voice_msg.h"
#define TAG "offline_cmd"
#include "lisa_log.h"
static void offline_command_msg(void *unused, uint32_t msg_id, void *data, uint32_t len, void *user_data)
{
(void)unused;
(void)msg_id;
(void)user_data;
if (data == NULL || len < sizeof(voice_msg_cloud_recognized_command_t)) {
LOGW("invalid offline command msg, data:%p len:%u", data, (unsigned int)len);
return;
}
voice_msg_cloud_recognized_command_t *cmd = (voice_msg_cloud_recognized_command_t *)data;
LOGW("识别到离线命令词: %s", cmd->command);
}
static int offline_command_init(void)
{
voice_msg_sub(VOICE_MSG_RECOGNIZED_OFFLINE_COMMAND, offline_command_msg, NULL);
return 0;
}
SYS_INIT(offline_command_init, SYS_INIT_LEVEL_PRE_APPLICATION, 95);
修改 SDK 的文件(路径arcs_mini/apps/arcs-mini/CMakeLists.txt),增加代码:offline_cammand.c

功能逻辑在
arcs_mini/apps/arcs-mini/offline_cammand.c文件内实现即可。
参考文档《SDK编译教程》 和 文档《固件烧录教程(ADB工具)》 编译项目后,将固件烧录到设备中。
