Whisper.cpp 编译使用

这篇具有很好参考价值的文章主要介绍了Whisper.cpp 编译使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Whisper.cpp 编译使用

whisper.cpp 是牛人 ggerganov 对 openai 的 whisper 语音识别模型用 C++ 重新实现的项目,开源在 github 上,具有轻量、性能高,实用性强等特点。这篇文章主要记录在 windows 平台,如何使用该模型在本地端进行语音识别。

下载

whisper.cpp 的开源地址在 ggerganov/whisper.cpp: Port of OpenAI’s Whisper model in C/C++ (github.com),首先将项目下载在本地。

git clone https://github.com/ggerganov/whisper.cpp

whisper.cpp 项目里提供了几个现成的模型。建议下载 small 以上的模型,不然识别效果完全无法使用。
Whisper.cpp 编译使用

我们可以使用下面命令下载指定模型,下载好之后,它们存储在 models 文件夹下。

.\models\download-ggml-model.cmd small

编译

在项目根目录执行 make 即可编译,得到 main.exe 可执行文件,然后用 main 文件就可以转录本地语音文件了。

> make

转录本地语言

samples 语言文件

  • 先我们用项目里自带的一段语音,来体验一下识别效果。其中
    • -m 指定模型
    • -f 指定语音文件
> PS C:\Users\aiyolo\whisper.cpp> ./main.exe -m C:\Users\aiyolo\whisper.cpp\models\ggml-base.bin -f C:\Users\aiyolo\whisper.cpp\samples\jfk.wav   
whisper_init_from_file_no_state: loading model from 'C:\Users\aiyolo\whisper.cpp\models\ggml-base.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 = 512
whisper_model_load: n_audio_head  = 8
whisper_model_load: n_audio_layer = 6
whisper_model_load: n_text_ctx    = 448
whisper_model_load: n_text_state  = 512
whisper_model_load: n_text_head   = 8
whisper_model_load: n_text_layer  = 6
whisper_model_load: n_mels        = 80
whisper_model_load: f16           = 1
whisper_model_load: type          = 2
whisper_model_load: mem required  =  215.00 MB (+    6.00 MB per decoder)
whisper_model_load: adding 1608 extra tokens
whisper_model_load: model ctx     =  140.60 MB
whisper_model_load: model size    =  140.54 MB
whisper_init_state: kv self size  =    5.25 MB
whisper_init_state: kv cross size =   17.58 MB

system_info: n_threads = 4 / 16 | AVX = 1 | AVX2 = 1 | AVX512 = 0 | FMA = 1 | NEON = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 0 | SSE3 = 1 | VSX = 0 |

main: processing 'C:\Users\aiyolo\whisper.cpp\samples\jfk.wav' (176000 samples, 11.0 sec), 4 threads, 1 processors, lang = en, task = transcribe, timestamps = 1 ...


[00:00:00.000 --> 00:00:07.600]   And so my fellow Americans ask not what your country can do for you,
[00:00:07.600 --> 00:00:10.600]   ask what you can do for your country.


whisper_print_timings:     load time =   108.72 ms
whisper_print_timings:     fallbacks =   0 p /   0 h
whisper_print_timings:      mel time =    88.37 ms
whisper_print_timings:   sample time =   104.12 ms /    28 runs (    3.72 ms per run)
whisper_print_timings:   encode time =   824.49 ms /     1 runs (  824.49 ms per run)
whisper_print_timings:   decode time =   138.39 ms /    28 runs (    4.94 ms per run)
whisper_print_timings:    total time =  1302.72 ms

可以看到识别效果很好。

识别中文

用系统的录音机录制了 OpenAI 的 Whisper 模型是一个很伟大的发明

由于 whisper.cpp 目前只支持 16 khzwav 文件格式的语言文件,需要先使用 ffmpeg 将语音文件转成所需的格式。

windows 平台可以使用 choco 命令来安装 FFmpeg

> choco install ffmpeg

然后,将其转成需要的格式。

> ffmpeg -i '.\录音 (2).wav' -ar 16000 -ac 1 -c:a pcm_s16le output.wav

接着使用 whisper 进行识别。

./main.exe -l auto -m C:\Users\aiyolo\whisper.cpp\models\ggml-small.bin -f "C:\Users\aiyolo\Documents\录音\output.wav" -osrt

上面面命令中:

  • -l 选项指定的语种,设置成 auto 会自动检测。
  • -osrt 将输出 srt 文件格式的文本。

打开文件看看最终的效果。
Whisper.cpp 编译使用

相比之下 base 模型的输出结果不尽人意,而 small 模型基本能达到日常的用途。
Whisper.cpp 编译使用

实时转录

再来试一下,实时语音转录功能。实时语音转录需要得到 stream 文件。使用 make stream 命令编译, 发现需要依赖 sdl 库。

> make stream
In file included from examples/common-sdl.cpp:1:
examples/common-sdl.h:3:10: fatal error: SDL.h: No such file or directory
    3 | #include <SDL.h>

