From 31762d4627ef1e35cf838f145f02f590b2853efe Mon Sep 17 00:00:00 2001 From: liwenhao2 Date: Wed, 16 Sep 2026 16:17:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E5=8A=A8=E6=92=A4=E9=94=80=E5=8A=A0?= =?UTF-8?q?=E5=BC=BA=E5=BA=A6=E9=97=A8=E6=A7=9B(=E5=AE=9E=E9=94=A4:?= =?UTF-8?q?=E7=9F=AD=E6=8F=92=E5=98=B4=E6=B7=B7=E5=90=88=E7=AA=97=E5=A4=8D?= =?UTF-8?q?=E6=A0=B80.5~0.6=E5=BC=B1=E5=8C=B9=E9=85=8D=E8=AF=AF=E6=92=A4?= =?UTF-8?q?=E4=BA=86sim=3D0.04=E7=9A=84=E7=9C=9F=E5=AE=9E=E5=BC=82?= =?UTF-8?q?=E5=B8=B8):=E5=A4=8D=E6=A0=B8=E6=94=B9=E7=94=A8=20nearestRank?= =?UTF-8?q?=20=E5=90=8D=E5=AD=97=E7=BA=A7=E5=88=86=E6=95=B0,CANCEL=20?= =?UTF-8?q?=E9=9C=80=20score=E2=89=A50.68(=E5=90=8C=E4=BA=BA=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=AE=9E=E6=B5=8B0.70~1.00=E5=AE=89=E5=85=A8=E5=B8=A6?= =?UTF-8?q?)=E4=B8=94=E4=B8=BA=E5=BD=93=E5=89=8D=E4=BA=BA;=E5=BC=B1?= =?UTF-8?q?=E5=8C=B9=E9=85=8D=E8=B5=B0=20WEAK-SAME=20=E7=95=99=E7=97=95?= =?UTF-8?q?=E8=AE=A9=E5=88=87=E6=8D=A2=E7=AB=8B=E4=BD=8F;=E4=B8=89?= =?UTF-8?q?=E7=B1=BB=E5=A4=8D=E6=A0=B8=E6=97=A5=E5=BF=97=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E5=B8=A6=E5=88=86=E6=95=B0,=E4=B8=8B=E6=AC=A1=E5=AE=9A?= =?UTF-8?q?=E7=BD=AA=E4=B8=8D=E5=86=8D=E9=9D=A0=E7=8C=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/k2fsa/sherpa/onnx/MainActivity.kt | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt index 90358bd..d01fd22 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -221,6 +221,10 @@ class MainActivity : AppCompatActivity() { private val onsetMinSamples = 19200 // 1.2s 开口窗 // 喂料恒定滞后(2026-09-16):识别流滞后 1.2s 喂入,切点前的音频可改道; // 全局字幕延迟 ~1.2s 的代价换取换人零串行 + // 主动撤销的强度门槛(2026-09-16 实锤:短插嘴混合窗复核出 0.5~0.6 弱匹配, + // 二元"认得出"误撤了 0.04 深低的真实异常;同人确认分实测 0.70~1.00, + // 0.68 取安全带) —— 复核低于此分只留痕不撤销,让切换立住 + private val revertCancelMin = 0.68f // 快速滚动通道(2026-09-16 用户三次拍板后终定 C:维持 2s 窗——最快档, // 接受误切闪烁,由并回自愈兜底)。窗长演化留档:2s(风暴,单窗20发/5min) // →3s(折中)→ 终选回 2s;护持:连续两窗/注册表复用/销案/冷却/并回自愈。 @@ -1819,16 +1823,26 @@ class MainActivity : AppCompatActivity() { ) { val acc = SpeakerRecognition.computeEmbedding(samples, sampleRateInHz) ?: return - val pre = SpeakerRecognition.registry.search(acc, speakerThreshold) - ?: nearestAttribution(acc, SpeakerRecognition.registry, verdictFallbackMin) + val r = SpeakerRecognition.registry.nearestRank(acc) + val pre = r.name + val score = r.score when { - pre != null && pre == active -> { - Log.i(TAG, tag + "-CANCEL-LATE known=$pre(active) active-heal") + pre != null && pre == active && score >= revertCancelMin -> { + Log.i(TAG, tag + "-CANCEL-LATE known=$pre(active)" + + " score=" + "%.2f".format(score) + " active-heal") // 主动善后:不再被动等句子结束(长句让错标挂几十秒),立即撤销 uiHandler.post { revertOnsetSwitch(label, pre) } } + pre != null && pre == active -> { + // 弱匹配(短插嘴混合窗常见 0.5~0.6):不撤销,让切换立住 + Log.i(TAG, tag + "-WEAK-SAME known=$pre" + + " score=" + "%.2f".format(score) + + " < $revertCancelMin keep-switch") + } pre != null -> - Log.i(TAG, tag + "-RECHECK known=$pre label=$label (verdict migrates)") + Log.i(TAG, tag + "-RECHECK known=$pre" + + " score=" + "%.2f".format(score) + + " label=$label (verdict migrates)") else -> SpeakerRecognition.registry.addAuto(label, acc) } }