| """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() |
|
|