File size: 1,810 Bytes
139f25e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# wakeup_axera C++ SDK

直接链接 AX Engine runtime(`ax_engine`/`ax_sys`/`ax_interpreter`)的
流式唤醒词检测 SDK:fbank 预处理 + 64 帧窗口 + NPU 推理 + 3 帧滑动触发。

- 输入(与 model_meta.json 一致): fbank[1, 26, 64] float32
- 输出(与 model_meta.json 一致): logits[1, 2, 64] float32
- 支持芯片: AX650/AX630(models/ax650/model.axmodel)、AX620E(models/ax620e/model.axmodel)
- 板端实测(AX650C, NPU3): “你好,爱芯”触发(max_sum 9.848 > 0.615,
  12 次 TRIGGER)/ “你好,其他”静默(max_sum -5.704),与 Python SDK 一致

## 交叉编译(aarch64)

依赖:`aarch64-none-linux-gnu-gcc/g++`(GCC 9.2)与 AX runtime 头文件/库。
本目录 `axrt/` 已预置来自 AX650C 板的 runtime(include + libax_engine/libax_sys/
libax_interpreter),可直接编译;也可用你自己的 BSP 覆盖:

```bash
cmake -S cpp -B cpp/build-aarch64 \
  -DCMAKE_TOOLCHAIN_FILE=cpp/toolchain-aarch64.cmake \
  -DTOOLCHAIN_ROOT=/path/to/aarch64-none-linux-gnu \
  -DAX_RUNTIME_ROOT=/path/to/axrt        # 默认使用 cpp/axrt
cmake --build cpp/build-aarch64 -j
```

产物:`cpp/build-aarch64/model_example`。

## 板端运行

```bash
./cpp/build-aarch64/model_example models/ax650/model.axmodel 音频.raw 0.615
# 输入为 16kHz 单声道 int16 raw PCM;阈值默认 0.615(DET_MODE_95)
```

运行前在板端设置 `export LD_LIBRARY_PATH=/soc/lib`(或指向 runtime 库目录)。

## 在自己的代码里用

```cpp
#include "wake_word.hpp"
WakeWordDetector det("model.axmodel", 0.615f, 3);
auto r = det.ProcessFrame(int16_512_samples);   // 每帧 512 个 int16
// r.wake_score / r.window_sum / r.triggered
```

`WakeWordDetector` 线程内自持 64 帧窗口与得分缓冲,逐帧喂入即可。