如何通过Rust PyO3从Whisper转录Python API提取文本
在Rust中通过PyO3提取Whisper transcribe结果的text字段
要提取transcribe返回字典里的text字段,你需要把PyO3返回的Python对象转换成字典类型,再提取对应键的值,最后转成Rust字符串。以下是修改后的代码:
use pyo3::prelude::*; use pyo3::types::{PyDict, 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 model = whisper.getattr("load_model")?.call1(model_args)?; println!("Model loaded"); // Whisper的model.transcribe可直接接收音频路径,无需提前调用load_audio let result = model.getattr("transcribe")?.call1((arg2,))?; println!("Transcribe completed"); // 将结果转换为PyDict类型 let result_dict = result.downcast::<PyDict>()?; // 提取text字段并转换为Rust String let text = result_dict.get_item("text")?.extract::<String>()?; println!("提取的文本内容:{}", text); Ok(()) }) }
关键说明:
- 简化调用流程:原代码单独调用
load_audio是多余的,Whisper的model.transcribe方法支持直接传入音频路径作为参数,减少代码步骤。 - 转换为PyDict:通过
downcast::<PyDict>()将返回的Python对象转为PyO3字典类型,就能像Python中一样访问键值对。 - 字段提取与类型转换:用
get_item("text")获取目标值,再通过extract::<String>()把Python字符串转换成Rust原生String,方便后续逻辑处理。 - 错误处理:全程保留
?操作符处理PyO3的错误,确保异常能被正确捕获和传递。
如果坚持要手动调用load_audio,只需把call1((arg2,))替换为call1((audio,)),提取text字段的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Zadeis
相关产品推荐
相关产品推荐

