Whisper.cpp 编译使用

news2024/11/25 16:27:21

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 以上的模型,不然识别效果完全无法使用。

我们可以使用下面命令下载指定模型,下载好之后,它们存储在 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 文件格式的文本。

打开文件看看最终的效果。
image.png

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

实时转录

再来试一下,实时语音转录功能。实时语音转录需要得到 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 执行下面命令,还不能达到实时转录的效果。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/859348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自学网络安全(黑客)全网详细路线

前言 web渗透是网络安全大行业里入门板块&#xff0c;就像十年前的软件&#xff0c;前景非常被看好&#xff0c;薪资也很诱人。与软件测试和前端开发只需掌握一定的编程能力不同的是&#xff0c;渗透需要掌握的知识内容较多&#xff0c;花费的时间较长&#xff0c;渗透测试掌握…

网络:CISCO、Huawei、H3C命令对照

思科、华为、锐捷命令对照表 编号思科华为锐捷命令解释1 2writesavesave保存3456 如果你所处的视图为非系统视图&#xff0c;需要查看配置的时候&#xff0c;需要在该配置命令前加do。 在特定的视图之下&#xff0c;有对应的特定命令。例如&#xff0c;在接口视图下的ip addre…

数组常用方法总结

数组常用方法总结 一.获取数组长度1.1 使用length 二.数组转字符串2.1 Arrays是什么2.2 使用toString() 三. 数组拷贝3.1 使用 copyOf()3.2 copyOfRange() 四.数组排序4.1使用 sort() 五. 数组逆序六. 判断两个数组是否相等6.1 使用equals() 一.获取数组长度 1.1 使用length p…

YAMLException: java.nio.charset.MalformedInputException: Input length = 1

springboot项目启动的时候提示这个错误&#xff1a;YAMLException: java.nio.charset.MalformedInputException: Input length 1 根据异常信息提示&#xff0c;是YAML文件有问题。 原因是yml配置文件的编码有问题。 需要修改项目的编码格式&#xff0c;一般统一为UTF-8。 或…

pdf怎么转换成jpg图片?这几个转换方法了解一下

pdf怎么转换成jpg图片&#xff1f;转换PDF文件为JPG图片格式在现代工作中是非常常见的需求&#xff0c;比如将PDF文件中的图表、表格或者图片转换为JPG格式后使用在PPT演示、网页设计等场景中。 【迅捷PDF转换器】是一款非常实用的工具&#xff0c;可以将PDF文件转换成多种不同…

Java 中如何优雅的实现对外接口,需要注意哪些事项?

博主之前做过恒丰银行代收付系统&#xff08;相当于支付接口&#xff09;&#xff0c;包括现在的oltpapi交易接口和虚拟业务的对外提供数据接口。总之&#xff0c;当你做了很多项目写了很多代码的时候&#xff0c;就需要回过头来&#xff0c;多总结总结&#xff0c;这样你会看到…

react中使用路由起手式,一些思路和细节。

一.安装并配置 我们选择使用react-router实现路由效果 yarn add react-router-dom下载后需要对Route进行引入&#xff0c;是个内置的组件。该组件是有两个属性一个是path&#xff0c;一个是component&#xff0c;path是组件对应的路由&#xff0c;component是对应的组件 二.…

pytest 用例运行方式

一、命令行方式运行 执行某个目录下所有的用例&#xff0c;符合规范的所有用例 进入到对应的目录,直接执行pytest; 例如需要执行testcases 下的所有用例; 可以进入testcases 目录; 然后执行pytest 进入对应目录的上级目录,执行pytest 目录名称/ ; ; 例如需要执行testcases 下…

kafka 分布式的情况下,如何保证消息的顺序消费?

目录 一、什么是分布式 二、kafka介绍 三、消息的顺序消费 四、如何保证消息的顺序消费 一、什么是分布式 分布式是指将计算任务分散到多个计算节点上进行并行处理的一种计算模型。在分布式系统中&#xff0c;多台计算机通过网络互联&#xff0c;共同协作完成任务。每个计…

LinearAlgebraMIT_8_TheRankOfMatrix

