Acest articol prezintă principiile și implementarea practică a diarizării vorbitorului - identificarea automată a persoanei care vorbește la un moment dat dintr-un flux audio continuu. Pornind de la transformata Fourier, Scala Mel și coeficienții MFCC, explorăm algoritmii clasici și moderni de identificare a vorbitorului, precum și provocările implementării în browser folosind Web Audio API. În a doua parte, demonstrăm că același set de tehnici, aplicat semnalelor emise de motoarele electrice ale vehiculelor aeriene fără pilot (UAV/drone), poate constitui baza unui sistem acustic de detecție și identificare a dronelor - un domeniu cu aplicații în securitate, managementul traficului aerian și protecția infrastructurii esențiale.
În orice conversație care implică mai mulți participanți - de la o consultație medicală la o ședință de board sau un interviu jurnalistic - întrebarea "cine a vorbit?" este la fel de importantă ca și "ce s-a spus?". Diarizarea vorbitorului (speaker diarization) este sarcina de a segmenta un flux audio în regiuni omogen atribuite unui singur vorbitor, răspunzând întrebării "cine vorbește când?" fără a presupune cunoașterea prealabilă a identității persoanelor implicate [1].
Domeniul a evoluat dramatic în ultimul deceniu: dacă în anii 2000 sistemele se bazau pe modele gaussiene de amestec (GMM) și distanță BIC, astăzi arhitecturile neuronale profunde produc embeddings de vorbitor (x-vectors, d-vectors) cu performanțe care depășesc capabilitatea umană de discriminare în condiții de zgomot [2, 3]. Cu toate acestea, implementarea eficientă în medii cu resurse limitate - browser, embedded systems, edge computing - rămâne o provocare deschisă și de interes practic imediat.
Articolul de față are un dublu scop:
să prezinte cu suficient detaliu tehnic fundamentele matematice și algoritmice ale diarizării vorbitorului, cu accent pe implementarea în JavaScript folosind Web Audio API; și
Semnalul audio brut este o secvență de valori de presiune acustică eșantionate la o rată fixă (tipic 44.100 Hz pentru audio de consum). Deși forma de undă în domeniul timp conține întreaga informație, ea nu este potrivită pentru extragerea de trăsături discriminante ale vorbitorului.
Transformata Fourier discretă (DFT) - și implementarea sa eficientă, FFT - proiectează semnalul în domeniul frecvențial, dezvăluind distribuția energiei pe componente sinusoidale.
În practică, analiza se face pe ferestre scurte (tipic 20-40 ms), cu suprapunere (10-15 ms), obținând o reprezentare timp-frecvență numită spectrogramă. Fiecare fereastră este înmulțită cu o funcție de fereastră (Hamming, Hann) pentru a reduce efectul de scurgere spectrală (spectral leakage) la marginile ferestrei.
Percepția umană a înălțimii sunetului nu este liniară în raport cu frecvența fizică: urechea discriminează mai fin frecvențele joase decât cele înalte. Scala Mel, propusă de Stevens, Volkmann și Newman în 1937, aproximează această neliniaritate:
Un filterbank mel constă din M filtre trapezoidale distribuite uniform pe Scala Mel, aplicate pe spectrul de putere FFT. Energia fiecărui filtru este logaritmată (pentru a comprima dinamica, similar sistemului auditiv), obținând un vector de M valori care reprezintă spectrul mel al ferestrei curente. Valorile tipice sunt M = 26 sau 40.
Coeficienții MFCC, introduși de Davis și Mermelstein în 1980 [6], sunt obținuți prin aplicarea transformatei cosinus discrete (DCT) asupra log-energiilor filterbank-ului mel. DCT decorelează componentele (deoarece filterbankurile mel se suprapun), condensând informația vocală în primii 12-13 coeficienți:
Coeficientul c₀ (k=0) corespunde energiei totale a cadrului și este adesea exclus din vectorul de trăsături pentru identificarea vorbitorului, deoarece reflectă volumul vorbirii, nu identitatea vorbitorului. Vectorii MFCC c₁-c₁₃ captează caracteristicile tractului vocal - forma cavității bucale, lungimea, poziția limbii - trăsături stabile ale identității vocale.
Vectorul de trăsături complet pentru un cadru include adesea și coeficienții delta (Δ-MFCC, derivata temporală) și delta-delta (ΔΔ-MFCC), care captează dinamica temporală a vorbirii. La aceștia se adaugă uneori frecvența fundamentală (pitch, F₀) - estimată prin autocorelație pe semnalul în domeniul de timp - și centroidul spectral, care măsoară "strălucirea" vocii.
De reținut: Performanța oricărui sistem de identificare vocală depinde în mod vital de calitatea extragerii trăsăturilor. Normalizarea cepstrală a mediei (CMN) - scăderea mediei sesiunii din fiecare vector MFCC - reduce influența caracteristicilor canalului (microfon, acustică ambientală). Normalizarea L2 (proiectarea pe sfera unitate) este o alternativă robustă, stabilă în timp, care permite utilizarea distanței euclidiene ca metrică de comparație consistentă.
Abordarea clasică, dominantă în anii 2000 modelează distribuția vectorilor MFCC ai fiecărui vorbitor printr-un Gaussian Mixture Model (GMM). Un model universal de fundal (Universal Background Model, UBM) antrenat pe un corpus mare de vorbitori este adaptat prin Maximum A Posteriori (MAP) la datele fiecărui vorbitor specific - obținând un model GMM personalizat cu efort computațional redus [7]. Identificarea se face prin likelihood ratio test față de UBM.
Limitele GMM-UBM sunt sensibilitatea la variații de canal și necesitatea a minim câteva zeci de secunde de date de antrenament per vorbitor. Aceste limitări au motivat dezvoltarea metodelor bazate pe subspații latente.
Dehak et al. (2011) [2] au propus reprezentarea sesiunii de vorbitor ca un vector de dimensiune mică (tipic 400) - i-vectorul - care codifică simultan identitatea vorbitorului și variabilele de canal într-un subspațiu total. Modelul presupune că supervetorul GMM poate fi scris ca suma unui supervetor de fundal și un termen de variabilitate totală:
, unde T este matricea spațiului total și w este i-vectorul sesiunii.
Clasificarea se face cu Linear Discriminant Analysis (LDA) sau Probabilistic LDA (PLDA), care separă variabilitatea intra-speaker de variabilitatea inter-speaker. I-vectorii au dominat competițiile NIST Speaker Recognition Evaluation (SRE) timp de aproape un deceniu.
Arhitecturile neuronale profunde au redefinit starea artei în identificarea vorbitorului. Snyder et al. (2018) [3] propun x-vectors: un model DNN antrenat pentru clasificarea vorbitorului pe ferestre de câteva secunde, din ale cărui straturi intermediare se extrag embeddings compacte (tipic 512 dimensiuni). Un strat de agregare statistică (mean + standard deviation pooling) permite procesarea secvențelor de lungime variabilă.
X-vectorii, combinați cu PLDA și augmentare de date (adăugare de zgomot, reverberație simulată), au redus rata de eroare de identificare cu 50-70% față de i-vectors pe benchmarkurile standard. Modele mai recente - ECAPA-TDNN, ResNet-based speaker models - ating performanțe și mai ridicate, cu EER (Equal Error Rate) sub 1% pe seturi de date curate [1, 8].
Trebuie distins între trei sarcini înrudite:
(1) Verificarea vorbitorului - este persoana X cea care vorbește? (clasificare binară);
(2) Identificarea vorbitorului - care din N vorbitori cunoscuți vorbește? (clasificare multi-clasă);
(3) Diarizarea vorbitorului - segmentarea fluxului audio în regiuni atribuite unor vorbitori fără cunoaștere prealabilă a identității lor, cu număr de vorbitori necunoscut a priori [1].
Un pipeline tipic de diarizare include:
detectarea activității vocale (VAD),
extragerea trăsăturilor,
clusterizare (k-means, spectral clustering, sau DBSCAN pe embeddings),
Metrica standard de evaluare este DER (Diarization Error Rate), suma ratelor de miss speech, false alarm și speaker confusion.
Web Audio API [9] oferă, nativ în browser, acces la fluxul de microfon prin getUserMedia(), procesare semnal cu AnalyserNode (FFT în timp real, configurat prin fftSize = 2048), și timing precis prin AudioContext. Implementarea în JavaScript impune constrângeri semnificative față de sistemele server-side: lipsa SIMD explicit pentru operații matriciale, execuție single-threaded pe main thread (deși Web Workers și AudioWorklets ameliorează situația parțial), și latență de ~16ms impusă de requestAnimationFrame.
Aceste constrângeri fac imposibilă rularea modelelor DNN mari (x-vectors, ECAPA-TDNN) direct în browser fără ONNX Runtime Web sau TensorFlow.js - și chiar și cu aceste frameworkuri, inferența în timp real pe modele cu milioane de parametri este marginal fezabilă pe hardware modest. Alternativa practică este utilizarea unui clasificator lightweight: nearest-centroid cu metrică euclidiană în spațiul trăsăturilor L2-normalizate.
Implementarea practică procesează cadre de 2048 eșantioane (≈46 ms la 44.1 kHz) la fiecare ciclu requestAnimationFrame. Doar cadrele cu RMS > θ (un prag de energie configurabil) sunt incluse în bufferul de colectare al enunțului curent - detectare de activitate vocală simplificată dar eficientă în condiții de zgomot redus.
La finalul unui enunț (detectat prin oprirea recunoașterii vocale sau printr-un timer de tăcere), vectorii MFCC bruti ai cadrelor colectate sunt mediați, iar media este L2-normalizată - obținând amprenta L2 a enunțului curent:
unde
este norma euclidiană L2,
Această ordine - medie a vectorilor bruti, urmată de normalizare - este foarte importantă. Normalizarea per cadru urmată de mediere cauzează anulare vectorială: media vectorilor de pe sfera unitate poate fi un vector de normă apropiată de zero, lipsit de putere discriminatorie. Normalizarea mediei brute produce un centroid stabil, reproductibil pentru același vorbitor.
Fiecărui vorbitor detectat i se asociază un centroid - media L2-normalizată (și re-normalizată) a ultimelor K amprente. Identificarea unui enunț nou se face prin distanță Euclidiană față de fiecare centroid cunoscut:
Dacă distanța minimă depășește un prag θ, se declară un vorbitor nou. Pragul optim ,
unde
este distanța Euclidiană dintre cei doi centroizi cunoscuți - aceasta se calibrează automat după detectarea primilor doi vorbitori. Înainte de calibrare, pragul inițial θ₀ = 0.5 funcționează rezonabil în spațiul L2-normalizat, unde distanțele intra-speaker tipice sunt 0.05-0.25 și cele inter-speaker 0.5-1.4.
O ameliorare suplimentară: după K₀ = 5 enunțuri de la primul vorbitor, pragul se recalibrează din varianța intra-speaker observată: , unde
este distanța Euclidiană medie a eșantioanelor față de centroidul lor. Aceasta face sistemul adaptiv la tipul vocii și condițiile acustice ale camerei.
Vehiculele aeriene fără pilot multirotor (quadcopter, hexacopter etc.) produc un semnal sonor caracteristic, determinat de trei surse principale:
rotația motoarelor electrice brushless, care generează tonuri la frecvența de comutație a controlerelor ESC și armonicele acestora;
sunetul aerodinamic al elicelor - zgomot de tăiere a aerului (blade passing frequency, ) și turbulența de vârf de paletă;
BPF-ul este frecvența dominantă și distinctivă: un quadcopter tipic (DJI Phantom 4) cu elice de 2 pale și RPM ≈ 8.000-10.000 produce BPF ≈ 267-333 Hz. Modelele cu configurații diferite (hex, octo, pale multiple) au amprente spectrale distincte, identificabile [4, 5].
Spre deosebire de sunetul uman - bandă largă 80-8.000 Hz, structură formantică variabilă - sunetul unui motor de dronă este cvasi-periodic, cu energie concentrată în BPF și armonicele sale (2×BPF, 3×BPF...). Aceasta face identificarea mai ușoară în condiții ideale, dar mai fragilă la variații de RPM (care depind de manevra executată) și la zgomot de mediu urban.
Jeon et al. (2017) [4] au demonstrat că o rețea neuronală profundă antrenată pe spectrograme mel ale sunetelor de dronă poate detecta prezența dronei cu acuratețe >95% la distanțe de până la 80 m în medii semi-controlate. Al-Emadi et al. (2019) [5] au extins abordarea la identificarea modelului specific (DJI Phantom vs. Parrot Bebop vs. background), folosind MFCC și CNN, obținând 98% acuratețe pe setul de test.
Paralelismul cu identificarea vorbitorului este direct: în locul tractului vocal, semnătura acustică este determinată de configurația motorului + elice; în locul formantelor, urmărim BPF și armonicele. Pipelineul tehnic:
FFT → filterbank mel → MFCC → L2-normalizare → nearest-centroid sau DNN classifier se transferă aproape fără modificări, cu câteva ajustări specifice domeniului:
Banda de frecvențe de interes: 100-4.000 Hz (vs. 80-8.000 Hz pentru voce);
Dimensiunea ferestrei FFT: 4.096-8.192 de eșantioane pentru rezoluție frecvențială mai bună la BPF joase;
Numărul de filtre mel: 32-64 (mai multe, pentru a captura armonicele fine);
Un avantaj al detecției acustice față de radar sau LiDAR este costul redus al senzorilor. Un array de microfoane permite nu doar detectarea prezenței, ci și estimarea direcției de sosire (DOA - Direction of Arrival) prin beamforming sau MUSIC (Multiple Signal Classification). Diferența de timp de sosire (TDOA) dintre perechi de microfoane, combinată cu triangulare, poate localiza drona în spațiu 3D.
Sistemele comerciale emergente (DroneShield, Dedrone - deși bazate preponderent pe RF și video) integrează detectarea acustică ca strat suplimentar, în special pentru drone mici cu semnătură radar scăzută. Cercetările recente explorează rețele de microfoane distribuite, procesate la nivelul edge computing, cu agregare centralizată - arhitectură care beneficiază direct de tehnicile lightweight de extragere a trăsăturilor discutate în secțiunea 4.
Principalele provocări ale detectării acustice a dronelor sunt:
Zgomotul urban - trafic rutier, aer condiționat, vânt - suprapus spectral cu frecvențele BPF;
Variația RPM în funcție de manevrele executate, care deplasează BPF cu ±30%;
Distanța maximă eficientă, limitată la 50-100 m în condiții urbane (vs. 200-300 m în medii rurale);
Aceleași provocări există, prin analogie, în identificarea vocală în medii zgomotoase: vorbire suprapusă, zgomot de fundal variabil, variații emoționale ale înălțimii vocii. Soluțiile dezvoltate în ASR și speaker recognition - augmentare de date cu zgomot, beamforming adaptiv, VAD robust bazat pe energie spectrală - sunt direct aplicabile în detectarea acustică a UAV-urilor.
Clasificatorul nearest-centroid în spațiul L2-MFCC este viabil în scenarii cu număr mic de vorbitori (2-4), condiții acustice relativ controlate și cerințe de latență sub 50 ms (execuție în browser sau pe microcontrolere ARM Cortex-M4+). Pe setul de date VoxCeleb1 (7.000+ vorbitori), nearest-centroid cu MFCC produce EER de aproximativ 15-20%, față de 1-3% al modelelor DNN. Diferența se îngustează semnificativ când numărul de vorbitori este mic și datele de antrenament sunt abundente [1, 3].
Pentru detectarea dronelor, unde numărul de modele de identificat este mic (zeci, nu mii) și semnătura acustică este mai stabilă decât vocea umană, nearest-centroid MFCC atinge performanțe comparabile cu modelele CNN pe benchmarkuri cu SNR > 10 dB [4].
O direcție promițătoare pentru îmbunătățirea performanței în browser fără a sacrifica accesibilitatea este utilizarea ONNX Runtime Web cu WebAssembly (și, unde disponibil, WebGPU). Modele mici de tip SpeakerNet sau MobileNet audio, exportate în format ONNX, pot rula inferența pentru un cadru de 2 secunde în sub 100 ms pe hardware mainstream, deschizând calea spre x-vectors lightweight direct în browser.
Similar, modele pre-antrenate pentru detectarea dronelor (CNN pe spectrograme mel de 1-2 secunde, cu ~500K parametri) sunt suficient de mici pentru deployment ONNX Web, cu potențial de utilizare în aplicații de securitate accesibile publicului larg (ex. aplicații mobile pentru cetățeni care raportează intruziuni aeriene).
Sistemele de identificare vocală ridică întrebări legitime de confidențialitate: colectarea amprentelor vocale constituie procesare de date biometrice sub GDPR și regulamentele similare. Implementările care procesează exclusiv local (browser, edge) și nu transmit date audio sau amprente la server oferă garanții mai puternice față de soluțiile cloud. Principiul privacy-by-design recomandă: procesare locală, amprente volatile (resetate la închiderea sesiunii), și consimțământ explicit al utilizatorilor.
În domeniul dronelor, detectarea acustică nu ridică aceleași probleme de intimitate ca supravegherea video, dar regulamentele naționale privind interceptarea comunicațiilor și monitorizarea spațiului aerian impun cadre legale clare pentru operatorii de sisteme de detecție.
Diarizarea vorbitorului - identificarea automată a persoanei care vorbește dintr-un flux audio - se bazează pe un pipeline matematic elegant:
FFT → filterbank mel → MFCC → normalizare L2 → clasificare nearest-centroid sau DNN.
Implementarea în browser cu Web Audio API este fezabilă pentru scenarii cu doi-patru vorbitori, cu condiția respectării unor detalii critice: excluderea c₀ din vectorul MFCC, medierea vectorilor bruti înainte de normalizare, și calibrarea adaptivă a pragului de decizie.
Același pipeline, cu ajustări minore ale parametrilor filterbankului și ferestrei de analiză, se dovedește eficient pentru detectarea și identificarea dronelor după amprenta sonoră a motoarelor. Convergența tehnică dintre cele două domenii deschide oportunități pentru transfer de cunoaștere, seturi de date comune și arhitecturi unificatoare multi-task.
Pe măsură ce UAV-urile proliferează în spațiul aerian urban și periurban, sistemele de detectare acustică lightweight, deployabile pe edge devices cu cost redus, vor deveni un element complementar esențial al ecosistemului de securitate aeriană - iar cunoștințele acumulate în procesarea vorbirii reprezintă un capital tehnic transferabil direct în acest nou domeniu de aplicații.
Park, T.J., Kanda, N., Dimitriadis, D., Han, K.J., Watanabe, S., & Narayanan, S. (2022). "A review of speaker diarization: Recent advances with deep learning." Computer Speech & Language, 72, 101317. https://doi.org/10.1016/j.csl.2021.101317
Dehak, N., Kenny, P.J., Dehak, R., Dumouchel, P., & Ouellet, P. (2011). "Front-End Factor Analysis for Speaker Verification." IEEE Transactions on Audio, Speech, and Language Processing, 19(4), 788-798. https://doi.org/10.1109/TASL.2010.2064307
Snyder, D., Garcia-Romero, D., Sell, G., Povey, D., & Khudanpur, S. (2018). "X-Vectors: Robust DNN Embeddings for Speaker Recognition." Proc. ICASSP, Calgary, Canada, pp. 5329-5333.
Jeon, H., Kim, Y., Kim, D., Kim, J., & Kim, J. (2017). "Empirical Study of Drone Sound Detection in Real-Life Environment with Deep Neural Network." Proc. 25th European Signal Processing Conference (EUSIPCO), Kos, Greece, pp. 1858-1862.
Al-Emadi, S., Al-Ali, A., Mohammad, A., & Al-Ali, A. (2019). "Audio-Based Drone Detection and Identification Using Deep Learning." Proc. 2019 15th International Wireless Communications & Mobile Computing Conference (IWCMC), pp. 459-464.
Davis, S.B., & Mermelstein, P. (1980). "Comparison of Parametric Representations for Monosyllabic Word Recognition in Continuously Spoken Sentences." IEEE Transactions on Acoustics, Speech, and Signal Processing, 28(4), 357-366. https://doi.org/10.1109/TASSP.1980.1163420
Reynolds, D.A., Quatieri, T.F., & Dunn, R.B. (2000). "Speaker Verification Using Adapted Gaussian Mixture Models." Digital Signal Processing, 10(1-3), 19-41. https://doi.org/10.1006/dspr.1999.0361
Anguera, X., Bozonnet, S., Evans, N., Fredouille, C., Friedland, G., & Vinyals, O. (2012). "Speaker Diarization: A Review of Recent Research." IEEE Transactions on Audio, Speech, and Language Processing, 20(2), 356-370. https://doi.org/10.1109/TASL.2011.2125954
Smus, B. (2013). Web Audio API: Advanced Sound for Games and Interactive Apps. O'Reilly Media. ISBN: 978-1-449-33268-5.
Human-in-the-loop: Keeping people at the center of AI
Miercuri, 23 septembrie, ora 18:00
Betfair Romania Development
Facebook Meetup StreamEvent YouTube