Konekäännös · Englanninkielinen alkuperäinen
Äänen aktiivisuusdetektori Silero VAD
Saatavana on kaksi VAD -mallia: Pyannote -segmentointi - offline-eränkäsittelyssä suurella tarkkuudella ja Silero VAD - streaming low-latency detection.
Pyannote (Offline)
Pyannote segmentation-3.0 tarjoaa korkean tarkkuuden VAD:n käyttäen PyanNet-arkkitehtuuria. Se käsittelee puhetta 10-sekunnin liukuikkunassa 1 -sekuntiaskeleella, sitten yhdistää päällekkäisiä ennusteita ja soveltaa hysteriaa.
Arkkitehtuuri
| Vaihe | Yksityiskohdat |
|---|---|
| SincNet | 40 oppinutta kaistapassisuodatinta (80 yhteensä: 40 cos + 40 sin) |
| BiLSTM | 4 kerrosta, piilotettu=128, kaksisuuntainen (256-dim lähtö) |
| Lineaarinen | 2 lineaarista kerrosta, joissa on vuotoreLU (negatiivinen_slope=0,01) |
| Tuotos | 7-luokan softmax hystereesi jälkikäsittely |
Mallin koko: ~1.49M parametrit, ~5,7 MB levyllä.
Oletuskynnykset
- Onset:
0.767... .. - Offset:
0.377...
CLI-käyttö
# 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 on kevyt streaming-malli, joka käsittelee 512-näytteen paloja (32 ms 16 kHz:n kohdalla). Se toimii 23x reaaliaikaisesti julkaisutilassa, jolloin se soveltuu live-audiosovelluksiin.
Taustaosan jako: MLX ja CoreML ovat nyt molemmat oletuksena Silero v6.2.1 vienti: aufklarer/Silero-VAD-v6.2.1-MLX sekä aufklarer/Silero-VAD-v6.2.1-CoreML. Molemmat pitävät saman 32 ms streaming API.
Arkkitehtuuri
| Vaihe | Yksityiskohdat |
|---|---|
| STFT | Conv1d (1-258 kanavaa), vain oikeanpuoleinen heijastuslevy 64 |
| Koodain | 4x Conv1d + ReLU |
| LSTM | Piilotettu koko 128, tila kuljettaa yli paloja |
| Purkaja | Conv1d (128-1) LSTM:n piilotilassa, sigmoidin ulostulo |
Mallin koko: ~309K parametrit, ~1.2 MB levyllä.
Streaming valtion kone
Virtaus VAD -prosessori käyttää 4-tilaista konetta puhtaan puheen segmenttien tuottamiseen:
- hiljaisuus ...
- kulutusPuhe Aloitettu kynnys ylitettynä, odottaen puheen vähimmäiskestoa
- Puhe Vahvistettu puheen segmentti käynnissä
- menotHiljaisuus ... ..
Oletuskynnykset
- Käyttöönotto:
0.5 - Offset:
0.35 - Puheen vähimmäiskesto:
0.25s - Pienin hiljaisuuden kesto:
0.1s
CLI-käyttö
# 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
Valinnat
| Vaihtoehto | Koskee | Tavaran kuvaus |
|---|---|---|
--onset | Molemmat | Puheen alkamisen todennäköisyyskynnys |
--offset | Molemmat | Puheen kompensaation todennäköisyyskynnys |
--min-speech | Virtaaminen | Minimi puhesegmentin kesto (sekuntia) |
--min-silence | Virtaaminen | Pienin hiljaisuuden kesto loppuun segmenttiin (sekuntia) |
--engine | Virtaaminen | Päätelmämoottori: mlx tai coreml |
--json | Molemmat | JSON- tulostusmuoto |
Reaaliaikasovelluksissa käytetään speech vad-stream Silero VAD. Pyannote -malli edellyttää koko äänitiedostoa ja soveltuu paremmin offline-eräkäsittelyyn, jossa tarkkuus on etusijalla.
VAD kuulee vain hiljaisuuden, joten se ei erota lopullista lausetta tauosta. Smart Turn v3.2 - StreamingVADProcessor tai ajaa speech vad-stream --smart-turn Voit vahvistaa jokaisen tauon ennen segmentin loppua: lopullinen lause päättyy käännöksen välittömästi, keski-lause tauko jatkaa kuuntelemista.
Mallilataukset
| Malli | Taustaosa | Koko | HuggingFace |
|---|---|---|---|
| Silero-VAD-v6.2.1 | MLX | ~1.2 MB | aufklarer/Silero-VAD-v6.2.1-MLX |
| Silero-VAD-v6.2.1 | CoreML | ~1.2 MB | aufklarer/Silero-VAD-v6.2.1-CoreML |
| Pyannote-Segmentation-3.0 | MLX | ~5,7 Mt | aufklarer/Pyannote-segmentaatio-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")
}
}
Saatavana myös Android ja Linux & Windows puheydin kautta (ONNX Runtime) .