8个版本
0.1.0 | 2024年6月3日 |
---|---|
0.0.6 | 2024年4月30日 |
0.0.1 | 2024年3月25日 |
在多媒体类别中排名第174位
每月下载量
每月下载量:352次
自定义许可协议
大小:1.5MB
代码行数:649行(不包括注释)
语音活动检测器
提供模型和扩展,用于在音频中检测语音。
独立的语音活动检测器
该crate提供了一个独立的语音活动检测器(VAD),可用于预测音频块中的语音。此实现使用了Silero VAD。
VAD预测线性脉冲编码调制(LPCM)编码音频样本。这些可能是8位或16位整数,或者是32位浮点数。
模型使用256、512和768个样本的块大小进行训练,以16,000赫兹的采样率进行训练,使用512、768和1024个样本的块大小。这些值是推荐的最佳性能值,但不是必需的。底层模型的基本要求是采样率不能超过块大小的31.25倍。
fn main() -> Result<(), voice_activity_detector::Error> {
use voice_activity_detector::{VoiceActivityDetector};
let chunk = vec![0i16; 512];
let mut vad = VoiceActivityDetector::builder()
.sample_rate(8000)
.chunk_size(512usize)
.build()?;
let probability = vad.predict(chunk);
println!("probability: {}", probability);
Ok(())
}
传递给 predict
的样本将根据其长度被截断或填充。
扩展
音频流处理
预测迭代器和流
fn main() -> Result<(), voice_activity_detector::Error> {
use voice_activity_detector::{IteratorExt, VoiceActivityDetector};
let samples = [0i16; 5120];
let vad = VoiceActivityDetector::builder()
.sample_rate(8000)
.chunk_size(512usize)
.build()?;
let probabilities = samples.into_iter().predict(vad);
for (chunk, probability) in probabilities {
if probability > 0.5 {
println!("speech detected!");
}
}
Ok(())
}
标签迭代器和流
标签迭代器和流也处理音频样本流。而不是只返回每个块的语音概率,这些返回语音或非语音的标签。这个辅助函数允许添加额外的填充,以防止语音块的突然中断。
threshold
:介于0.0和1.0之间的值。大于或等于此值的概率将被认为是语音。padding_chunks
:为语音块添加额外的块。
fn main() -> Result<(), voice_activity_detector::Error> {
use voice_activity_detector::{LabeledAudio, IteratorExt, VoiceActivityDetector};
let samples = [0i16; 51200];
let vad = VoiceActivityDetector::builder()
.sample_rate(8000)
.chunk_size(512usize)
.build()?;
// This will label any audio chunks with a probability greater than 75% as speech,
// and label the 3 additional chunks before and after these chunks as speech.
let labels = samples.into_iter().label(vad, 0.75, 3);
for label in labels {
match label {
LabeledAudio::Speech(_) => println!("speech detected!"),
LabeledAudio::NonSpeech(_) => println!("non-speech detected!"),
}
}
Ok(())
}
功能标志
async
:启用结构体和函数与::future::Stream
一起工作。load-dynamic
:默认情况下,此库从微软下载预构建的ONNX Runtime。这对于大多数用例来说既方便又可以直接使用。对于需要更多控制的用例,此功能标志为load-dynamic
启用了ort
库的功能。请参阅ort库文档
这不会链接到任何动态库,而是使用dlopen()在运行时加载库。这可以用来控制ONNX Runtime二进制文件的路径(意味着它们不必直接位于您的可执行文件旁边),并避免共享库地狱。要使用此功能,请启用load-dynamic Cargo功能,并将ORT_DYLIB_PATH环境变量设置为onnxruntime.dll/libonnxruntime.so/libonnxruntime.dylib的路径 - 您也可以使用相对路径,例如ORT_DYLIB_PATH=./libonnxruntime.so(它将相对于可执行文件)。为了方便起见,您应该下载或编译ONNX Runtime二进制文件,将它们放入永久位置,并永久设置环境变量。
更多示例
请参阅测试目录以获取更多示例。
限制
语音活动检测器和辅助函数仅在单声道音频流上工作。如果您的用例涉及多个通道,您需要根据需要拆分通道并可能再次交织它们。
我们目前还没有对所有平台的功能进行验证,以下是我们测试的平台:| Windows | macOS | Linux | | :-----: | :---: | :---: | | 🟢 | 🟢 | 🟢 |
🟢 = 可用
🔵 = 目前正在开发中
🟡 = 目前尚未测试
🔴 = 目前无法使用(可能在未来使用)
依赖
~3.5–9MB
~84K SLoC