File size: 1,671 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
"""WakeUpModel 唤醒词检测示例:输入 int16 WAV,输出逐帧得分与触发结果。"""
import argparse
import json
import sys
from pathlib import Path

import numpy as np
import soundfile as sf

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))

from wakeup_axera_sdk.inference import ModelSession
from wakeup_axera_sdk.detector import detect_stream


def main():
    parser = argparse.ArgumentParser(description="wakeup_axera wake word detection example")
    parser.add_argument("--model", required=True, help="AXMODEL 路径")
    parser.add_argument("--input", required=True, help="int16 WAV (16k mono)")
    parser.add_argument("--threshold", type=float, default=0.615, help="DET_MODE_95=0.615 / DET_MODE_90=0.608")
    parser.add_argument("--output-dir", default="output", help="输出目录")
    args = parser.parse_args()

    data, sr = sf.read(args.input, dtype="int16")
    if sr != 16000:
        raise SystemExit(f"仅支持 16kHz,got {sr}")
    session = ModelSession(args.model)
    result = detect_stream(session, data, det_win=3, threshold=args.threshold)

    out_dir = Path(args.output_dir)
    out_dir.mkdir(parents=True, exist_ok=True)
    (out_dir / "result.json").write_text(
        json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8")
    print(f"backend: {session.backend}")
    print(f"frames: {len(result['frame_scores'])}")
    print(f"max wake score: {result['max_score']:.4f}")
    print(f"max 3-frame sum: {result['max_sum']:.4f}  (threshold {args.threshold})")
    print(f"TRIGGERED: {result['triggered']}")
    print(f"saved to: {out_dir / 'result.json'}")


if __name__ == "__main__":
    main()