跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

Faster-Whisper 本地部署:实现实时语音转文本实战指南

综述由AI生成本地部署 Faster-Whisper 可实现离线实时语音转文本,适合隐私保护场景。本文演示了环境配置、模型下载及 Python 脚本编写流程,重点解决了 cuDNN 版本冲突、DLL 缺失及 onnxruntime 兼容性等常见问题,提供了降级依赖和重命名动态库等实用修复方案。

SparkGeek发布于 2026/3/23更新于 2026/5/78 浏览
Faster-Whisper 本地部署:实现实时语音转文本实战指南

前言

要实现类似豆包、微信的语音输入功能,通常有两种主流方案:云端 API(轻量、准确度高)和本地模型(免费、隐私好、无需联网)。如果开发场景需要添加语音识别且对数据隐私有要求,本地部署 Faster-Whisper 是个不错的选择。

Faster-Whisper 是 Whisper 的高效实现版本,支持多种量化级别和硬件加速。下面记录一下如何在本地环境部署并实现实时语音转文本。

一、安装环境

首先确保你的虚拟环境中安装了必要的依赖。核心库是 faster-whisper,录音部分使用 pyaudio。

pip install faster-whisper pyaudio

如果有 NVIDIA 显卡,建议提前配置好 CUDA 和 cuDNN 环境,否则推理速度会受限。具体安装步骤可参考官方文档或相关技术社区教程。

二、使用步骤

1. 下载模型

如果你希望离线使用,或者想把模型文件放在指定目录,可以手动从 Hugging Face 下载。根据需求选择合适的模型大小:

  • Tiny (最小/最快): Systran/faster-whisper-tiny
  • Base: Systran/faster-whisper-base
  • Small: Systran/faster-whisper-small
  • Medium: Systran/faster-whisper-medium
  • Large-v2: Systran/faster-whisper-large-v2
  • Large-v3 (效果最好): Systran/faster-whisper-large-v3
  • Distil-Large-v3 (蒸馏版/速度快): Systran/faster-distil-whisper-large-v3

在 Hugging Face 的 "Files and versions" 页面中,下载以下几个关键文件并存入同一个文件夹:

  • config.json
  • model.bin
  • tokenizer.json
  • vocabulary.json
  • preprocessor_config.json

2. 实时录音转文本脚本

下面是完整的 Python 脚本示例。代码中使用了多线程来分离录音和转录过程,避免阻塞主循环。

# -*- coding: utf-8 -*-
import os
import sys
import time
import wave
import tempfile
import threading
import torch
import pyaudio
from faster_whisper import WhisperModel

# 录音切片时长(秒)
AUDIO_BUFFER = 5

def record_audio(p, device):
    """创建临时文件进行录音"""
    with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as f:
        filename = f.name
        wave_file = wave.open(filename, "wb")
        wave_file.setnchannels(int(device["maxInputChannels"]))
        wave_file.setsampwidth(p.get_sample_size(pyaudio.paInt16))
        wave_file.setframerate(int(device["defaultSampleRate"]))

    def callback(in_data, frame_count, time_info, status):
        """写入音频帧回调函数"""
        wave_file.writeframes(in_data)
        return (in_data, pyaudio.paContinue)

    try:
        stream = p.open(format=pyaudio.paInt16,
                        channels=int(device["maxInputChannels"]),
                        rate=int(device["defaultSampleRate"]),
                        frames_per_buffer=1024,
                        input=True,
                        input_device_index=device["index"],
                        stream_callback=callback)
        
        stream.start_stream()
        time.sleep(AUDIO_BUFFER)  # 阻塞主线程进行录音
    except Exception as e:
        print(f"录音出错:{e}")
    finally:
        if 'stream' in locals():
            stream.stop_stream()
            stream.close()
        wave_file.close()
        return filename

def whisper_audio(filename, model):
    """调用模型进行转录"""
    try:
        # vad_filter=True 可以去掉没说话的静音片段,提升效率
        segments, info = model.transcribe(
            filename,
            beam_size=5,
            language="zh",
            vad_filter=True,
            vad_parameters=dict(min_silence_duration_ms=500)
        )
        for segment in segments:
            print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))
    except Exception as e:
        print(f"转录出错:{e}")
    finally:
        # 转录完成后删除临时文件
        if os.path.exists(filename):
            os.remove(filename)