这节课中主要讲解根据秩来判断方程组/矩阵的(solvability)解情况&#xff0c;即通过秩来判断(aumented matrix)增广矩阵的解。我们需要直接求解方程组的解就是求解矩阵的解。 x.1 判断(非齐次线性方程组)Axb是否有解 我们以下面这个方程组为例&#xff0c;它具有3个约束条件和…

innodb buffer pool

buffer pool是主存中的一个区域&#xff0c;InnoDB 在访问时缓存表和索引数据。缓冲池允许直接从内存访问频繁使用的数据&#xff0c;这加快了处理速度。在专用服务器上&#xff0c;高达80% 的物理内存通常分配给缓冲池。为了提高大容量读取操作的效率&#xff0c;将缓冲池划分…

fetch异步上传图片(附html+JavaScript+php代码)

效果 index.html <!DOCTYPE html> <html><head><title>图片上传示例</title><meta charset"utf-8"><script src"upload.js"></script><style>*{padding: 0;margin: 0;}#app{width: 500px;margin: …

什么是媒体代发布?媒体代发布注意事项

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体代发布是指将新闻稿或其他宣传内容委托给专业的媒体代理机构或公司进行发布和推广的活动。这些机构通常拥有丰富的媒体资源、人脉和经验&#xff0c;能够更好地将信息传递给目标受众…

MySQL5.7保姆级安装教程

环境 Linux版本Mysql版本(待安装)CentOS 75.7 1、配置YUM源 在MySQL官网中下载YUM源rpm安装包&#xff1a;http://dev.mysql.com/downloads/repo/yum/ 目前MySQL官网下载的MySQL源安装后yum下载的MySQL是8.0版本&#xff0c;为了非必要的麻烦&#xff0c;直接提供MySQL5.7的…

MNIST数据集知识合集

MNIST数据集知识合集 认识MNIST数据集通过本地文件加载MNIST数据集torchvision.datasets加载MNIST数据集可视化&#xff08;即转换成.jpg/.png之类的文件&#xff09;疑惑—datasets.mnist和datasets.MNIST问题—downloadFalse运行报错 搭建CNN用于数字识别 认识MNIST数据集 M…

MODBUS TCP转CCLINK IE协议网关cclink通讯异常的处理方法

你是否曾经遇到过需要将不同的设备连接到一个统一的网络中&#xff1f;或者你是否曾经遇到过设备之间的通讯协议不兼容的问题&#xff1f;捷米的JM-CCLKIE-TCP通讯网关就是为解决这些问题而设计的。 JM-CCLKIE-TCP通讯网关是一款自主研发的CCLINK IE FIELD BASIC从站功能的通讯…

Appium2 安装教程

目录 第一步&#xff1a;安装 node.js 第二步&#xff1a;安装 Android Studio 第三步&#xff1a;下载 JDK 第四步&#xff1a;安装 Appium 卸载旧版本appium1.X 安装新版Appium2.0 安装appium驱动与插件 第五步&#xff1a;安装appium inspector 第六步&#xff1a;…

VSCode-Python传参数进行Debug

新建demo.py import argparse def parse_args():description "debug example" parser argparse.ArgumentParser(descriptiondescription) help "The path of address"parser.add_argument(--host,help help) parser.add_ar…

2023-08-05力扣今日五题-好题

链接&#xff1a; 剑指 Offer 52. 两个链表的第一个公共节点 题意&#xff1a; 如题 解&#xff1a; 非常有趣的双指针 首先我们不管他们是否有公共段啊&#xff0c;我们要知道一个指针从A出发走到A结尾&#xff0c;再从B出发走到B结尾&#xff0c;和从B出发最终到A结尾是…

小程序逆向之源码获取

背景&#xff1a;小程序使用越来越多&#xff0c;很多时候&#xff0c;我们工作中需要用到对小程序的研究&#xff0c;那么就出现了一个课题&#xff0c;小程序如何逆向&#xff0c;如何获取源码&#xff0c;今天这篇文章就来讲一下如何获取源码&#xff08;pc端&#xff09;。…