ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Whisper.cpp 离线语音识别实战:不联网,三步跑通本地语音转文字

Whisper.cpp 离线语音识别实战:不联网,三步跑通本地语音转文字 Whisper.cpp 离线语音识别实战不联网三步跑通本地语音转文字【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp你需要把两小时会议录音转成文字但录音涉及商业机密上传给云端 API 有隐私风险而会议室根本没有网络Whisper.cpp 就是为这类场景准备的它是 OpenAI Whisper 语音识别模型的 C/C 移植在你自己的电脑或设备上完成离线语音识别全程不碰网络。这篇文章带你从克隆仓库到输出第一条转写结果再进阶到批量字幕、麦克风实时转写和程序集成。 项目速览它是什么、适合谁项目说明一句话定位OpenAI Whisper 模型的高性能 C/C 移植版纯本地推理解决的问题无网络、重隐私环境下的语音转文字零 API 费用适合谁新手3 条命令出结果开发者通过 C API 嵌入自己的应用支持平台macOS、Linux、Windows、iOS、Android、WebAssembly、树莓派模型档位从 tiny内存约 273 MB到 large-v3约 3.9 GB共 8 档另有量化版本代码构成核心实现集中在 include/whisper.h 和 src/whisper.cpp底层计算来自自带的 ggml 库 快速上手三条命令跑通本地语音转文字先跑通再谈原理。整个过程只需四步仓库自带一条 12 秒的示例音频 samples/jfk.wav。# 1. 克隆仓库 git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp # 2. 编译需要 CMake 和 C 编译器 cmake -B build cmake --build build --config Release # 3. 下载 base.en 模型约 142 MB bash models/download-ggml-model.sh base.en # 4. 转写示例音频 ./build/bin/whisper-cli -f samples/jfk.wav -m models/ggml-base.en.bin你会看到类似这样的输出时间戳 文本[00:00:00 -- 00:00:04] And so my fellow Americans... [00:00:04 -- 00:00:12] ask not what your country will do for you...想省步骤的话直接执行make base.en也可以它会自动下载模型、编译并跑完 samples 目录下所有 WAV 文件。注意命令行工具目前只接受16-bit WAV格式。手头是 MP3 或 OGG 时先用 ffmpeg 转一下ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le input.wav 原理与模型选择规模、内存、精度怎么权衡Whisper 的架构是编码器 解码器编码器把 16 kHz 的音频切成 30 秒的块做特征提取解码器逐段吐出文本并给出时间戳。Whisper.cpp 做的事情就是把这套模型搬到本地用 ggml 张量库做推理并对 CPU 指令集x86 的 AVX、ARM 的 NEON和 GPUApple Metal、NVIDIA CUDA 等做了优化。你唯一要做的选择是模型档位。带.en后缀的是纯英文模型更小更快不带后缀的是多语言模型可识别数十种语言并用--translate翻译成英文。模型磁盘占用内存占用适用判断tiny / tiny.en75 MiB~273 MB资源受限设备、实时场景速度优先base / base.en142 MiB~388 MB默认推荐速度与准确率平衡点small / small.en466 MiB~852 MB需要更高准确率普通电脑可跑medium / medium.en1.5 GiB~2.1 GB高精度需求内存要够large-v1/v2/v32.9 GiB~3.9 GB精度天花板建议配 GPU 或量化版下载任意档位都用同一个脚本 models/download-ggml-model.sh# 不带参数运行可查看当前支持的全部模型 bash models/download-ggml-model.sh small经验法则先拿base.en英文或base多语言验证流程效果不满意再升档不要一上来就下 3 GB 的 large。 分场景实战批量字幕、实时转写与程序集成场景一批量转写并导出字幕会议录音、播客剪辑whisper-cli支持一次传入多个文件并能直接产出 txt / srt / vtt 等格式不用自己解析# 中文录音指定语言 同时导出文本和 SRT 字幕 ./build/bin/whisper-cli -l zh -otxt -osrt -of output/note meeting1.wav meeting2.wav # 不确定语言时先只检测不转写 ./build/bin/whisper-cli -m models/ggml-small.bin -dl -f podcast.mp3.wav常用参数速记-l LANG指定语言auto自动检测、-tr翻译成英文、-t N线程数、-of输出前缀、--prompt ...给解码器一段提示词比如专有名词可减少同音字错误。完整列表用./build/bin/whisper-cli -h查看。如果习惯用脚本处理examples/python/whisper_processor.py 提供了一个现成的 Python 封装调用转写并返回文本适合快速写批处理逻辑。场景二麦克风实时转写语音助手、现场记录examples/stream 目录下的whisper-stream工具从麦克风持续采样并滚动转写。它依赖 SDL2 采集音频需要先安装并重新编译# Debian/Ubuntu 或 macOS sudo apt-get install libsdl2-dev # macOS 则用: brew install sdl2 cmake -B build -DWHISPER_SDL2ON cmake --build build --config Release # 每 500ms 处理最近 5 秒音频 ./build/bin/whisper-stream -m models/ggml-base.en.bin -t 8 --step 500 --length 5000更省资源的用法是滑动窗口模式--step 0开启 VAD语音活动检测只有检测到说话时才转写适合长时间挂机录音./build/bin/whisper-stream -m models/ggml-base.en.bin -t 6 --step 0 --length 30000 -vth 0.6-vth是 VAD 阈值调高会更容易判定为静音可按实际环境微调0.6 是通用起点。场景三嵌入你自己的 C 程序核心库的 C 接口非常薄官方用法示例就写在 include/whisper.h 的头部注释里。最小集成流程如下pcmf32是你准备好的 16 kHz、单声道、32-bit float 音频数组#include whisper.h // 1. 加载模型创建上下文 whisper_context_params cparams whisper_context_default_params(); struct whisper_context * ctx whisper_init_from_file_with_params(models/ggml-base.en.bin, cparams); // 2. 配置推理参数并执行转写 struct whisper_full_params params whisper_full_default_params(WHISPER_SAMPLING_STRATEGY_GREEDY); params.language en; params.n_threads 4; if (whisper_full(ctx, params, pcmf32.data(), pcmf32.size()) ! 0) { fprintf(stderr, 转写失败\n); return 1; } // 3. 逐段取结果文本 时间戳 for (int i 0; i whisper_full_n_segments(ctx); i) { printf([%5d - %5d] %s, whisper_full_get_segment_t0(ctx, i) / 10, whisper_full_get_segment_t1(ctx, i) / 10, whisper_full_get_segment_text(ctx, i)); } whisper_free(ctx);模型上下文只创建一次之后可以对任意多段音频复用ctx这是多线程批量处理的关键。不写 C 也没关系仓库自带 Go 绑定、Java 绑定、Ruby 和 JavaScript 绑定移动端还有现成的 Android 示例 和 iOS 示例可参考。⚙️ 进阶调优量化、线程数与性能测量量化把模型权重压成低比特整数磁盘和内存占用明显下降推理还可能更快代价是少量精度损失。用仓库自带的 quantize 工具 生成量化模型./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0 ./build/bin/whisper-cli -m models/ggml-base.en-q5_0.bin -f samples/jfk.wav内存紧张时优先上量化版追求极限精度才用全精度。线程数-t N控制计算线程。简单策略CPU 物理核心数减一。线程不是越多越好开多了上下文切换反而拖慢长音频。量化你的硬件whisper-bench工具用随机音频只跑编码器部分并计时方便对比不同模型/线程数/GPU 组合的相对速度./build/bin/whisper-bench -m models/ggml-small.en.bin -t 4GPUApple Silicon 上 Metal 加速是默认行为NVIDIA 显卡和 Vulkan 通过对应的 CMake 编译选项开启。如果你的机器有合适的 GPU同档位模型的吞吐通常能上一个台阶。 排错速查从现象到解决现象原因解决报错提示音频格式不支持工具只收 16-bit WAV你的文件是 MP3/OGG用ffmpeg -i in.mp3 -ar 16000 -ac 1 -c:a pcm_s16le out.wav转换下载模型失败或中途断掉网络问题重新运行下载脚本即可续传也可手动下载ggml-模型名.bin放进 models/ 目录中文音频输出的全是英文用了.en纯英文模型换多语言模型如bash models/download-ggml-model.sh base并用-l zh转写结果夹杂乱码或重复解码器对噪声/长静音过度推测降低-lptlogprob 阈值绝对值或换更大的模型速度太慢线程没开满或模型太大加-t参数、换量化版或更小档位有 GPU 就启用 GPU内存不足崩溃模型档位超过可用内存看上面的内存占用表降档或用 q5_0 量化模型找不到whisper-stream默认编译未包含 SDL2 工具用cmake -B build -DWHISPER_SDL2ON重新编译时间戳和实际说话位置对不上音频前面有大量静音用-ot N毫秒偏移或裁剪音频起点 延伸资源与下一步仓库里值得翻的角落examples/CLI、实时流、服务器接口、Android/iOS 完整工程等所有示例程序bindings/Go、Java、Ruby、JavaScript 语言绑定tests/ 与 tests/run-tests.sh各模型的标准测试与参考输出models/README.md模型格式与转换脚本说明README.md平台支持、GPU 选项、基准数据的总入口下一步建议先编译好仓库、跑通jfk.wav再拿一段自己领域的真实录音会议、课程、访谈测一遍准确率和速度最后根据场景定下模型档位 线程数的组合。离线语音识别这条路你现在已经跑通了前九步。【免费下载链接】whisper.cppPort of OpenAIs Whisper model in C/C项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表