Traducere automată · Originalul în engleză
Activitatea vocală Deviaţie Silero VAD
Două modele VAD sunt disponibile: Pyannote segmentare pentru prelucrarea pe loturi offline cu mare precizie și Silero VAD pentru detectarea de joasă altitudine.
Pyannote (Offline)
Pyannote segmentation-3.0 oferă o precizie ridicată VAD folosind o arhitectură PyanNet. Procesează vorbirea în ferestre glisante de 10 secunde cu o treaptă de 1 secundă, apoi agregatele suprapuse predicțiilor și aplică netezirea histerezei.
Arhitectură
| Etape | Detalii |
|---|---|
| SincNet | 40 de filtre de tip bandpass învăţate (în total 80: 40 cos + 40 de păcate) |
| BiLSTM | 4 straturi, ascunse=128, bidirecționale (256-dim) |
| Liniar | Straturi lineare 2 cu LeakyReLU (negativ_slopă=0.01) |
| Ieșire | Softmax de 7 clase cu histereză post-procesare |
Mărime model: ~1.49M parametri, ~5.7 MB pe disc.
Praguri implicite
- Debut:
0.767probabilitate peste care se detectează vorbirea - Offset:
0.377probabilitate sub care se termină vorbirea
Utilizarea CLI
# Offline VAD
.build/release/speech vad recording.wav
# JSON output
.build/release/speech vad recording.wav --json
# Custom thresholds
.build/release/speech vad recording.wav --onset 0.6 --offset 0.3
Silero VAD (Streaming)
Silero VAD este un model de streaming ușor care procesează 512 bucăți de eșantion (32 ms la 16 kHz). Se execută la 23x în timp real în modul de eliberare, ceea ce îl face potrivit pentru aplicații audio live.
Spațiu suport: MLX și CoreML ambele acum implicit la Silero v6.2.1 exporturi: aufklarer/Silero-VAD-v6.2.1-MLX şi aufklarer/Silero-VAD-v6.2.1-CoreML Ambele păstrează același 32 ms streaming API.
Arhitectură
| Etape | Detalii |
|---|---|
| STFT | Conv1d (1 până la 258 canale), pad-ul de reflexie numai pentru dreptul de 64 |
| Codor | 4x Conv1d + ReLU |
| LSTM | Mărimea ascunsă 128, starea transportată peste bucăți |
| Decodor | Conv1d (128 până la 1) pe starea ascunsă LSTM, ieșire sigmoidală |
Mărime model: ~309K parametri, ~1.2 MB pe disc.
Masina de stat de streaming
Procesorul de streaming VAD utilizează o mașină de 4 state pentru a produce segmente de vorbire curate:
- silence
- pendingSpeech
- Discurs
- PendingSilence
Praguri implicite
- Debut:
0.5 - Offset:
0.35 - Durata minimă a vorbirii:
0.25s - Durata minimă de tăcere:
0.1s
Utilizarea CLI
# Streaming VAD
.build/release/speech vad-stream recording.wav
# Custom thresholds
.build/release/speech vad-stream recording.wav --onset 0.6 --offset 0.3
# Minimum durations
.build/release/speech vad-stream recording.wav --min-speech 0.5 --min-silence 0.2
# Choose engine
.build/release/speech vad-stream recording.wav --engine coreml
Opțiuni
| Opțiune | Se aplică | Descriere |
|---|---|---|
--onset | Ambele | Prag de probabilitate la debutul vorbirii |
--offset | Ambele | Prag de probabilitate de compensare a vorbirii |
--min-speech | Streaming | Durata minimă a segmentului de vorbire (secunde) |
--min-silence | Streaming | Durata minimă de tăcere până la segmentul final (secunde) |
--engine | Streaming | Motor de referință: mlx sau coreml |
--json | Ambele | Format de ieșire JSON |
Pentru aplicaţii în timp real, utilizaţi speech vad-stream cu Silero VAD. Modelul Pyannote necesită fişierul audio complet şi este mai potrivit pentru procesarea pe loturi offline, unde precizia este prioritatea.
A VAD aude doar tăcerea, astfel încât nu poate spune o propoziţie terminată dintr-o pauză de la mijlocul secvenţei. Ataşaţi Smart Turn v3.2 la StreamingVADProcessor sau rulaţi speech vad-stream --smart-turn
Modele de descărcări
| Model | Platformă | Dimensiune | HuggingFace |
|---|---|---|---|
| Silero-VAD-v6.2.1 | MLX | ~1.2 MO | aufklater/Silero-VAD-v6.2.1-MLX |
| Silero-VAD-v6.2.1 | CoreML | ~1.2 MO | aufklater/Silero-VAD-v6.2.1-CoreML |
| Pyannote-Segmentation-3.0 | MLX | ~5,7 MO | aufklarer/Pyannote-Segmentation-MLX |
Swift API
import SpeechVAD
// Offline VAD (Pyannote)
let pyannote = try await PyannoteVADModel.fromPretrained()
let segments = pyannote.detectSpeech(audio: samples, sampleRate: 16000)
for segment in segments {
print("\(segment.startTime)s - \(segment.endTime)s")
}
// Streaming VAD (Silero)
let silero = try await SileroVADModel.fromPretrained()
let processor = StreamingVADProcessor(model: silero, config: .sileroDefault)
for event in processor.process(samples: audioBuffer) {
switch event {
case .speechStarted(let time):
print("Speech started at \(time)s")
case .speechEnded(let segment):
print("Speech: \(segment.startTime)s - \(segment.endTime)s")
}
}
De asemenea, disponibil la Android și la Linux & Windows prin Core de vorbire (ONNX Runtime).