File size: 979 Bytes
14fbf03 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | """Score one pause with the int8 ONNX model. pip install onnxruntime soundfile numpy"""
import numpy as np, onnxruntime as ort, soundfile as sf, sys
SR, CTX = 16000, 8 * 16000
sess = ort.InferenceSession("eot.int8.onnx", providers=["CPUExecutionProvider"])
def p_done(audio_16k_mono: np.ndarray, decision_time_s: float) -> float:
"""P(the speaker has finished their turn), given audio up to `decision_time_s`.
Call it ~200 ms after the speaker's last word, which is the point the model was trained on."""
e = int(decision_time_s * SR); w = audio_16k_mono[max(0, e - CTX):e].astype(np.float32)
w = np.concatenate([np.zeros(CTX - len(w), np.float32), w])[None] # left-pad to exactly 8 s
return float(sess.run(None, {"audio": w})[0].reshape(-1)[0])
if __name__ == "__main__":
x, sr = sf.read(sys.argv[1], dtype="float32", always_2d=True); assert sr == SR, "resample to 16 kHz first"
print(f"P(done) = {p_done(x.mean(1), float(sys.argv[2])):.3f}")
|