From a4631a0735521455320ab87712f227d68b9bee2a Mon Sep 17 00:00:00 2001 From: liwenhao2 Date: Wed, 16 Sep 2026 10:07:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A0=E7=BC=9D=E6=8F=92=E8=AF=9D=E6=8F=90?= =?UTF-8?q?=E9=80=9F+=E5=88=87=E8=A1=8C=E5=8D=B3=E6=8C=82=E5=90=8D:?= =?UTF-8?q?=E6=B7=B1=E4=BD=8E=E5=88=86=E4=B8=80=E7=A5=A8=E5=BC=BA=E5=88=87?= =?UTF-8?q?(deepLowSwitch=3D0.22,=E5=90=8C=E4=BA=BA=E5=AE=9E=E6=B5=8B?= =?UTF-8?q?=E6=9C=80=E4=BD=8E~0.39/=E5=BC=82=E4=BA=BA=E7=AA=970.14~0.19,?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=B8=A6=E4=B8=AD=E6=9E=A2),=E6=B5=85?= =?UTF-8?q?=E4=BD=8E=E7=BB=B4=E6=8C=81=E4=B8=A4=E7=A5=A8;SWITCH-FORCE=20?= =?UTF-8?q?=E6=94=B9=E8=B5=B0=20onOnsetSwitch=20=E8=90=BD=E5=9C=B0?= =?UTF-8?q?=E9=80=9A=E9=81=93,=E5=88=87=E8=A1=8C=E5=90=8C=E6=97=B6?= =?UTF-8?q?=E7=BB=8F=20pendingOnsetLabel=20=E6=8C=82=E5=B7=B2=E7=9F=A5?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E6=88=96=E5=BD=93=E5=9C=BA=E5=8D=A0=E5=8F=B7?= =?UTF-8?q?(=E4=B8=8E=E5=BC=80=E5=8F=A3=E5=8D=B3=E6=9F=A5=E5=85=B1?= =?UTF-8?q?=E7=94=A8=E9=98=B2=E5=8F=8C=E5=8F=B7/=E5=B0=81=E8=A1=8C/?= =?UTF-8?q?=E6=97=B6=E5=BA=8F=E4=BD=9C=E5=BA=9F),=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E7=AD=89=E4=B8=8B=E4=B8=80=E5=8F=A5=E7=BB=93=E7=AE=97;?= =?UTF-8?q?=E6=97=A0=E7=BC=9D=E5=9C=BA=E6=99=AF=204~6s=E2=86=923~4s=20?= =?UTF-8?q?=E4=B8=94=E6=A0=87=E7=AD=BE=E5=8D=B3=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/k2fsa/sherpa/onnx/MainActivity.kt | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 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 8ee8d51..6eed6ad 100644 --- a/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt +++ b/app/src/main/java/com/k2fsa/sherpa/onnx/MainActivity.kt @@ -189,6 +189,10 @@ class MainActivity : AppCompatActivity() { // 实测(2026-09-14):2s 短窗 + base 模型下同人 simA 在 0.05~0.7 震荡, // 阈值维度已不可分 → 判定窗加长到 4s 拉开分布,阈值回调到 0.35 private val speakerSwitchDrop = 0.35f // cos(window, reference) below this => switch + // 深低分一票强切(2026-09-16):同人波动实测最低 ~0.39,异人插话窗稳落 + // 0.14~0.19,0.22 取安全带中枢——深低首票即切(无缝插话 4~6s→3~4s); + // 0.22~0.35 浅低维持连续两票,毛刺照旧被误断防护拦下 + private val deepLowSwitch = 0.22f // 最近邻兜底(P1 收紧,2026-09-11):精确匹配不中→top≥0.42 且领先第二名 // ≥0.06 才归入最相似身份;模糊判新人(修"错并到别人行") private val verdictFallbackMin = 0.42f @@ -771,16 +775,35 @@ class MainActivity : AppCompatActivity() { // 路线A:只"预备",不立即切 switchSuspicionAtMs = SystemClock.elapsedRealtime() + val deepLow = simA < deepLowSwitch Log.i(TAG, "SWITCH-SUSPECT" + - " armed fast-endpoint owner=sid$owner") - // 无缝插话确证:连续低分够了 - // → 不等停顿,本窗立即强判 - if (rollingLowStreak >= forceSwitchStreaks) { - pendingForceEndpoint = true + " armed fast-endpoint owner=sid$owner" + + (if (deepLow) " deepLow" else "")) + // 无缝插话确证:深低一票即切; + // 浅低维持连续两票。切行同时把 + // 新说话人挂名(切行即挂名,复用 + // 开口即查的落地通道 onOnsetSwitch) + if (deepLow || + rollingLowStreak >= forceSwitchStreaks + ) { rollingLowStreak = 0 + val label = newLabel + ?: SpeakerRecognition.nextAutoLabel() + .also { + SpeakerRecognition + .fastRegistry + .addAuto(it, emb) + } Log.i(TAG, "SWITCH-FORCE" + - " streak>=$forceSwitchStreaks" + + (if (deepLow) + " deep-low<${deepLowSwitch}" + else + " streak>=$forceSwitchStreaks") + + " label=$label" + " owner=sid$owner") + uiHandler.post { + onOnsetSwitch(label) + } } } }