自动语音识别模型whisper安装和初探

news2025/1/19 6:38:48

whisper介绍

whisper是OpenAI 最近发布的语音识别模型。OpenAI 通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask)监督数据对 Whisper 进行了训练,whisper可以执行多语言语音识别、语音翻译和语言识别。

whisper安装(Windows)

1.CMD命令窗口建立名为whisper的虚拟环境:

conda create -n whisper python==3.8
conda activate whisper

注意:whisper要求python版本为3.8以上,否则会报错
2.虚拟环境中,安装whisper

pip install -U openai-whisper

2.虚拟环境中安装ffmpeg
这里我直接pip install ffmpeg后,在python中无法import ffmpeg,不知道是什么原因
重新安装ffmpeg-python就解决了

pip uninstall ffmpeg
pip uninstall ffmpeg-python
pip install ffmpeg-python

whisper初探

1.根据官网instruction进行测试,其中的audio是我自己保存的一段音频

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])

结果:
在这里插入图片描述
发现可以准确进行语音识别,没有问题(但是没有标点符号?)
2.接下来测试instruction中的另一段代码

import whisper

model = whisper.load_model("base")

# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)

# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")

# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# print the recognized text
print(result.text)

报错如下图
在这里插入图片描述
提示需要用gpu跑模型,于是在虚拟环境中安装gpu版本的torch,我的CUDA为11.7版本,python为3.8,选择对应的torch和torchvision进行安装,torch.cuda.is_available() 为True,之后再次运行代码,没有出错。
在这里插入图片描述
结果发现识别出的只有整个音频中的一小段,这是什么意思?于是我下载了whisper的源代码,看一看调用函数的含义。
我发现在这段代码中,whisper.pad_or_trim是选择了音频前30s的token,之后采用了whisper.log_mel_spectrogram,对这30s的token生成了Log-Mel 频谱图,detect_language函数是用于自动识别这段音频的语言,最后用decode进行了解码。因此,这段代码其实是截取了音频中的前30s片段进行识别而非整段音频。
(1)如果需要对整段音频进行识别,则需要将输入的音频被分割成 30 秒的小段,进行滚动窗口的识别,而这些都已经封装在transcribe中;
(2)如果需要进行实时的转译,whisper本身是不支持实时,也就是说它必须将音频分成30s的片段,但可以通过每秒增量转录音频来构建类似的模型;https://github.com/openai/whisper/discussions/20
(3)如果音频不足30s,pad_or_trim会对token进行padding;
(4)如果不想要以30s为切分的时间间隔,这可能并不支持(?)仅通过修改whisper中的N_MELS、CHUNK_LENGTH等参数无法做到这一点。因为预训练保存的模型参数中,channel为80是固定的。
根据官方给出的解释:时间间隔太短,会缺乏上下文,将会更频繁地断句。很多句子都会失去意义。太长,则模型的复杂性更高。https://github.com/openai/whisper/discussions/1118

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

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

相关文章

swing-扩展徽章组件JEBadge

前言 因为工作原因,好久没有写swing组件了,最近准备优化一个功能,希望有类似徽章的功能。 徽章在平时的app和h5 页面上经常常见 ,那么在swing中如何实现一个徽章功能呢。 技术分析 为什么不选择绘制方式,却选择JLayeredPane &a…

《程序员面试金典(第6版)》面试题 08.14. 布尔运算(动态规划,分治,递归,难度hard++)

题目描述 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s “1^0|0|1”, result 0 …

STM32 LCD-ADC-DMA实验

目录 1.1 STM32 DMA简介 1.2 STM32 DMA的操作 1.DMA的初始化 2. 初始化代码 3. 主函数代码 本文将向大家介绍 STM32 的 DMA。(如有错误,欢迎批评指正) 在本章中,我们将利用 STM32 的 DMA 来实现ADC1通道1内数据传送,并在 TFTLCD 模块上显…

