我尝试通过PyO 3 rust代码使用Python whisper speech to text API。
对于这里找到的whisper github上给出的例子
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
它只提供文本。这是有意义的,因为它提供了在dict中打印“text”值的逻辑。
我的rust程序如下:
use pyo3::prelude::*;
use pyo3::types::PyTuple;
fn main() -> PyResult<()> {
let arg1 = "tiny";
let arg2 = "/test_dir/test/Test3.opus";
Python::with_gil(|py| {
let whisper = PyModule::import(py, "whisper")?;
let model_args = PyTuple::new(py, &[arg1]);
let audio_args = PyTuple::new(py, &[arg2]);
let model = whisper
.getattr("load_model")?
.call1(model_args)?;
//.extract()?;
println!("Model loaded");
let audio = whisper
.getattr("load_audio")?
.call1(audio_args)?;
println!("Audio loaded");
let result_args = PyTuple::new(py, &[model, audio]);
println!("Arguments setup");
let result = whisper
.getattr("transcribe")?
.call1(result_args)?;
println!("Output is: {}", result);
Ok(())
})
}
我遇到的问题是,虽然我确实得到了一个输出,但它不仅仅是文本,而是转录返回的dict输出的所有三个部分。这意味着当我只需要文本时,它会输出文本、片段和语言。
在查看PyO 3文档时,我似乎无法确定如何从输出中获取文本。
这可能是一些基本的东西,我忽略了,但任何建议是赞赏,因为我是新的生 rust !
1条答案
按热度按时间fwzugrvs1#
欢迎来到SO!我打赌你的
result
是PyDict。如果是这样的话,你可能会得到以下文本: