#whisper #cpp #bindings #model #context #expect

whisper-rs-2

whisper.cpp的Rust绑定

2个版本

0.2.1 2022年11月3日
0.2.0 2022年11月1日

音频分类中排名#480

Unlicense

3MB
11K SLoC

C 6K SLoC // 0.1% comments C++ 3K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments Python 223 SLoC // 0.2% comments Objective-C 195 SLoC // 0.3% comments Shell 88 SLoC // 0.1% comments Batch 47 SLoC

whisper-rs

whisper.cpp的Rust绑定

用法

fn main() {
    // load a context and model
    let mut ctx = WhisperContext::new("path/to/model").expect("failed to load model");
    
    // create a params object
    let mut params = FullParams::new(DecodeStrategy::Greedy { n_past: 0 });

    // assume we have a buffer of audio data
    // here we'll make a fake one, floating point samples, 32 bit, 16KHz, mono
    let audio_data = vec![0_f32; 16000 * 2];

    // now we can run the model
    ctx.full(params, &audio_data[..])
        .expect("failed to run model");

    // fetch the results
    let num_segments = ctx.full_n_segments();
    for i in 0..num_segments {
        let segment = ctx.full_get_segment_text(i).expect("failed to get segment");
        let start_timestamp = ctx.full_get_segment_t0(i);
        let end_timestamp = ctx.full_get_segment_t1(i);
        println!("[{} - {}]: {}", start_timestamp, end_timestamp, segment);
    }
}

有关更多详细信息,请参阅examples/basic_use.rs

如果需要,可以公开低级别的绑定,但对于大多数用例,上面的应该足够。有关更多详细信息,请参阅文档:https://docs.rs/whisper-rs/

故障排除

  • 我在编译时遇到了很多未定义符号的错误!
    • 这些符号可能是C++标准库的一部分。
      • 尝试使用编译器标志-Clink-args=-lstdc++来链接它
      • RUSTFLAGS="-Clink-args=-lstdc++" cargobuild
  • Windows/macOS/Android不工作!
    • 我没有测试这些平台的方法,所以我真的帮不上忙。
      • 如果您能让它工作,请提交一个PR!
  • 在绑定生成构建期间出现panic!
    • 您可以尝试自行修复它,或者设置WHISPER_DONT_GENERATE_BINDINGS环境变量。这将跳过尝试构建绑定,并复制现有的一个。它们可能已经过时,但总比没有好。
      • WHISPER_DONT_GENERATE_BINDINGS=1cargo build
    • 如果您能修复问题,请提交一个PR!
  • M1构建信息

许可证

Unlicense

tl;dr: 公共领域

依赖项

~2.9–5MB
~112K SLoC