FasterWhisperGUI 更快更强更好用的 whisper

作者: siediyer 分类: python 发布时间: 2024-02-04 01:59

我们已经知道OpenAI 的开源模型 whisper,可以执行 99 种语言的语音识别和文字转写。但是 whisper 模型占用计算资源多,命令行使用门槛高,所以还介绍了 whisper 模型的 c++ 实现:whisper.cpp 项目,以及该项目的 GUI 版本 :whisperDesktop 。whisper.cpp 项目采用 c++ 语言以及 ggml 张量计算库对 whisper 模型进行了重新实现,whisperDesktop 则对whsiper.cpp 的成果进行了进一步利用,采用 Direct3D 11 着色渲染器作为后端计算器,在兼容更多设备的同时,做到了高速、准确的语音识别,同时还支持了实时录音实时转写——即对音频流的支持。

但是,whisper 模型本身还存在一些问题,例如 模型幻听问题(大部分的类似于不断重复同一句话、无语音部分复读莫名内容等都是由于这个原因造成的)。要更好使用 whisper 模型就需要能够准确调试模型参数。但 whisper 模型参数众多,且命令行使用对使用者有一定要求,而且只有 torch 版可以做到调整参数,whisperDesktop 版本由于根本没有实现 whisper 模型的可调整参数,因此根本无法使用参数。而使用 VAD 类工具也需要一定的动手能力。

今天,我们介绍另一个 whisper 项目——faster-whisper 项目。该项目是具有完全的 whsiper 模型参数,且自带 VAD 加持的 whisper 版本,该版本使用了 CTranslate2 来重新实现 whsiper 模型,CT2 对 transformer 类网络进行了优化,使模型推理效率更高。

项目地址:

https://github.com/guillaumekln/faster-whisper

该项目不仅可以使用 whisper 模型的全部参数,且自带了 VAD 模型进行语音活动检测,

该功能由  Silero VAD 模型提供。

所谓 VAD 即 Voice Activity Detection —— 声音活动检测,在语音信号处理中,例如语音增强,语音识别等领域有着非常重要的作用。它的作用是从一段语音(纯净或带噪)信号中标识出语音片段与非语音片段。在语音转写任务中,可以提前将语音和非语音部分分离出来,从而提升 whisper 网络识别速度,并减少模型幻听。

Silero VAD 项目官网地址:

https://github.com/snakers4/silero-vad

faster-whisper 项目的安装部署
目前 faster-whisper 项目可通过 pip 进行安装,之后可在脚本中编程使用:

pip install faster-whisper

官方用例:

from faster_whisper import WhisperModel

model_size = "large-v2"

# Run on GPU with FP16
model = WhisperModel(model_size, device="cuda", compute_type="float16")

# or run on GPU with INT8
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# or run on CPU with INT8
# model = WhisperModel(model_size, device="cpu", compute_type="int8")

segments, info = model.transcribe("audio.mp3", beam_size=5)

print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

考虑到该项目依然需要编写代码,使用不太方便,我们进行了项目的重新封装,提供了可安装的 GUI 界面版本——FasterWhisperGUI!

 

FasterWhisperGUI
我们使用 PySide6 进行GUI开发,对 faster-whisper 进行了封装,封装之后的版本仍然可以使用 VAD 功能,并提供全部 whisper 和 VAD 模型的参数供用户进行调整。

下载地址:

https://github.com/CheshireCC/fatser_whisper_GUI/releases/tag/0.1.0

onedriver 地址:

https://1drv.ms/f/s!Ao8y7nfphmnplAPt4fTk1F3JHXUT?e=bIMW4p

国内网盘地址:

链接:https://pan.baidu.com/s/1i-iBnvIcxmXUbGp330I_Tw?pwd=heo6
提取码:heo6

软件为安装版,暂未提供绿色版。

 

软件使用方法
1. 模型功能:

软件参数-模型参数
参数详解:

使用本地模型 —— 在线下载模型,该选项只能二选一,选择本地模型时,需要使用转换为 CT2 格式的本地模型,不能使用 OpenAI 的原版模型,large-v2 版本的转换模型我提供在文章末尾。选择在线模型时将会从  Hugging Face Hub 下载转换好的模型。该网站也支持访问并手动下载。在软件内下载时如果出现 “SSL” 错误或者 “HTTPS” 错误,请关闭代理,使用龟速进行下载。如果出现 “主机强制关了一个现有链接”错误,说明访问太频繁,被反爬机制阻断,稍歇之后再试。

处理设备:选择 cuda 时需要有 GPU 设备,且需要安装 英伟达的 CUDA 套件。

选择 cpu 则使用 cpu 进行处理。

设备号:要使用的设备顺序号,有多块显卡时可以修改值进行切换;也可使用 “,” 进行分隔,填写多个设备号,从而实现多设备处理(未在多设备上进行过测试)。

计算精度:即模型量化精度,允许对模型精度进行截断,甚至使用 int8 这种整型数值进行计算,实际上该选项可能对模型转换后的磁盘大小影响更大,不一定很影响识别结果。。。

线程数:使用 CPU 的时候,采用的线程数,该参数默认为4

并发数:whisper 允许模型并发运行,多模型并发对同一任务加速或者多识别任务并发同时运行。但由于未对并发相关功能进行过测试,所以不清楚相关行为,该参数作用与用法尚不明确。

下载缓存目录:在线下载模型时的缓存目录,默认为 ~/.cache/huggingface/hub