由于我使用 mingw 编译的,我可以直接使用下面命令安装 sdl 依赖库。

$ pacman -S mingw-w64-x86_64-SDL2

依赖库安装成功后,编译也顺利完成,得到 stream.exe 文件。但是在 windows 执行下面命令,还不能达到实时转录的效果。文章来源地址https://www.toymoban.com/news/detail-440479.html

./stream -m ./models/ggml-base.en.bin -t 8 --step 500 --length 5000

到了这里,关于Whisper.cpp 编译使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vscode使用g++编译.c文件或.cpp文件

        vscode是一个跨平台、轻量级、插件非常丰厚的IDE,这里介绍在vscode里使用g++来编译.cpp文件。g++也叫GCC, 在Window中,是使用MinGW方式实现g++的,它分为32位和64位2个版本,其中,MinGW-64是64位的,MinGW-32是32位的。 1.1 下载g++ 8.1     下载GCC 64位 编译器,比如MinGW-W64 GCC-8.1,

    2024年02月07日
    浏览(31)
  • 在Linux(Centos7)上编译whisper.cpp的详细教程

    whisper.cpp的简单介绍: Whisper 是 OpenAI 推出的一个自动语音识别(ASR)系统,whisper.cpp 则是 Whisper 模型的 C/C++ 移植。whisper.cpp 具有无依赖项、内存使用量低等特点,支持 Mac、Windows、Linux、iOS 和 Android 系统。 whisper.cpp 1.4 增加了整数量化(Integer quantization)和部分 GPU(NVIDIA)支

    2024年02月04日
    浏览(45)
  • webassembly003 whisper.cpp的python绑定实现+Cython+Setuptools

    官方未提供python的封装绑定,直接调用执行文件 https://github.com/stlukey/whispercpp.py提供了源码和Cpython结合的绑定 https://github.com/zhujun1980/whispercpp_py提供了ctype方式的绑定,需要先make libwhisper.so Pybind11 bindings for Whisper.cpp,有更好的类型安全性和性能 setuptools 是 Python 中用于构建和分

    2024年01月25日
    浏览(36)
  • 【ARM 嵌入式 编译系列 2.2 -- GCC 编译参数学习 assembler-with-cpp 使用介绍】

    请阅读 【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 在 rt-thread 的编译脚本中经常会看到下面编译参数: arm-none-eabi-gcc 是针对 ARM 架构的交叉编译器,用于编译嵌入式 ARM 应用程序。在 GCC 中, -x 选项用于指定要编译的输入文件的语言。当与 assembler-with-cpp 一起使用时,

    2024年01月23日
    浏览(37)
  • 极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践

    业界良心OpenAI开源的Whisper模型是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。 Whisper.cpp的张量

    2024年02月02日
    浏览(52)
  • Cpp基础Ⅰ之编译、链接

    工具:Visual Studio 在 .cpp 源文件中,所有 # 字符开头的语句为预处理语句 例如在下面的 Hello World 程序中 #includeiostream 就是一个预处理语句(pre-process statement),编译器在加载源文件的时候,识别到 # 开头的语句,会优先处理这个语句,所以称为预处理语句。 注意:预处理语

    2024年02月12日
    浏览(26)
  • ggerganov/llama.cpp 编译

    如果想在 Windows 系统编译出 llama.cpp 项目(这个是github上的仓库, ggerganov/llama.cpp ),需要在Visual Studio上添加项目内的若干个源文件。这篇简陋的笔记记录了截至目前为止项目中的 main 可执行程序编译时依赖的各个代码文件和它们的路径,方便我自己事后回过头来查,算是备

    2024年02月12日
    浏览(28)
  • cpp文件编译过程 makefile cmake

    直接 gcc 没有-o 的话出来的输出exe文件没有调试信息,相比-o的大小会小一点,只有包含了调试信息文件才可以执行 头文件在编译器的include目录中,编译时 -I 指定库 函数库默认路径在编译器的lib目录中,编译时 -L指定目录,-l 小写L 指定库 函数或者是在别的c与cpp文件中 静态

    2024年02月08日
    浏览(29)
  • 【c/c++】c和cpp混合编译

    在这段代码中,#ifdef __cplusplus 和 #endif 之间的代码是为了在 C++ 中使用 C 语言的函数声明和定义时,确保编译器正确地处理 C 和 C++ 之间的语法差异。这是因为 C 和 C++ 有一些不同之处,包括函数名的重载、类型转换等。 在这段代码中,extern “C” 是一个 C++ 的特性,它告诉编

    2024年02月10日
    浏览(23)
  • CMakeLists.txt编写简单介绍:CMakeLists.txt同时编译.cpp和.cu

    不想付费的同学可以参考本人知乎添加链接描述,关于CMakeLists.txt的相关介绍,这里不赘诉,本人的出发点是借助于CMakeLists.txt掌握基本的C++构建项目流程,下面是本人根据网络资料以及个人实践掌握的资料。 下图是一个使用CUDA实现hello world的项目,一般来说,一个标准的C

    2024年04月10日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包