图像处理学习——基于霍夫变换(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。 霍夫变换采用类似于投票的方式来获取当前图像内的形状集合&…

银河麒麟之语言设置和服务开机自启动设置

一、前言 银河麒麟操作系统作为国产操作系统,是目前国产化、信创等项目场景的主流操作系统之一,但它本质上还是基于现有的开源操作系统上的二次开发,银河麒麟服务器版是基于centos的,银河麒麟桌面版是基于debain的。既然是国产化系…

CAPL语言

1. CAPL简介 CAPL,Communication Access Programming Language,即通信访问编程语言类C语言2. CAPL主要用途 仿真节点或模块仿真时间报文、周期报文或者附加条件的重复报文使用PC键盘模拟操作按钮等人工操作事件仿真节点的定时或网络事件仿真多个时间事…

从编译器角度理解C++代码的编译和链接原理

在本文中,我们将探讨C代码的预处理、编译和链接过程。我们将详细介绍每个过程的作用和步骤,并通过代码演示来解释这个过程。 预处理 C代码预处理是将源代码转换为另一个源代码的过程,其中包括宏展开、条件编译、头文件包含等操作。预处理器…

Level3题目整理

文章目录L3-001 凑零钱L3-002 特殊堆栈L3-003 社交集群(并查集vector暴力⭐)L3-004 肿瘤诊断(三维bfs)L3-005 垃圾箱分布(多次dijkstra)L3-008 喊山(邻接表bfs🔺)L3-010 是否完全二叉搜索树&…

C++ STL学习之【list的模拟实现】

✨个人主页: 夜 默 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 A year from now you may wish you had started today. 明年今日,你会希望此时此刻的自己已经开始行动了。 文章目录🌇前言&am…

零售数据分析之操作篇12:子查询的应用

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期内容与作业 上一讲讲了占比相关内存计算的应用场景,包括占比、TOP占比、累计占比等,不同的占比&am…

sinGAN论文笔记

Background Knowledge 基于推理的视觉理论: 只根据图像数据本省不能对相对应的物体空间结构提供充分的约束,也就是说这是一个约束不充分的问题,因此为了理解图像的内容必须要有附加的约束条件(例如知道图中是哪一类物体的知识&am…

帮助中心能帮助企业解决什么问题?

帮助中心是企业在网站、应用程序或其他数字渠道上提供的一种资源,旨在帮助客户解决问题、回答常见问题并提供支持。一个完善的帮助中心可以为企业带来很多好处,包括提高客户忠诚度、提高满意度、降低客户支持成本等。 帮助中心能帮助企业解决的问题 提…

为什么会有JMM?从0到1一次性说清楚

JMM(Java Memory Model)是一种规范,定义了在多线程环境下Java程序中的内存访问行为。JMM保证了在多线程环境下程序的正确性,同时也允许编译器和处理器对指令进行优化,以提高程序的性能。 Java线程之间的通信由Java内存…

网络编程套接字(一)

学习任务: 我们先来认识端口号,区分好主机IP和端口号的区别,以及涉及到进程PID和端口号的区别。 然后简单认识一下TCP协议和UDP协议,这两个协议都是传输层的。接着了解什么是网络字节序,它有什么作用。然后是网络编程的…

Windows搭建Typecho个人博客并发布公网访问【内网穿透】

文章目录前言1. 环境安装2. 安装Typecho3. 安装cpolar内网穿透4. 固定公网地址5. 配置Typecho前言 本文小新为大家带来windwos系统搭建typecho博客cpolar内网穿透工具将博客发布到公共网络环境教程。 Typecho是一款PHP语言编写的开源博客程序,它是一个轻量级的内容…

某某客户的一次勒索病毒应急响应

Lockbit勒索病毒应急响应背景1、应急处理排查2、勒索病毒来源分析3、勒索病毒分析4、勒索病毒解密5、主机分析分析6、后续安全加固和改进措施结论背景 美好的周六刚开始,眼睛一睁,领导就发消息,说某客户中了勒索病毒,特别着急&am…

测评了100款零售软件,选出5个最好用零售软件分享给你!

满大街的各种服装店、便利店、百货店、母婴店...... 每天都要处理大量的订单,使用传统的人工开单记账,效率低下、客户体验差、而且容易出现,需要耗费很多时间来回对账; 聪明的零售店老板都已经开始使用零售软件来管理门店&#xf…

[C++]list类的模拟实现和相关函数的详解(正反向迭代器)

文章目录架构代码实现listNode正向迭代器框架迭代器函数重载*(解引用)->(箭头指向) -- ! 反向迭代器框架*(解引用)->(箭头指向) -- ! list默认成员函数构造函数拷贝构造赋值重…

QT学习笔记2

1.重载自定义信号与槽&#xff1a; 定义天黑类&#xff1a;里面有一个有参数的信号和没有参数的信号 tianhei.h #ifndef TIANHEI_H #define TIANHEI_H#include <QObject>class Tianhei : public QObject {Q_OBJECT public:Tianhei(); //构造函数声明signals:void tia…

Linux 用户的特殊shell与PAM模块

文章目录Linux 用户的特殊shell与PAM模块特殊的shell&#xff1a;/sbin/nologinPAM模块简介PAM模块设置语法常用模块简介login的PAM验证机制流程其他相关文件limits.conf使用案例/var/log/secure、/var/log/messagesLinux 用户的特殊shell与PAM模块 你想过吗&#xff1f;如果我…