《AI大模型开发笔记》Faster-Whisper 免费开源的高性能语音识别模型

server/2024/11/24 17:14:43/

whisper模型免费开源的语音识别模型">1 Whisper模型,免费开源的语音识别模型

Whisper模型是OpenAI公开的语音识别模型。这是一个免费可商用的模型。
Whisper模型根据参数量来区分,有多个不同的版本,分别是tiny,base,small medium,large, large-v2, large-v3。

目前性能最好的是2023年11月7日发布的参数量为1550M的large-v3。

与large-v2相比,large-v3主要有以下改进:

  • 使用了更多的训练数据进行训练,100万小时标注数据和400万小时无标注数据。
  • 输入特征使用了128维的fbank(v2使用了80维fbank)。
  • token增加了对粤语的支持。
  • 误识率(Error rate)比large-v2降低了10%至20%。


图1. Whisper模型各种版本的比较

参考资料:https://huggingface.co/openai/whisper-large-v3

whisperwhisper模型的高速推理版">2 Faster-whisper:Whisper模型的高速推理版

Whisper large模型由于参数量比较大,推理的速度比较慢。
为了提高推理的速度,faster-whisper通过使用 CTranslate2 工具进行优化,大幅度改善了推理的速度。

从下图可以看出,faster-whisper 推理时间只有原模型的1/5, GPU显存的使用也不到原来的二分之一。


图2. Whisper与Faster Whisper的推理对比(语音文件长度为13分钟)

相关链接:
Falster-whisper: GitHub - SYSTRAN/faster-whisper: Faster Whisper transcription with CTranslate2
CTranslate2: GitHub - OpenNMT/CTranslate2: Fast inference engine for Transformer models

3 环境安装,语音识别代码

我的运行环境:Windows10,Anaconda,NVIDIA Quadro RTX 3000 GPU

第一步:通过下面的命令来安装faster-whisper

pip install faster-whisper
pip install nvidia-cublas-cu11 nvidia-cudnn-cu11 #使用GPU时需要

第二步: 准备一个语音文件,比如 sample_3m.wav

第三步: 拷贝并运行下面的代码

import os
import timeos.environ['KMP_DUPLICATE_LIB_OK']='True'# 针对使用GPU时出现的问题(请参考文档中的常见问题)
os.environ["PATH"] += os.environ["PATH"] \+  ";" +  r"C:\Users\user01\anaconda3\Lib\site-packages\nvidia\cudnn\bin" \+  ";" +  r"C:\Users\user01\anaconda3\Lib\site-packages\nvidia\cublas\bin"start_time = time.time()from faster_whisper import WhisperModel
model_size = "large-v3"# 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")
print(f"Model load: {time.time()-start_time} s")start_time = time.time()
segments, info = model.transcribe("tmp1/sample_3m.wav", beam_size=5)
print(f"Recognition: {time.time()-start_time} s")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))

几个参数说明:

  • word_timestamps:默认值为true,Word-level timestamps,关闭后识别会更快
  • vad_filter:默认值为true,自动删除长度为2秒以上的无音部分

更多参数,请参考:faster-whisper/faster_whisper/transcribe.py at master · SYSTRAN/faster-whisper · GitHub

4 常见问题

下面是,我在代码执行过程中碰到的问题。如果,您有其他问题,欢迎在视频下面留言。

  • Q1:OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
    程序中加入以下代码后解决。

    import os
    os.environ['KMP_DUPLICATE_LIB_OK']='True'
    

    参考资料:
    https://stackoverflow.com/questions/64209238/error-15-initializing-libiomp5md-dll-but-found-libiomp5md-dll-already-initial

  • Q2: 使用GPU过程中出现的错误 Could not load library cudnn_ops_infer64_8.dll. Error code 126
    解决方法如下:
    第一步:安装以下开发库

    pip install nvidia-cublas-cu11 nvidia-cudnn-cu11
    

    第二步:将对应的开发库的文件位置加入到PATH中。
    然后找到响应的开发库的位置

    os.environ["PATH"] += os.environ["PATH"] \+  ";" +  r"C:\Users\YourUserName\anaconda3\Lib\site-packages\nvidia\cudnn\bin" \+  ";" +  r"C:\Users\YourUserName\anaconda3\Lib\site-packages\nvidia\cublas\bin"

http://www.ppmy.cn/server/144594.html

相关文章

MySQL安装及数据库基础

目录 一. MySQL下载安装 1.1 安装(如果之前有安装过MySQL,先执行下面的卸载流程) 1.1.1 更新系统的软件包列表 1.1.2 安装MySQL服务器 1.1.3 检查MySQL服务是否启动,若没有启动手动启动 1.1.4 登录MySQL&#x…

【论文阅读】Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks

Poison Forensics: Traceback of Data Poisoning Attacks in Neural Networks 核心原理前提条件方法第一个问题第二个问题 核心原理 有毒样本会使模型更接近参数空间中的最佳位置,良性样本会使该模型向其随机初始化状态移动 前提条件 最重要的: 可以…

Perfetto学习大全

Perfetto 是一个功能强大的性能分析和追踪工具,主要用于捕获和分析复杂系统中的事件和性能数据,特别是在 Android 和 Linux 环境下。它的核心目标是帮助开发者深入了解系统和应用程序的运行状态,以便优化性能和诊断问题。 Perfetto的主要作用…

嵌入式开发人员如何选择合适的开源前端框架进行Web开发

在嵌入式系统的Web开发中,前端框架的选择对于项目的成败有着决定性的影响。一个合适的框架不仅能提高开发效率,还能保证系统的稳定性和可扩展性。本文将介绍几款适用于嵌入式Web开发的开源前端框架,并探讨它们的优缺点。 1. Element Plus V…

【Python入门第八讲】不可变的列表 | 元组

元组 列表非常适合用于存储在程序运行期间可能变化的数据集。列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要。然而,有时候你需要创建一系列不可修改的元素,元组可以满足这种需求。 Python将不能修改的值称为不可变的&…

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署,请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项:后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…

php:nginx如何配置WebSocket代理?

在nginx配置中加入以下配置即可: server {listen 80;server_name test.com;# 配置 WebSocket 代理location /ws {proxy_pass http://127.0.0.1:8083;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade&qu…

软硬件项目运维方案书,系统运维资料,运维实施方案,运维服务方案(Word原件)

1 系统的服务内容 1.1 服务目标 1.2 信息资产统计服务 1.3 网络、安全系统运维服务 1.4 主机、存储系统运维服务 1.5 数据库系统运维服务 1.6 中间件运维服务 2 运维服务流程 3 服务管理制度规范 3.1 服务时间 3.2 行为规范 3.3 现场服务支持规范 3.4 问题记录规范 4 应急服务响…