lab: vpcos.mjs — Kosinus zwischen gespeicherten Stimmabdruecken messen

This commit is contained in:
2026-08-07 15:56:21 +02:00
parent ff285011d2
commit 084401624b
+13
View File
@@ -0,0 +1,13 @@
import { pool } from "/opt/callrec/db.js";
const [rows] = await pool.query("SELECT id,name,vec FROM voiceprints");
const V = rows.map(r => ({ id: r.id, name: r.name, v: typeof r.vec === "string" ? JSON.parse(r.vec) : r.vec }));
const cos = (a,b) => { let d=0,na=0,nb=0; for (let i=0;i<a.length;i++){d+=a[i]*b[i];na+=a[i]*a[i];nb+=b[i]*b[i];} return d/(Math.sqrt(na)*Math.sqrt(nb)+1e-9); };
const first = n => n.toLowerCase().split(/\s+/)[0];
const pairs = [];
for (let i=0;i<V.length;i++) for (let j=i+1;j<V.length;j++) {
const c = cos(V[i].v, V[j].v);
if (first(V[i].name) === first(V[j].name) || c >= 0.6) pairs.push({ a: V[i].name, b: V[j].name, c: +c.toFixed(3), sameFirst: first(V[i].name)===first(V[j].name) });
}
pairs.sort((x,y)=>y.c-x.c);
for (const p of pairs) console.log(`${p.c} ${p.sameFirst ? "gleicher Vorname" : "nur Kosinus "} ${p.a} <-> ${p.b}`);
process.exit(0);