测试离线音频转文本模型Whisper.net的基本用法

2023-11-07

  微信公众号“dotNET跨平台”中的文章《OpenAI的离线音频转文本模型Whisper的.NET封装项目》介绍了基于.net封装的开源语音辨识Whisper神经网络项目Whisper.net,其GitHub地址见参考文献2。本文基于Whisper.net帮助文档中的示例,测试Whisper.net的基本用法。
  创建基于.net6的Winform项目,然后在NuGet包管理器中搜索并安装Whisper.net包,如下图所示。注意,如果搜索Whisper,还会搜到一个名为WhisperNet的包,这个包跟Whisper.net的用法不同,也不能通用,注意不要安装错了。

在这里插入图片描述
在这里插入图片描述
  在测试程序之前,需要下载语言模型文件,可以从参考文献3中下载。根据参考文献1中的介绍,下载了ggml-large.bin、ggml-medium.bin、ggml-small.bin等3个支持中文的语言模型文件,并在测试程序中优先选用ggml-large.bin进行测试。
  除了语言模型文件,Whisper.net对音频文件要求比较严格,必须是采样率为16KHz的wav格式的音频文件,具体的文件格式要求参见下面列出的Whisper.net包中WaveParser类中的部分格式检查代码。

	 byte[] array = new byte[36];
     if (waveStream.Read(array, 0, 36) != 36)
     {
         throw new CorruptedWaveException("Invalid wave file, the size is too small.");
     }

     if (array[0] != 82 || array[1] != 73 || array[2] != 70 || array[3] != 70)
     {
         throw new CorruptedWaveException("Invalid wave file RIFF header.");
     }

     if (array[8] != 87 || array[9] != 65 || array[10] != 86 || array[11] != 69 || array[12] != 102 || array[13] != 109 || array[14] != 116 || array[15] != 32)
     {
         throw new CorruptedWaveException("Invalid wave file header.");
     }

     int num = BitConverter.ToInt32(array, 16);
     if (num < 0)
     {
         throw new CorruptedWaveException("Invalid wave format size.");
     }

     if (BitConverter.ToUInt16(array, 20) != 1)
     {
         throw new CorruptedWaveException("Unsupported wave file");
     }

     channels = BitConverter.ToUInt16(array, 22);
     sampleRate = BitConverter.ToUInt32(array, 24);
     if (sampleRate != 16000)
     {
         throw new NotSupportedWaveException("Only 16KHz sample rate is supported.");
     }

     bitsPerSample = BitConverter.ToUInt16(array, 34);
     if (bitsPerSample != 16)
     {
         throw new NotSupportedWaveException("Only 16 bits per sample is supported.");
     }

  本文采用两个音频文件进行测试,第一个是Whisper.net项目自带示例程序中的kennedy.wav文件,用于测试识别英文,另一个是在B站上下载古诗《春晓》的mp4视频文件(参考文献4),用于测试识别中文,通过参考文献5在线将其转换为指定采样率的wav文件,如下图所示。
在这里插入图片描述
  测试程序的主要代码参考自Whisper.net项目中的示例程序Whisper.net.Tests中的代码。采用Whisper.net识别语音可以采用同步方式或异步方式,示例程序中都有相应的代码,本文采用同步方式的代码进行测试。主要代码如下所示:

	try
    {
        txtResult.Text = String.Empty;
        var segments = new List<SegmentData>();
        var encoderBegins = new List<EncoderBeginData>();
        using var factory = WhisperFactory.FromPath("ggml-large.bin");
        using var processor = factory.CreateBuilder()
                        .WithLanguage("auto")
                        .WithEncoderBeginHandler((e) =>
                        {
                            encoderBegins.Add(e);
                            return true;
                        })
                        .WithSegmentEventHandler(segments.Add)
                        .Build();

        using var fileReader = File.OpenRead(txtFilePath.Text);
        processor.Process(fileReader);

        foreach (var segment in segments)
        {
            txtResult.Text += "\r\n" + ($"New Segment: {segment.Start} ==> {segment.End} : {segment.Text}");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

  程序运行效果如下面的截图所示:
在这里插入图片描述
在这里插入图片描述
  后续还会继续学习Whisper.net的用法。

参考文献:
[1]https://it.sohu.com/a/670010700_121124363
[2]https://github.com/sandrohanea/whisper.net
[3]https://huggingface.co/ggerganov/whisper.cpp/tree/main
[4]https://www.bilibili.com/video/BV19W411k7Bo/?spm_id_from=333.337.search-card.all.click&vd_source=db4a1f65c18549c78df3e9d579e59e19
[5]https://www.aconvert.com/cn/audio/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

测试离线音频转文本模型Whisper.net的基本用法 的相关文章

  • 【数字信号处理2】IIR 滤波器设计

    一 实验目的 1 掌握冲激响应法和双线性变换法设计IIR滤波器的原理及具体设计方法 熟悉用双线性设计法设计低通 带通和高通IIR数字滤波器的计算机程序 2 熟悉模拟Butterworth滤波器的设计 掌握冲激响应法和双线性变换法设计数字II
  • C++——命名空间(namespace)

    目录 1 C语言命名冲突 2 命名空间定义 3 命名空间使用 可能大家在看别人写的C 代码中 在一开始会包这个头文件 include
  • Mac下抓包工具Charles的使用

    一 简介 Charles是目前最强大的http调试工具 在界面和功能上远强于Fiddler 1 1 界面功能 工具条包含了Charles的大部分功能 右键请求出现菜单 Charles的右键菜单功能比fiddler强大太多了 双击请求进入列表
  • Python+Selenium框架设计篇1- 价值好几K的框架,不看别后悔,过时不候

    1 什么是自动化测试框架 在了解什么是自动化测试框架之前 先了解一下什么叫框架 框架是整个或部分系统的可重用设计 表现为一组抽象构件及构件实例间交互的方法 另一种定义认为 框架是可被应用开发者定制的应用骨架 前者是从应用方面 而后者是从目的
  • 8579 链式线性表的基本操作

    8579 链式线性表的基本操作 题干 8579 链式线性表的基本操作 时间限制 1000MS 代码长度限制 10KB 提交次数 5567 通过次数 2176 题型 编程题 语言 G GCC Description 编写算法 创建一个含有n个
  • 初步认识Thread网络

    Thread网络 说明 本文档内容参考自 https openthread google cn guides 是基于这个官方文档内容进行的添加一些个人理解的介绍文档 文档内容仅能作为对thread 网络的一个概念学习和参考 基本概念 Thr
  • 前端页面如何适应不同屏幕分辨率常用做法

    为什么80 的码农都做不了架构师 gt gt gt 1 根据几个浏览器分辨率统计平台得到数据现在使用1200分辨率以下用户极少 但我们CSS布局时仍然需要至少考虑1024px分辨率用户 2 使用css media 属性针对不同的屏幕加载不同
  • MarkDown软件Typora图片上传解决方案:Typora+PicGo图床

    MarkDown软件Typora图片上传解决方案 Typora PicGo图床 一 问题描述 今天在网上学习Java开发环境配置 想在CSDN上写篇博客记录安装及环境配置过程 经过在网上的调研 相当一部分的程序员都喜欢用一款名为 Typor
  • unity 射线检测真机失效_用Unity的RaycastCommand实现子弹的碰撞检测碰到的大坑

    首先放个视频来展示一下 星之海的阿斯特莉娅 最新的开发进度吧 加入了防空系统 可以拦截敌人的导弹 https www bilibili com video BV1i541167BY 假装这里有视频 b站换成bv号了 这里好像还不支持 然后来
  • 计算机毕业设计-基于SSM的音乐推荐管理系统

    项目摘要 中国风音乐推介网站近年来已成为风靡全球的新兴艺术形式 国内涌现出了大批优秀 有才华的爱好者和许多经久不衰的经典作品 中国风音乐推介网站的兴起打破了音乐界格局 也突破了原有分类唱法发展中的瓶颈 为声乐艺术的发展开辟了新篇章 这种新兴
  • 关于mapper在service层注入报错

    关于mapper在service层注入报错 有如下三种解决的方案 1 在主类Application class上添加 MapperScan basePackages 自己的mapper包 2 在mapper接口上添加 Mapper 和第一种
  • MySQL优化五-高性能的8个索引策略

    正确创建和使用索引策略是实现高性能查询的基础 本文总结7个索引策略 一 独立的列 独立的列是指索引不能是表达式的一部分 也不能是函数的参数 mysql gt select id from actor where id 1 5 错误 mysq
  • 用Python快速将ppt制作成配音视频课件的方法

    老猿Python博文目录 一 引言 老猿从来没有录播个视频课件 但最近有要求在一周内必须录制一个视频课件 为此花了3天时间准备ppt 花了一个小时录播了一个20多分钟的课件 由于第一次干这个活 讲课时情绪还是有点紧张 导致录播的语音出现了各
  • ABAP OPEN SQL详解

    本章目录 概要 OPEN SQL 读取数据 1 概要 1 1 R 3体系结构 学习SQL之前先了解一下R 3体系结构 如 图1 所示 SAP R 3一共分为三层结构 其中应用层和数据库层由单独的系统构成 1 表示层 表示层 Presenta
  • Spring IOC容器初始化主流程

    1 Spring IOC容器体系 IoC容器是Spring的核 模块 是抽象了对象管理 依赖关系管理的框架解决 案 Spring 提供了很多的容器 其中 BeanFactory 是顶层容器 根容器 不能被实例化 它定义了所有 IoC 容器
  • 现代cpu的合并写技术对程序的影响

    对于现代cpu而言 性能瓶颈则是对于内存的访问 cpu的速度往往都比主存的高至少两个数量级 因此cpu都引入了L1 cache与L2 cache 更加高端的cpu还加入了L3 cache 很显然 这个技术引起了下一个问题 如果一个cpu在执

随机推荐

  • C++之关于rand()每次产生随机数都相同问题

    C 的随机数函数rand是一个伪随机数 根据固定的初始种子和算法计算得出 所以每次运行获取到的随机数序列是相同的 要解决这个问题 需要设置一个随机数种子 一般我们使用当前时间作为种子 include
  • go-cqhttp:[禁止登录]登录失败,建议升级最新版本后重试,或通过问题反馈与我们联系。(错误码:45)

    token失效 禁止登录 登录失败 建议升级最新版本后重试 或通过问题反馈与我们联系 错误码 45 禁止登录 登录失败 建议升级最新版本后重试 或通过问题反馈与我们联系 使用go cqhttp开发QQ机器人的时候遇到的问题 登录的时候报错
  • 【uniapp】如何手动实现让input文本框聚焦

    开发中遇到一个问题 希望在每次操作页面完成后 input文本框都能自动聚焦 那么问题来了 应该怎么做 接下来请继续往下看 也许大多数同学都会这么做 尝试过修改文本框属性focus为 true 但是没有效果 参考如下
  • 关于项目内浏览器限制问题(VUE)

    目的 限制项目在某些浏览器中打开 代码位置如图 1 获取用户代理 navigator userAgent 拓展 属性 输出值 navigator appCodeName 浏览器代号 Mozilla navigator appName 浏览器
  • 分享一个电脑中病毒(无限一分钟后重启)的解决方法。

    常在河边走 哪有不湿鞋 很好计算机中毒了 情况如下 拖慢开机速度 很慢 很慢 开机后提示 你的电脑将在一分钟后重启 无限次数 解决方法 进入安全模式 以管理员方式打开CMD 命令如下 netsh winsock reset catalog
  • std::vector中swap()函数使用解析以及去重复操作

    1 常用方式 交换vector内部的两个元素 int main int argc char argv std vector
  • 磁盘操作--分区大于2T的硬盘

    一 说明 分区大于2TB的硬盘 云上操作 基于linux系统 Linux parted GPT ext4或xfs 步骤如下 1 分区类型为gpt 2 创建主分区 3 查看是否对其 4 重读分区表 5 创建文件系统 6 挂载目录 二 分区硬盘
  • R语言实验报告【全集】

    若对你有帮助 记得点赞 关注我哦 7个实验 R语言环境安装 R语言包的安装 创建和使用R语言数据集 数据的导入导出 R语言数据的清洗 高级数据管理 基本统计分析和函数与包实验 其实是两个实验 内容较长 本实验是在我同学做的云平台上运行的 所
  • mysql binlog 目录_怎么查看mysql 的binlog日志存放的位置(linux和win)

    这个你可以看配置文件 启用了才有这样的记录默认是没有的 linux系统中的 etc my cnf my cnf内容 log bin mysqlbin 默认配置 比如上面的设置重启数据库会生成mysqlbin 000001文件 常用的命令 1
  • 在虚拟机ubuntu64位系统中配置jdk

    在虚拟机ubuntu64位系统中配置jdk 第一步 下载jdk 第二步 新建一个文件夹后将压缩包解压到这个文件中 第三步 任意地方打开一个终端 这里在桌面打开 第四步 将系统的配置文件备份 第五步 在终端中打开配置界面 第六步 检查配置是否
  • antd pro mock数据方法

    export default POST api aaa bbbbb req res gt send里是mock数据返回的数据结构 res send code 200 data steps 2 downFile name 需求 url htt
  • 视觉注意力收集

    参考博文 神经网络学习小记录64 Pytorch 图像处理中注意力机制的解析与代码详解 pynq 注意力机制 Bubbliiiing的博客 CSDN博客 计算机视觉 详解 自注意力 Non local 模块与 Self attention
  • 概率论与数理统计(一)

    本文主要讲了什么是事件 事件与概率的关系 事件常见的分类 事件的基本关系及运算 什么是条件概率以及由条件概率引出的事件独立性 由事件独立性引出来的概率0乘法定理 概率的三条公理 文章目录 事件与概率 概率的三条公理 事件的关系与运算 条件概
  • Postman传入的Date参数类型

    需要定义全局变量 postman setGlobalVariable time Date parse new Date 2020 11 11 00 00 00 进行引用 time time
  • DX杂记之细分着色器和利用贝塞尔曲面平滑模型

    细分着色器的构成 细分着色器是为了将一大块的区域继续划分 划分成很多的小块 大体上由三部分构成 但也会涉及一些其它阶段的内容 这三个阶段分别为 Hull Shader Stage Tesslator Stage Domain Shader
  • Day3: 前端路由(基础篇)

    目标 持续输出 每日分享关于web前端常见知识 面试题 性能优化 新技术等方面的内容 主要面向群体 前端开发工程师 初 中 高级 应届 转行 培训等同学 Day3 今日话题 想必大家经常会在面试中或者工作生活中听到 前端路由 相关的问题或者
  • Training a deep autoencoder or a classifier on MNIST digits_Rbm训练(Matlab)

    这是第一次阅读matlab版的RBM程序所做的笔记 其中有好多没有理解的地方 希望能跟各位博友一起学习 一起研究 一起讨论 共同进步 一 Rbm阅读材料 http en wikipedia org wiki Restricted Boltz
  • statsmodels 0.10.0中文文档

    为什么翻译 本人会计出身 转行数据分析 更多是用excel sql spss等工具 30岁开始入坑python 在学习statsmodels包的过程中 在知乎 百度 CSDN和github上均没有找到statsmodels的中文文档 一开始
  • 自然图像目标检测数据集汇总

    参考 自然图像目标检测数据集汇总 云 社区 腾讯云 目录 一 PASCAL VOC 1 Challenge and tasks 2 Dataset 3 Detection Ground Truth 4 Evaluation 二 ImageN
  • 测试离线音频转文本模型Whisper.net的基本用法

    微信公众号 dotNET跨平台 中的文章 OpenAI的离线音频转文本模型Whisper的 NET封装项目 介绍了基于 net封装的开源语音辨识Whisper神经网络项目Whisper net 其GitHub地址见参考文献2 本文基于Whi