inoryQwQ's picture
Super-squash branch 'main' using huggingface_hub
139f25e
Raw
History Blame Contribute Delete
1.67 kB
"""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()