You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 16:42:24