是否使用本地缓存:该选项对于转换模型是可选项,即使开启了该选项,如果上述目录中没有有效缓存,则不会读取相关缓存文件,而是尝试使用在线模型下用户选择的模型名进行在线搜索下载。对于加载模型而言,该选项是强制项,如果选择为 True 但本地没有有效缓存,则加载失败。

模型输出目录:转换模型时本地输出目录,用于保存转换后的模型。

转换模型:只能在在线模型模式下工作,当开启本地缓存选项,时软件将会寻找有效缓存目录下的有效缓存文件,并利用本地文件进行转换。

加载模型:将选择的本地模型或者自动下载的模型按照设备类型、量化精度加载到程序中,音频文件处理前的必要操作!

 

如果有你不了解的参数,就不要动它。

 

2. VAD 功能

 

VAD 功能
参数详解:

阈值:语音阈值。Silero VAD 为每个音频块输出语音概率,概率高于此值的认为是语音。最好对每个数据集单独调整此参数,但“懒散”的0.5对大多数数据集来说都非常好。

最小语音持续时间:毫秒单位,时长低于此值的语音块会被抛弃

最大语音持续时间:秒为单位。比该值更长的块将在最后一个持续时间超过 100s 的静音时间戳拆分(如果有的话),以防止过度切割。否则,它们将在时长达到该值之前强制拆分。

最小静息时间:毫秒单位,在每个语音块结束时等待 该值时长之后 再拆分它。

采样窗口:进行音频采样的窗口大小

语音块前后填充:最终被识别为语音的音频块前后都会有该时长的空白填充,毫秒单位。

如果有的参数你不了解,那么就不要动它。。。

 

3. 转写功能:

转写参数
参数详解:

音频文件: 输入文件的路径。

language: 音频中的语言。应该是一个语言代码,如设置为 Auto 则在音频的前30秒内检测语言。

翻译为英语: 要执行的任务(转录或翻译)。

窗口大小: 用于解码的beam大小。

最佳热度: 采样时使用非零温度的候选数。

耐心因子: Beam搜索耐心因子。

惩罚长度: 指数长度惩罚常数。

采样热度候选: 采样的温度。它可以是温度元组,如果根据“gzip 压缩比阈值”或“采样概率阈值”判定为失败,则会依次使用。

gzip 压缩比阈值: 如果gzip压缩比高于此值,则视为失败。

采样概率阈值: 如果对采样标记的平均对数概率低于此值,则视为失败。

静音阈值: 如果无话音概率高于此值,并且对采样标记的平均对数概率低于“采样概率阈值”,则将该段视为静音。

循环提示: 如果为 True,则将模型的前一个输出作为下一个窗口的提示提供;禁用可能会导致文本在窗口之间不一致,但模型不太容易陷入失败循环,比如重复循环或时间戳失去同步。

初始提示词: 为第一个窗口提供的可选文本字符串或词元id可迭代项。

初始文本前缀: 为第一个窗口提供的可选文本前缀。

空白抑制: 在采样开始时抑制空白输出。

特定标记抑制: 要抑制的标记ID列表。 -1 将抑制配置文件 config.json中定义的默认符号集。

关闭时间戳: 仅对文本标记进行采样。不输出时间戳,输出 txt 文件而非 str 字幕文件。

最晚开始时间戳: 初始时间戳不能晚于此时间。

单词级时间戳: 使用交叉注意力模式和动态时间规整提取单词级时间戳,并在每个段的每个单词中包含时间戳。

标点向后合并: 如果 单词级时间戳为 True,则将这些标点符号与下一个单词合并。

标点向前合并: 如果 单词级时间戳 为 True,则将这些标点符号与前一个单词合并。

 

如果有的参数你不了解,那么就不要动它。。。

 

4. 执行转写任务

在设置好全部参数,并且选择了要识别的音视频文件之后,就前往 执行转写 页面,点击唯一的按钮,就可以自动开始执行转写任务了。

执行转写
转写执行的效果如下:

 

执行效果

FasterWhisper 中实现了使用 VAD 模型对音频进行预处理,实际上有了 VAD 功能之后,模型本身的幻听参数有时候就不那么重要了,但是如果转写效果不佳,还是可以尝试开关 VAD 功能并调整模型幻听参数,来改善效果。

(如果你使用 tiny 之类的小模型,那么在 CPU 上作全精度计算,效果会更佳。)

软件所有功能均有工具提示,鼠标长时间悬停在输入框或按钮上即可显示提示信息。

全部的长下拉框均有检索功能,选择音视频文件语言的时候只需要输入相关字符就可以自动检索出相关的语言。

 

模型下载
最后附上已经转换完成的模型的下载。

官网地址:

https://huggingface.co/models?sort=trending&search=faster-whisper

官网不仅能下载 OpenAI 官方模型的转换版本,还能下载由用户自行调整并上传的版本。

官方版本网盘:

链接:https://pan.baidu.com/s/1befgw3FQjl3orQQVPHxP8Q?pwd=63zj
提取码:63zj

模型很多很大,按需下载一两个即可。

 

最后的最后:

关于字幕翻译的问题,虽然各种 gpt 泛滥的今天,这应该不成问题,但是我还是为大家找了一位 很好的翻译官,它就是 Claude 老师。

访问:

claude.ai/chat

注册账号或者使用 Google 账号登录即可开始聊天。支持上传 5mb 以内的文本文件、pdf文件等等,支持 100k 上下文。。。。这是连 ChatGPT 也没有的深度聊天。

要翻译字幕文件请上传 txt 之后或者复制粘贴软件调试框内容之后 这样告诉他:“翻译文档内容到中文,注意保留时间戳信息”

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Title - Artist
0:00