def main():
    print("正在加载 Whisper 模型...")
    # 检查 GPU
    if torch.cuda.is_available():
        device = "cuda"
        compute_type = "float16"  # 或者 "int8_float16"
        print("使用 GPU (CUDA) 进行推理")
    else:
        device = "cpu"
        compute_type = "int8"  # CPU 上推荐用 int8 以节省内存
        print("使用 CPU 进行推理")

    # 模型路径,设置为 local_files_only=True 强制使用本地文件
    model_path = "large-v3"
    try:
        model = WhisperModel(model_path, device=device, compute_type=compute_type, local_files_only=True)
        print("模型加载成功!")
    except Exception as e:
        print(f"模型加载失败:{e}")
        return

    with pyaudio.PyAudio() as p:
        try:
            default_mic = p.get_default_input_device_info()
            print(f"\n当前使用的麦克风:{default_mic['name']} (Index: {default_mic['index']})")
            print(f"采样率:{default_mic['defaultSampleRate']}, 通道数:{default_mic['maxInputChannels']}")
            print("-" * 50)
            print("开始持续录音 (按 Ctrl+C 停止)...")
            while True:
                filename = record_audio(p, default_mic)
                thread = threading.Thread(target=whisper_audio, args=(filename, model))
                thread.start()
        except OSError:
            print("未找到默认麦克风,请检查系统声音设置。")
        except KeyboardInterrupt:
            print("\n停止录音,程序退出。")
        except Exception as e:
            print(f"\n发生未知错误:{e}")

if __name__ == '__main__':
    main()

3. 报错解决方法

在实际运行中,可能会遇到一些依赖冲突问题,以下是常见解决方案:

问题 1:cuDNN 版本不匹配 报错信息类似:Could not locate cudnn_ops64_9.dll 或 Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor。

这是因为 Faster-Whisper 底层依赖的 CTranslate2 引擎是基于 cuDNN 9.x 版本编译的,而你的系统可能没有安装对应版本。可以尝试降级 ctranslate2 到兼容旧版本的稳定版:

pip install --force-reinstall ctranslate2==4.4.0

问题 2:cublas DLL 缺失 如果仍然报错找不到 cublas64_12.dll,可能是 CUDA 版本与 PyTorch 不匹配。例如虚拟环境使用的是 CUDA 11.8,但缺少对应的动态库。

你可以尝试将现有的 cublas64_11.dll 复制一份并重命名为 cublas64_12.dll,放置在 PyTorch 的 lib 目录下(如 Lib\site-packages\torch\lib)。这属于一种变通方法,用于解决版本标识不一致的问题。

问题 3:VAD 滤镜依赖 报错提示:Applying the VAD filter requires the onnxruntime package。

降低 onnxruntime 版本通常能解决兼容性问题:

pip install onnxruntime==1.19.2

总结

通过上述步骤,你可以在本地快速搭建起基于 Faster-Whisper 的实时语音识别服务。虽然过程中可能会遇到一些依赖版本冲突,但只要理清 CUDA、cuDNN 和 PyTorch 的版本关系,大部分问题都能迎刃而解。这种方式特别适合对隐私敏感或网络环境受限的场景。

目录

  1. 前言
  2. 一、安装环境
  3. 二、使用步骤
  4. 1. 下载模型
  5. 2. 实时录音转文本脚本
  6. -- coding: utf-8 --
  7. 录音切片时长(秒)
  8. 3. 报错解决方法
  9. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • DeepSeek-R1-Distill-Qwen-1.5B 本地部署:vLLM+Open-WebUI 环境搭建
  • MCP 插件实战:browser-tools-mcp 配置与使用指南
  • 计算机专业在 AI 浪潮下的学习路径:从代码写手到系统掌舵者
  • FPGA 实现 CAN 总线原理与 Verilog 代码详解
  • WhisperX 语音识别工具:为何比传统方案更具优势
  • 在昇腾 NPU 上部署 Llama 2 模型:性能测试与优化实战
  • Qwen3-VL 基于 LLaMA-Factory 微调与部署实战指南
  • 昇腾 CANN 技术栈解析:Python、C++ 与算子开发选型指南
  • BK7258 接入 LiveKit WebRTC:端侧适配实践
  • Android 离线应用核心组件解析:dev-summit-architecture-demo 架构
  • 基于 OpenCode + OpenSpec 的企业级 AI Coding 工程化落地实践
  • Python 七大主流就业方向详解:薪资、技能与前景
  • OpenClaw Java:基于 Spring Boot 的 AI Agent Gateway 全栈实践
  • AI 时代创作者的核心身份与生存法则
  • 位运算实战:位图与异或技巧解析高频算法题
  • 即梦 AI 基础操作入门教程
  • 数据结构:堆排序、冒泡排序与 Hoare 快排实战
  • Whisper.cpp 与 Paraformer 本地语音识别性能实测
  • 深度解析 GitHub Copilot Agent Skills:如何打造可跨项目的 AI 专属“工具箱”
  • Flutter 与 Web 混合开发实践:构建跨平台统一体验

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online