python 音频处理(2)——提取PPG特征之whisper库的使用(2.1)
提取PPG特征之——whisper库的使用(2.1)
1 安装对应的包
方法一(自用):
直接pip即可:
pip install openai-whisper成功后如下图所示

方法二:
当时用了他这个方法环境直接崩了,已老实
conda install -c conda-forge ffmpeg
conda install -c conda-forge poetry
poetry init
poetry add openai-whisper
2 运行官方demo测试:
1 import whisper
2
3 model = whisper.load_model("base")
4
5 # load audio and pad/trim it to fit 30 seconds
6 audio = whisper.load_audio("audio.mp3")
7 audio = whisper.pad_or_trim(audio)
8
9 # make log-Mel spectrogram and move to the same device as the model
10 mel = whisper.log_mel_spectrogram(audio).to(model.device)
11
12 # detect the spoken language
13 _, probs = model.detect_language(mel)
14 print(f"Detected language: {max(probs, key=probs.get)}")
15
16 # decode the audio
17 options = whisper.DecodingOptions()
18 result = whisper.decode(model, mel, options)
19
20 # print the recognized text
21 print(result.text)
3 歌词信息提取部分learning
可以从官方的官方的调用思路中学习,我们调用的时候也可以参照这个demo来稍作修改
如何通过whisper来提取PPG特征【Phoneme Posteriorgram 即音素后验概率图】,这里的后验概率特征指的就是歌词的信息特征,我们这里2.1先把歌词信息提取出来
步骤:
导入对应依赖库
主要是导入
whisper(主要库)和torch(用来使用gpu加速的)
导入所选模型
模型可选信息如下图所示:

size里面既是大小,也是对应可以加载的模型名各位可以根据自己的
VRAM显存大小和对应的速度【他这里多少倍应该的对照最大的那个模型来衡量速度的】来选择第一次因为本地没有模型,会自动下载,下载不了了都是网络问题,自行解决,救不了:

输入音频路径及其余可选信息
可选信息:
language:部分常见语言代码如下表所示:
语言 代码 英语 en 中文 zh 德语 de 西班牙语 es 法语 fr 日语 ja 韩语 ko 意大利语 it 葡萄牙语 pt 荷兰语 nl 俄语 ru 土耳其语 tr 波兰语 pl 越南语 vi 瑞典语 sv 印地语 hi 泰语 th 乌克兰语 uk 希腊语 el 匈牙利语 hu 阿拉伯语 ar
根据不同情况进行输出
代码实现:
1 import whisper#导入依赖包
2
3 model = whisper.load_model('small')#选择模型
4 result = model.transcribe(audio=input("your music path:"), language='en', verbose=True)
5 print(result)#输出结果
6 结果【我这里的歌是Never Gonna Give You Up.mp3】:

解释:
其实蛮简单的,如果只需要获取歌词信息的话,4行就能完成了
load_model(name: str, device: Union[str, device, None] = None, download_root: Optional[str] = None, in_memory: bool = False) -> Whisper函数:参数解释:
name:对应的是上文中所选模型的名字,你选择哪一种大小的模型就在这个导入中体现,tiny、small之类的,这里也能通过路径来确定你的模型,但一般用不上probe the "name" element(进阶深入理解):
在官方构造这个函数中,写到了:
one of the official model names listed by
whisper.available_models(),or path to a model checkpoint containing the model dimensions and the model state_dict.从中我们可以使用
whisper.available_models()来查看支持的模型名称print(whisper.available_models()),且这个name还可以是本地的模型尺度(如上面的small)的路径['tiny.en', 'tiny', 'base.en', 'base', 'small.en', 'small', 'medium.en', 'medium', 'large-v1', 'large-v2', 'large-v3', 'large']
(可选)
device:模型运行时的设备,这里默认不选即可,系统会自动选择probe the "devic" element:
the PyTorch device to put the model into
为什么说可以默认不选择,看一下函数。因为官方已经帮我们选好了,自动帮我们执行了我们平常调用
torch进行GPU处理时的设备选择:if device is None:
device = "cuda" if torch.cuda.is_available() else "cpu"
其他元素:
download_root:模型下载的路径,不填就是默认位置。我的建议是不懂这个的话最好默认就好了,不然可能后续调用有问题,了解一下即可
def transcribe(model: Whisper, audio: Union[str, ndarray, Tensor],*)这个函数的参数太多了,我挑选几个平时可能会用到的讲解:model:模型的调用示例,传入的是一个Whisper类,就是上文我们load_model完的modle变量audio:音频的路径或者是音频的波形图(即音频的数组化形式)The path to the audio file to open, or the audio waveform
(可选)
language:虽然没在函数中列出来,但也是重要的参数,选择对应的语言,默认为"en"--英语,可以根据需要自行选择其他参数:
(可选)
verbose:是否在控制台显示正在解码的文本。如果为 True,则显示所有详细信息;如果为 False,则显示最少的详细信息;如果为 None,则不显示任何信息。【建议显示】Whether to display the text being decoded to the console. If True, displays all the details, If False, displays minimal details. If None, does not display anything
(可选)
initial_prompt:对第一个窗口的提示词,方便模型区分一些专有名词什么的Optional text to provide as a prompt for the first window. This can be used to provide, or "prompt-engineer" a context for transcription, e.g. custom vocabularies or proper nouns to make it more likely to predict those word correctly.
其他的更深入就是某个指标达不到预定值的操作,较少用,不深入了,我也不懂
封装一下,更规范一点:
1 import whisper
2 from whisper.utils import get_writer
3
4 model = whisper.load_model('small')#可以放在里面,这里方便调用
5
6 def get_transcribe(audio: str, language: str = 'en'):
7 return model.transcribe(audio=audio, language=language, verbose=True)
8
9 def save_file(results, format='tsv'):
10 writer = get_writer(format, 'output/')
11 writer(results, f'transcribe.{format}')
12
13 def get_language():
14 """
15 构造了个语言选择输入,如果是默认就回车就好了,会设置为英文
16 :return:
17 """
18 language_input = input("input the song language[default->enter]\n"
19 "(英语->en、中文->zh、德语->de、西班牙语->es、法语->fr、日语->ja、.....):")
20 default = 'en' if not language_input else language_input #如果language_input为空 则语言为英文,否则是输入的语言
21 print(f"model language is {default}")
22 return default
23
24
25 if __name__ == "__main__":
26 result = get_transcribe(audio=input("please input your music path:"), language= get_language())
27 print(result.get('text', ''))
4 保存歌词信息
调用方法:
def get_writer(output_format: str, output_dir: str) -> Callable[[dict, TextIO, dict], None]:explain:
output_format:输出的格式,str类型,可选形式如下:writers = {
"txt": WriteTXT,
"vtt": WriteVTT,
"srt": WriteSRT,
"tsv": WriteTSV,
"json": WriteJSON,
}probe in
output_format:if output_format == "all": all_writers = [writer(output_dir) for writer in writers.values()]
这个选项还可以是all,直接全部格式都生成一遍
output_dir:输出文件夹调用方式:
1 def save_file(results, format='tsv'):
2 writer = get_writer(format, 'output/')
3 writer(results, f'transcribe.{format}') #直接调用就好,第一个参数是前面我们获取的歌词信息result,后面跟的是保存的文件名字
5 all code:
import whisper
from whisper.utils import get_writer
model = whisper.load_model('small')
def get_transcribe(audio: str, language: str = 'en'):
return model.transcribe(audio=audio, language=language, verbose=True)
def save_file(results, format='tsv'):
writer = get_writer(format, 'output/')
writer(results, f'transcribe.{format}')
def get_language():
"""
构造了个语言选择输入,如果是默认就回车就好了,会设置为英文
:return:
"""
language_input = input("input the song language[default->enter]\n"
"(英语->en、中文->zh、德语->de、西班牙语->es、法语->fr、日语->ja、.....):")
default = 'en' if not language_input else language_input #如果language_input为空 则语言为英文,否则是输入的语言
print(f"model language is {default}")
return default
if __name__ == "__main__":
result = get_transcribe(audio=input("please input your music path:"), language= get_language())
print('-'*50)
print(result.get('text', ''))
save_file(result)
save_file(result, 'txt')
save_file(result, 'srt')
6 参考:
python 音频处理(2)——提取PPG特征之whisper库的使用(2.1)的更多相关文章
- python音频处理相关类库
一.eyeD3 以下是eyed3的官方介绍 eyeD3 is a Python tool for working with audio files, specifically mp3 files co ...
- Python基于共现提取《釜山行》人物关系
Python基于共现提取<釜山行>人物关系 一.课程介绍 1. 内容简介 <釜山行>是一部丧尸灾难片,其人物少.关系简单,非常适合我们学习文本处理.这个项目将介绍共现在关系中的 ...
- 『开发技巧』Python音频操作工具PyAudio上手教程
『开发技巧』Python音频操作工具PyAudio上手教程 0.引子 当需要使用Python处理音频数据时,使用python读取与播放声音必不可少,下面介绍一个好用的处理音频PyAudio工具包. ...
- < python音频库:Windows下pydub安装配置、过程出现的问题及常用API >
< python音频库:Windows下pydub安装配置.过程出现的问题及常用API > 背景 刚从B站上看过倒放挑战之后也想体验下,心血来潮一个晚上完成了基本的实现.其中倒放与播放部分 ...
- Python音频操作+同时播放两个音频
对于python而言,音频的操作可以使用pygame包中的sound 和 music对象,本博客主要讲解这两个对象. 1.sound对象 Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文 ...
- ARCGIS API for Python进行城市区域提取
ArcGIS API for Python主要用于Web端的扩展和开发,提供简单易用.功能强大的Python库,以及大数据分析能力,可轻松实现实时数据.栅格数据.空间数据等多源数据的接入和GIS分析 ...
- 一定要用Photoshop?no!动手用Python做一个颜色提取器! ⛵
作者:韩信子@ShowMeAI Python3◉技能提升系列:https://www.showmeai.tech/tutorials/56 计算机视觉实战系列:https://www.showmeai ...
- Python爬虫学习==>第五章:爬虫常用库的安装
学习目的: 爬虫有请求库(request.selenium).解析库.存储库(MongoDB.Redis).工具库,此节学习安装常用库的安装 正式步骤 Step1:urllib和re库 这两个库在安装 ...
- Python爬虫与数据分析之爬虫技能:urlib库、xpath选择器、正则表达式
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- python(15)提取字符串中的数字
python 提取一段字符串中去数字 ss = “123ab45” 方法一:filter filter(str.isdigit, ss) 别处copy的filter的用法: # one>> ...
随机推荐
- 重学前端 - react-第二节: 添加ts + scss
重学前端 - react: 添加ts + scss 简介: 上一节我们新建了 react 项目.项目中并没有使用 ts + scss. 现在我们为项目添加 ts + scss.是项目后期维护更加方便, ...
- 记一次 React context 使用
学习 React 之 Context 使用 记录一次React context 使用 React.createContext Api 新建文件 contexts.js 文件用来存放 context 对 ...
- MATLAB神经网络工具箱使用介绍
本文介绍MATLAB软件中神经网络拟合(Neural Net Fitting)工具箱的具体使用方法. 在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(AN ...
- Service Mesh技术详解
深入探讨Service Mesh的基本概念和核心技术,涵盖了服务发现.负载均衡.断路器与熔断机制,以及数据平面与控制平面的详细工作原理和实现方法. 关注作者,复旦博士,分享云服务领域全维度开发技术.拥 ...
- 11-Python网络编程
socket包介绍 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 创建一个T ...
- Netty(三)Netty模型
1. Netty模型 Netty主要基于主从Reactor多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor. 简版图: 说明: BossGroup线程维护Selector ...
- hynitron ts 驱动分析
# hynitron ts 驱动分析 背景 在公司项目中搞LCD移植的时候,在TP功能上,有时候频繁操作屏幕时会导致i2c总线返回-2错误. 问题描述: 1.安卓桌面起来以后,点击屏幕有响应. 2.此 ...
- R语言遍历文件夹求取其中所有栅格文件的平均值
本文介绍基于R语言中的raster包,遍历读取多个文件夹下的多张栅格遥感影像,分别批量对每一个文件夹中的多个栅格图像计算平均值,并将所得各个结果栅格分别加以保存的方法. 其中,本文是用R语言来 ...
- 千万别忽视基础!十张图带你一步步理解Java内存结构!
作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发.但是一旦发生内存泄漏或者内存溢出,如果对Java内存 ...
- 基于OMAPL138+FPGA核心板——MCSDK开发入门(下)
本文测试板卡为创龙科技 SOM-TL138F 是一款基于 TI OMAP-L138(定点/浮点 DSP C674x + ARM9)+ 紫光同创 Logos/Xilinx Spartan-6 低功耗 F ...