如果你有把mp3音频转成中文文本、并且不想调用任何云端API的需求,那么本文提供了一个可行的方案。
OS:Ubuntu 20.04 LTS(MacOS类似可用)

我们首先要知道几个背景知识:
➤ whisper.cpp 是一个开源的 C/C++ 实现,用于运行 OpenAI 的 Whisper 模型。Whisper 是一种先进的自动语音识别(Automatic Speech Recognition, ASR)神经网络模型,能够将音频转换为文本。它支持多种语言,识别效果精准,并且可以完全离线运行,无需互联网连接。这个项目特别适合嵌入到各种应用程序中,因为它是轻量级的实现,可以在 CPU 上高效运行。
➤ whisper.cpp-cli 是对 whisper.cpp 命令行工具的 Python 封装。
➤ OpenAI 的 Whisper 模型是一个先进的自动语音识别系统。它是基于 Transformer 架构的神经网络模型,主要用于将音频转换为文本。Whisper 由 OpenAI 开源开发,使用了大规模的多语言数据集进行训练(包括 68 万小时的音频数据,支持 98 种语言),因此具有出色的准确性和鲁棒性,能够处理多种口音、背景噪音和技术术语。
文章来源:https://www.codelast.com/
因此,我们需要安装的是 whisper.cpp-cli,并且要下载好 Whisper 模型文件,这样就能使用 whisper.cpp-cli 来调用Whisper模型文件进行语音识别了。
为了不影响系统里安装的软件,我们通常都会用micromamba、uv之类的Python包管理器创建一个新的env(环境),然后在里面再安装其他的Python包。这里我们用uv,你也可以用其他的包管理器来创建env。
mkdir whisper
cd whisper
uv venv . --python 3.8 # 创建一个新环境
source bin/activate # 激活环境
uv pip install pip # 安装pip
pip install whisper.cpp-cli # 安装whisper.cpp-cli
这样我们就安装好了相关软件。
文章来源:https://www.codelast.com/
把 mp3 转成 16 kHz 的 wav 文件:
ffmpeg -y -i /home/codelast/st.mp3 -ar 16000 /home/codelast/st.wav
注意,16 kHz 是Whisper要求的。
然后我们就可以开始做语音识别了:
whisper-cpp -m ../whisper.cpp/download/x-ggml-model.zh.bin -f /home/codelast/st.wav -l zh --output-txt
这个命令的参数:
-m:指定使用 x-ggml-model.zh.bin 这个模型来做语音识别(模型文件要提前从 Hugging Face 上下载好)
-f:指定输入文件,对 st.wav 这个音频文件进行语音识别
-l:指定输出语言为中文
--output-txt:直接输出txt文本。
文章来源:https://www.codelast.com/
输出内容示例如下:
whisper_init_from_file_with_params_no_state: loading model from '../whisper.cpp/download/x-ggml-model.zh.bin'whisper_model_load: loading modelwhisper_model_load: n_vocab = 51865whisper_model_load: n_audio_ctx = 1500whisper_model_load: n_audio_state = 768whisper_model_load: n_audio_head = 12whisper_model_load: n_audio_layer = 12whisper_model_load: n_text_ctx = 448whisper_model_load: n_text_state = 768whisper_model_load: n_text_head = 12whisper_model_load: n_text_layer = 12whisper_model_load: n_mels = 80whisper_model_load: ftype = 1whisper_model_load: qntvr = 0whisper_model_load: type = 3 (small)whisper_model_load: adding 1608 extra tokenswhisper_model_load: n_langs = 99whisper_model_load: CPU total size = 487.01 MBwhisper_model_load: model size = 487.01 MBwhisper_init_state: kv self size = 49.55 MBwhisper_init_state: kv cross size = 55.30 MBwhisper_init_state: compute buffer (conv) = 22.54 MBwhisper_init_state: compute buffer (encode) = 2 80.20 MBwhisper_init_state: compute buffer (cross) = 6.31 MBwhisper_init_state: compute buffer (decode) = 97.40 MBsystem_info: n_threads = 4 / 8 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | METAL = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | CUDA = 0 | COREML = 0 | OPENVINO = 0main: processing '/home/codelast/st.wav' (23957094 samples, 1497.3 sec), 4 threads, 1 processors, 5 beams + best of 5, lang = zh, task = transcribe, timestamps = 1 ...[00:00:00.000 --> 00:00:19.040] 这里是识别文字第一句[00:00:19.040 --> 00:00:40.280] 这里是识别文字第二句
......
可以看到,输出的内容是带有时间轴标识的。
细看会发现,Whisper输出的中文有时会有错别字,我们可以用AI进一步纠错,想怎么处理你就可以随意发挥了。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤
转载需注明出处:codelast.com
感谢关注我的微信公众号(微信扫一扫):

以及我的微信视频号: