如何通过Rust PyO3从Whisper转录python API中提取文本

owfi6suc  于 2023-05-05  发布在  Python
关注(0)|答案(1)|浏览(118)

我尝试通过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 !

fwzugrvs

fwzugrvs1#

欢迎来到SO!我打赌你的resultPyDict。如果是这样的话,你可能会得到以下文本:

let text = result.get_item("text");

相关问题