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

Faster-Whisper 本地实时语音识别部署实战

Faster-Whisper 本地部署方案,无需联网即可实现高精度语音转文字。涵盖环境配置、模型下载及核心代码实现,重点解决 cuDNN 版本冲突与依赖报错问题,适合隐私敏感场景的实时语音识别应用。

MqEngine发布于 2026/4/10更新于 2026/9/1063 浏览
Faster-Whisper 本地实时语音识别部署实战

前言

实现语音输入功能通常有两种主流方案:云端 API(轻量、准确度高)和本地模型(免费、隐私保护、无需联网)。对于需要处理敏感数据或离线环境的场景,本地部署是更优选择。本文记录使用 Faster-Whisper 进行实时语音转文本的完整流程,该框架基于 Whisper 优化,推理速度更快。

环境安装

在虚拟环境中安装核心依赖。注意,pyaudio 用于录音,faster-whisper 负责模型推理。

pip install faster-whisper pyaudio

若需 GPU 加速,请确保已正确安装 CUDA 和 cuDNN 环境。

模型准备

Faster-Whisper 支持多种模型尺寸,可根据硬件性能选择。如果服务器无法联网,可手动下载模型文件至指定目录。

推荐模型及下载地址:

  • 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

代码实现

以下是完整的实时录音转文本脚本。代码中使用了 threading 来分离录音与转录过程,避免阻塞主线程。

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


AUDIO_BUFFER = 

 ():
    
     tempfile.NamedTemporaryFile(suffix=, delete=)  f:
        filename = f.name
        wave_file = wave.(filename, )
        wave_file.setnchannels((device[]))
        wave_file.setsampwidth(p.get_sample_size(pyaudio.paInt16))
        wave_file.setframerate((device[]))

     ():
        
        wave_file.writeframes(in_data)
         (in_data, pyaudio.paContinue)

    :
        stream = p.(=pyaudio.paInt16,
                        channels=(device[]),
                        rate=(device[]),
                        frames_per_buffer=,
                        =,
                        input_device_index=device[],
                        stream_callback=callback,)
        time.sleep(AUDIO_BUFFER)  
     Exception  e:
        ()
    :
           ():
            stream.stop_stream()
            stream.close()
        wave_file.close()
     filename

 ():
    
    :
        
        segments, info = model.transcribe(
            filename,
            beam_size=,
            language=,
            vad_filter=,
            vad_parameters=(min_silence_duration_ms=)
        )
         segment  segments:
            ( % (segment.start, segment.end, segment.text))
     Exception  e:
        ()
    :
        
         os.path.exists(filename):
            os.remove(filename)

 ():
    ()
    
     torch.cuda.is_available():
        device = 
        compute_type =   
        ()
    :
        device = 
        compute_type =   
        ()

    
    model_path = 
    :
        model = WhisperModel(model_path, device=device, compute_type=compute_type, local_files_only=)
        ()
     Exception  e:
        ()
        

     pyaudio.PyAudio()  p:
        :
            default_mic = p.get_default_input_device_info()
            ()
            ()
            ( * )
            ()
             :
                filename = record_audio(p, default_mic)
                thread = threading.Thread(target=whisper_audio, args=(filename, model))
                thread.start()
         OSError:
            ()
         KeyboardInterrupt:
            ()
         Exception  e:
            ()

 __name__ == :
    main()
import
import
import
import
import
import
import
from
import
# 录音切片时长(秒)
5
def
record_audio
p, device
# 创建临时文件存储音频
with
".wav"
False
as
open
"wb"
int
"maxInputChannels"
int
"defaultSampleRate"
def
callback
in_data, frame_count, time_info, status
"""写入音频帧"""
return
try
open
format
int
"maxInputChannels"
int
"defaultSampleRate"
1024
input
True
"index"
# 阻塞主线程进行录音
except
as
print
f"录音出错:{e}"
finally
if
'stream'
in
locals
return
def
whisper_audio
filename, model
"""调用模型进行转录"""
try
# vad_filter=True 可以去掉没说话的静音片段
5
"zh"
True
dict
500
for
in
print
"[%.2fs -> %.2fs] %s"
except
as
print
f"转录出错:{e}"
finally
# 转录完成后删除临时文件
if
def
main
print
"正在加载 Whisper 模型..."
# 检查 GPU
if
"cuda"
"float16"
# 或者 "int8_float16"
print
"使用 GPU (CUDA) 进行推理"
else
"cpu"
"int8"
# CPU 上推荐用 int8
print
"使用 CPU 进行推理"
# 模型路径,指向下载的模型文件夹
"large-v3"
try
True
print
"模型加载成功!"
except
as
print
f"模型加载失败:{e}"
return
with
as
try
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
except
print
"未找到默认麦克风,请检查系统声音设置。"
except
print
"\n停止录音,程序退出。"
except
as
print
f"\n发生未知错误:{e}"
if
"__main__"

常见问题排查

1. cuDNN 版本冲突

报错提示 Could not locate cudnn_ops64_9.dll 或 Invalid handle。 Faster-Whisper 依赖的 CTranslate2 引擎可能基于较新的 cuDNN 编译,而本地环境不匹配。尝试降级 CTranslate2 版本:

pip install --force-reinstall ctranslate2==4.4.0

2. DLL 缺失问题

若报错找不到 cublas64_12.dll,但实际使用的是 CUDA 11.x 版本。 找到你的 CUDA 安装目录下的 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

总结

通过上述步骤,即可在本地搭建一套高效的实时语音识别系统。重点在于环境依赖的版本匹配,尤其是 cuDNN 与 CTranslate2 的兼容性。遇到 DLL 报错时,灵活调整库文件名称往往能快速解决问题。

目录

  1. 前言
  2. 环境安装
  3. 模型准备
  4. 代码实现
  5. -- coding: utf-8 --
  6. 录音切片时长(秒)
  7. 常见问题排查
  8. 1. cuDNN 版本冲突
  9. 2. DLL 缺失问题
  10. 3. VAD 过滤报错
  11. 总结

更多推荐文章

查看全部
  • 基于 Java 的无人共享宠物洗澡物联网系统设计与实现
  • 基于 Java + SpringBoot + Vue 的图书大厦管理系统设计与实现
  • Linux 动静态库与 ELF 加载全解析:从制作到底层原理
  • Windows 系统配置 AI 工具网络代理及一键切换脚本
  • 基于Java的供应链预测性分析引擎构建
  • OpenClaw Gateway Windows 开机自启与 Dashboard 自动打开方案
  • GitHub 教育优惠及 Copilot Pro 申请全流程指南
  • C++ STL 哈希表原理与实现详解
  • 2024 年中国 AI+ 营销趋势洞察与企业落地建议报告
  • 反射内存卡原理:PCIE-5565 底层架构与 FPGA 设计解析
  • Claude Code 开源平替:OpenCode 搭配 GitHub Copilot 实战
  • Java 构建个性化旅游系统技术方案
  • AI 开发核心概念:Skill、MCP 与 Function Call 详解
  • AI 大模型入门:文心一言与百度 AI 战略
  • Java OCR 快速集成:基于 PaddleOCR 的实战指南
  • 从焦虑到掌控:AI 时代的超级能动性与系统思维
  • 法律人使用 AI 大模型指南:Prompt 工程与场景应用
  • AI 重构产品工作流:为何“人人都是产品经理”终成现实
  • 基于 PHP 与 Vue.js 的商城电商网站设计与实现
  • 后端转前端:一份实用的技术路线图

相关免费在线工具

  • 加密/解密文本

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