| set -euo pipefail | |
| ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" | |
| TARGET="${AXERA_TARGET:-AX650}" | |
| AUDIO="${AUDIO:-${ROOT}/audio/openwakeword/alexa_test.wav}" | |
| THRESHOLD="${THRESHOLD:-0.5}" | |
| case "${TARGET}" in | |
| AX650) | |
| BINARY="${ROOT}/cpp/bin/openwakeword_ax650" | |
| MODELS_DIR="${MODELS_DIR:-${ROOT}/models/650}" | |
| # 板端运行库默认路径(AX650 通常为 /soc/lib),可用 AXERA_BSP_LIB_DIR 覆盖 | |
| BSP_LIB_DIR="${AXERA_BSP_LIB_DIR:-${AX650_BSP_LIB_DIR:-/soc/lib}}" | |
| ;; | |
| AX630C) | |
| BINARY="${ROOT}/cpp/bin/openwakeword_ax630c" | |
| MODELS_DIR="${MODELS_DIR:-${ROOT}/models/630C}" | |
| BSP_LIB_DIR="${AXERA_BSP_LIB_DIR:-${AX630C_BSP_LIB_DIR:-/opt/lib}}" | |
| ;; | |
| *) | |
| echo "ERROR: AXERA_TARGET must be AX650 or AX630C" >&2 | |
| exit 2 | |
| ;; | |
| esac | |
| if [[ ! -x "${BINARY}" ]]; then | |
| echo "ERROR: 预编译二进制不存在: ${BINARY}(HF 发布版应包含 cpp/bin/)" >&2 | |
| exit 2 | |
| fi | |
| for name in embedding_model alexa_v0.1 hey_jarvis_v0.1 hey_mycroft_v0.1 \ | |
| hey_rhasspy_v0.1 timer_v0.1 weather_v0.1; do | |
| model="${MODELS_DIR}/openwakeword__${name}.axmodel" | |
| if [[ ! -f "${model}" ]]; then | |
| echo "ERROR: ${TARGET} model is missing: ${model}" >&2 | |
| exit 2 | |
| fi | |
| done | |
| export LD_LIBRARY_PATH="${BSP_LIB_DIR}:${LD_LIBRARY_PATH:-}" | |
| exec "${BINARY}" \ | |
| --models-dir "${MODELS_DIR}" \ | |
| --mel-weights "${ROOT}/config/openwakeword_mel_weights.bin" \ | |
| --audio "${AUDIO}" \ | |
| --threshold "${THRESHOLD}" | |