跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

使用 Faster-Whisper 实现本地实时语音转文本

如何在本地部署 Faster-Whisper 实现实时语音转文本功能。主要步骤包括安装 Python 环境及依赖库(faster-whisper, pyaudiowpatch),从 Hugging Face 下载模型文件,编写录音与转录脚本支持 GPU 或 CPU 推理。针对常见报错如 cuDNN 版本不匹配、cublas 动态库缺失等问题提供了具体的解决方案,例如降级 ctranslate2 版本或复制重命名 DLL 文件。最终实现了基于本地模型的离线语音识别功能。

DebugKing发布于 2026/4/5更新于 2026/10/24121 浏览
使用 Faster-Whisper 实现本地实时语音转文本

前言

要想实现语音输入功能,通常有两种主流方案:云端 API(轻量、准确度极高)和 本地模型(免费、隐私、无需联网)。本文记录一下使用 Faster-Whisper 实时语音输入转文本的部署过程。

Faster-Whisper 官网地址:https://github.com/SYSTRAN/faster-whisper

一、安装环境

在你的虚拟环境安装 faster-whisper,命令如下:

pip install faster-whisper 

安装录音库:

pip install pyaudiowpatch 

二、使用步骤

1. 下载模型

手动下载(离线使用):如果你的服务器无法联网,或者你想把模型放在指定文件夹,可以手动下载。根据需求点击链接下载:

  • 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. 实时录音转文本脚本

代码如下:

# -*- coding: utf-8 -*-
import os
import sys
import time
import wave
import tempfile
import threading
import torch
import pyaudiowpatch as 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,)
            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 进行推理")

    # 模型路径
    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. 报错解决方法

报错: Could not locate cudnn_ops64_9.dll. Please make sure it is in your library path! Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor

Faster-Whisper 所依赖的 CTranslate2 引擎是基于 cuDNN 9.x 版本编译的,如果电脑上没有找到 cuDNN v9,可以尝试安装旧版本:

pip install --force-reinstall ctranslate2==4.4.0

如果还是报错,可能是 CUDA 版本问题。找到你的 CUDA 安装在其他位置,例如 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\bin。 找到 cublas64_11.dll,复制出来,改成 cublas64_12.dll。

如果使用 CUDA 11.8 时报错 cuBLAS failed with status CUBLAS_STATUS_NOT_SUPPORTED,这是因为 PyTorch 自带 CUDA 11.8,但虚拟环境可能没有对应的 cublas64_12.dll。操作同上,找到虚拟环境中 torch\lib 下的 cublas64_11.dll,复制一份并改名为 cublas64_12.dll。

报错: Applying the VAD filter requires the onnxruntime package 将 onnxruntime 库版本降低即可,例如安装 1.19.2:

pip install onnxruntime==1.19.2

总结

通过以上步骤,即可完成 Faster-Whisper 的本地部署与实时语音转文本功能的实现。

目录

  1. 前言
  2. 一、安装环境
  3. 二、使用步骤
  4. 1. 下载模型
  5. 2. 实时录音转文本脚本
  6. -- coding: utf-8 --
  7. 录音切片时长(秒)
  8. 3. 报错解决方法
  9. 总结

更多推荐文章

查看全部
  • 互联网 Android 应用与车载系统开发对比及前景分析
  • Linux 系统安装 MinIO 详细教程
  • 用 AI 打造鸿蒙游戏 NPC 的开发体验与思考
  • Android 离线语音识别 (STT) 高效集成与性能优化
  • 2026 年 3 月全球大模型全景:国产登顶、百万上下文与智能体爆发
  • FPGA 实现 CIC 抽取滤波器
  • 16 个 Python 开发中必知的实用技巧与最佳实践
  • Unity VR 眼镜端高分辨率全景视频播放性能优化
  • Python 制作 Flappy Bird 游戏源码深度解析
  • 基于 DeepFace 和 OpenCV 的情绪分析器实现
  • Kafka 核心架构与分布式存储深度解析
  • Git Cherry-Pick 命令详解:精准挑选提交与冲突处理
  • 解决 Python 调用 subprocess 报错 c++ 编译器未找到问题
  • 10 款主流 AI 降重工具对比与选型建议
  • IDA Pro 详细使用教程与逆向分析基础
  • 算法实战:利用前缀和求解和为 K 的子数组
  • Spring Boot 整合 DL4J 构建智能写作助手
  • 数据结构:单向链表的基本操作
  • 前端独立产品设计全流程:掌握三大 AI 设计 Skill
  • OpenClaw 实战:WSL2 环境下使用 Python 调用摄像头

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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