[原创] 用Whisper.cpp在本地(离线)把mp3音频转成中文

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

audio to text

我们首先要知道几个背景知识:
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 model
whisper_model_load: n_vocab       = 51865
whisper_model_load: n_audio_ctx   = 1500
whisper_model_load: n_audio_state = 768
whisper_model_load: n_audio_head  = 12
whisper_model_load: n_audio_layer = 12
whisper_model_load: n_text_ctx    = 448
whisper_model_load: n_text_state  = 768
whisper_model_load: n_text_head   = 12
whisper_model_load: n_text_layer  = 12
whisper_model_load: n_mels        = 80
whisper_model_load: ftype         = 1
whisper_model_load: qntvr         = 0
whisper_model_load: type          = 3 (small)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: n_langs       = 99
whisper_model_load:      CPU total size =   487.01 MB
whisper_model_load: model size    =  487.01 MB
whisper_init_state: kv self size  =   49.55 MB
whisper_init_state: kv cross size =   55.30 MB
whisper_init_state: compute buffer (conv)   =   22.54 MB
 whisper_init_state: compute buffer (encode) =  2 80.20 MB
whisper_init_state: compute buffer (cross)  =    6.31 MB
whisper_init_state: compute buffer (decode) =   97.40 MB
 
system_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 = 0
 
main: 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 
感谢关注我的微信公众号(微信扫一扫):
wechat qrcode of codelast
以及我的微信视频号:

 

发表评论