《AI大模型开发笔记》Faster-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

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.rhkb.cn/news/477524.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D73【 python 接口自动化学习】- python 基础之正则表达式

day73 正则表达式-元字符匹配 学习日期:20241119 学习目标:正则表达式--133 正则表达式-元字符匹配 学习笔记: 元字符匹配 数量匹配 实践操作 总结 字符串的r标记表示,字符串内转移字符无效,作为普通字符使用正则…

Python浪漫之画明亮的月亮

目录 1、效果展示 2、完整版代码 1、效果展示 2、完整版代码 import turtledef draw_moon():# 设置画布turtle.bgcolor("black") # 背景颜色为黑色turtle.speed(10) # 设置绘制速度# 绘制月亮的外圈turtle.penup()turtle.goto(0, -100) # 移动到起始…

微信小程序包之加农炮游戏

微信小程序 - 气球射击游戏 项目简介 这是一个简单有趣的微信小程序射击游戏。玩家通过控制屏幕底部的加农炮,射击从上方降落的蓝色气球。游戏考验玩家的反应能力和瞄准技巧。 游戏规则 点击屏幕任意位置发射炮弹大炮会自动对准点击位置击中气球获得10分如果气球触…

autogen+ollama+litellm实现本地部署多代理智能体

autogen 是一个专门为大语言模型 (LLMs) 驱动的自治代理 (autonomous agents) 设计的 Python 库,由 Microsoft 开发和维护。它通过高度模块化和可扩展的架构,支持用户快速构建和运行多代理系统,这些代理可以在没有明确人类干预的情况下协作完成复杂任务。AutoGen 支持以最少…

分公司如何纳税

分公司不进行纳税由总公司汇总纳税“子公司具有法人资格,依法独立承担民事责任;分公司不具有法人资格,其民事责任由公司承担。”企业设立分支机构,使其不具有法人资格,且不实行独立核算,则可由总公司汇总缴纳企业所得税…

HashMap源码详解

提醒你一下,用电脑或者平板看,手机屏幕小,图片会看不清楚,源码不方便看 基础前置 看该篇文章之前先看看这篇基础文章 HashMap底层原理-CSDN博客 先来看HashMap里面的一些参数。 1.DEFAULT_INITIAL_CAPACITY 默认的数组初…

09 —— Webpack搭建开发环境

搭建开发环境 —— 使用webpack-dev-server 启动Web服务,自动检测代码变化,有变化后会自动重新打包,热更新到网页(代码变化后,直接替换变化的代码,自动更新网页,不用手动刷新网页) …

动态反馈控制器(DFC)和 服务率控制器(SRC);服务率和到达率简单理解

目录 服务率和到达率简单理解 服务率 到达率 排队论中的应用 论文解析:队列等待成本动态感知控制模型 动态反馈和队列等待成本意识: 服务速率调整算法: 动态反馈控制器(DFC)和 服务率控制器(SRC) SRC公式4的原理 算力资源分配系统中的调整消耗 举例说明 服务…

九、FOC原理详解

1、FOC简介 FOC(field-oriented control)为磁场定向控制,又称为矢量控制(vectorcontrol),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最佳选择…

web-03

CSS回顾 选择器 标签选择器 标签{}ID选择器 标签中定义ID属性。 #ID值{}类选择器 标签中使用class属性 .类名{}关于DIV/span div任意的大小的长方形,大小css: width, height控制。—换行 span-- 一行内 CSS常用属性 width/height 宽度/高度 定义&…

Excel求和如何过滤错误值

一、问题的提出 平时,我们在使用Excel时,最常用的功能就是求和了,一说到求和你可能想到用sum函数,但是如果sum的求和区域有#value #Div等错误值怎么办?如下图,记算C列中工资的总和。 直接用肯定会报错&…

蓝桥杯每日真题 - 第22天

题目:(卡片) 题目描述(12届 C&C B组B题) 解题思路: 该问题要求用数字卡片从 1 开始拼出整数,直到某一时刻不能拼出时停止。要确定拼到哪个最大整数,需要统计 每个数字“1”被用…

Ubuntu20.04 Rk3588 交叉编译ffmpeg7.0

firefly 公司出的rk3588的设备,其中已经安装了gcc 交叉编译工具,系统版本是Ubuntu20.04。 使用Ubuntu20.04 交叉编译ffmpeg_ubuntu下配置ffmpeg交叉编译器为arm-linux-gnueabihf-gcc-CSDN博客文章浏览阅读541次。ubuntu20.04 交叉编译ffmpeg_ubuntu下配…

python代码制作数据集的测试和数据质量检测思路

前言 本文指的数据集为通用数据集,并不单是给机器学习领域使用。包含科研和工业领域需要自己制作数据集的。 首先,在制作大型数据集时,代码错误和数据问题可能会非常复杂。 前期逻辑总是简单的,库库一顿写,等排查的时…

Windows系统编程 - 进程遍历

文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好,我是qmx_07,今天给大家讲解进程遍历的相关知识点 进程的遍历 快照:使用vmware虚拟机的时候,经常需要配置环境服务…

【GD32】(三) ISP基本使用

0 前言 有一块GD32的板子不知道为啥用着用着就下载不了程序了,没办法,只能另寻他法。作为STM32的平替,GD32的功能和STM32基本是一致的,所以也可以使用ISP来下载程序。于是就开始复活这块板子。 1 BOOT模式 对于熟悉STM32开发的人…

【SKFramework框架核心模块】3-2、音频管理模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

开源项目-如何更好的参与开源项目开发

开源之谜-提升自我核心竞争力 一、寻找适合自己的开源项目二、像坐牢一样闭关修炼三、最后的实践 开源代码对所有人开放,开发者可以基于现有代码进行扩展和创新,而不是从零开始,参与开源项目可以提升自我的技术能力,丰富个人的经历…

利用c语言详细介绍下插入排序

插入排序,被称为直接插入排序。它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。 一、图文介绍 我们还是使用数组【10,5,3,20,1],排序使用升序的方式&…

STL——string类常用接口说明

目录 一、string类的介绍 二、string类常用接口的使用说明 1.成员函数 ​编辑 2.迭代器 3.容量 一、string类的介绍 下面是string类的文档对string类的介绍 1.string类是表示字符序列的对象 2.标准字符串类通过类似于标准字符容器的接口为此类对象提供支持&#xff0c…