【小沐学AI】Python实现语音识别(whisperX)

文章目录

  • 1、简介
    • 1.1 whisper
    • 1.2 whisperX
  • 2、安装
    • 2.1 安装cuda
    • 2.2 安装whisperX
  • 结语

1、简介

1.1 whisper

https://arxiv.org/pdf/2212.04356
https://github.com/openai/whisper

Whisper 是一种通用语音识别模型。它是在各种音频的大型数据集上训练的,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。
在这里插入图片描述
Transformer 序列到序列模型针对各种语音处理任务进行训练,包括多语言语音识别、语音翻译、口语识别和语音活动检测。这些任务共同表示为解码器要预测的一系列标记,从而允许单个模型取代传统语音处理管道的许多阶段。多任务训练格式使用一组特殊标记作为任务说明符或分类目标。

1.2 whisperX

https://github.com/m-bain/whisperX

WhisperX:具有单词级时间戳(和Diarization)的自动语音识别

  • WhisperX 简介

Whisper 是一个由 OpenAI 开发的通用语音识别模型(ASR),在大量多样化的音频数据集上进行训练,具有惊人的准确性。它同时也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。OpenAI 已经将 Whisper 开源,供社区使用。

WhisperX 是基于 OpenAI 开源项目 Whisper 的一个分支,它是一款功能强大的语音转文本(STT,Speech-to-Text)工具,以其出色的转录能力而闻名,并支持多种语言。更令人兴奋的是,它完全免费。
在这里插入图片描述

  • 为什么选择 WhisperX

Whisper 在大量多样化的音频数据上进行训练。尽管它能够提供高准确度的转录,但相关的时间戳是话语级别而非单词级别,可能存在数秒不准。而且,Whisper 并不原生支持批处理。

WhisperX 提供了一种快速的自动语音识别方法(在使用 large-v2 时可实现 70x 实时速度),具备单词级时间戳和说话者辨识功能。

  • WhisperX的特点
    • 使用 whisper large-v2 进行批处理推断,可实现 70x 实时转录。
    • 利用 faster-whisper 作为后端,对于 large-v2 只需小于 8GB 的 GPU 显存。(使用beam_size=5)
    • 利用 wav2vec2.0 对齐,实现准确的单词级时间戳。
    • 利用来自 pyannote-audio 的说话者辨识,实现多说话者 ASR(带有说话者 ID 标签)。
    • VAD 预处理,减少幻听问题,并实现无 WER 降低的批处理。

2、安装

2.1 安装cuda

CUDA是什么:CUDA是NVIDIA推出的一种编程技术。它允许开发者使用C语言来编写能在NVIDIA的图形处理器上运行的代码。通过CUDA,开发者可以将GPU用于通用的并行计算,大大提高了计算效率。
CUDA的一个重要特点是,它允许软件开发者直接使用NVIDIA的GPU来执行某些计算密集型的任务。这是因为GPU内部有许多并行处理单元,可以同时执行许多计算任务,从而大大提高了计算速度。
另外,CUDA还提供了一套完整的开发工具链,包括编译器、调试器和性能分析器,使得开发者可以更方便地开发和优化CUDA程序。
在这里插入图片描述

首先使用 cmd 命令行输入 nvidia-smi ,在第一行最右边可以看到CUDA的版本号,我的版本是11.6

nvidia-smi 

在这里插入图片描述
https://pytorch.org/get-started/locally/
打开网址选择一个比较靠近的版本。
在这里插入图片描述
选择生成命令为:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

在这里插入图片描述
如果网络不好,可以直接到镜像源进行下载安装 https://download.pytorch.org/whl/torch_stable.html
如果你希望使用 PyTorch 稳定版本,建议使用 CUDA 11.8。可以从 https://developer.nvidia.com/cuda-toolkit-archive 下载相应的存档文件。

验证CUDA是否可用,直接继续命令行中输入 python代码:

import torch
ret = torch.cuda.is_available()
print(ret)

在这里插入图片描述
如果输出为True,则代表可以使用GPU显卡了。

import torch
print("Torch version:", torch.__version__)
print("CUDA version:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("CUDA device:", torch.cuda.get_device_name(torch.cuda.current_device()))

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print(device)

在这里插入图片描述
在这里插入图片描述
https://developer.nvidia.com/cuda-11-8-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exe_local
在这里插入图片描述

在这里插入图片描述

nvcc -V

在这里插入图片描述
导入 cuDNN:
https://developer.nvidia.com/cudnn-downloads?target_os=Windows&target_arch=x86_64

cuDNN 是一款在 Nvidia CUDA 工具包上运行的深度学习库。它专为加速深度学习任务而设计,提供了在 GPU 上高效执行深度神经网络所需的各种功能和优化。

  • 下载 cuDNN。(在登录 Nvidia 账户后,需要注册成为 Nvidia Developer Program 会员。在这个过程中,会要求提供个人信息。)
  • 选择CUDA 11.x版本。
  • 选择Local Installer for Windows(Zip)下载。
    在这里插入图片描述
    将下载好的 zip 文件解压出来,会得到如下 3 个文件夹:
bin
include
lib

将上述 3 个文件夹移动到CUDA\v11.8目录中,路径为:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8

添加以下环境变量:

变量名:CUDNN_PATH
变量值:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8

2.2 安装whisperX

pip install git+https://github.com/m-bain/whisperx.git
or
pip install git+https://github.com/m-bain/whisperx.git --upgrade

在这里插入图片描述

import whisperx
import gc 
import os

device = "cpu" #"cuda" 
audio_file = "test.mp3"
batch_size = 16 # reduce if low on GPU mem
compute_type = "int8"#"float16" # change to "int8" if low on GPU mem (may reduce accuracy)

# 1. Transcribe with original whisper (batched)
model = whisperx.load_model("tiny", device, compute_type=compute_type)

# save model to local path (optional)
# model_dir = "/path/"
# model = whisperx.load_model("large-v2", device, compute_type=compute_type, download_root=model_dir)

audio = whisperx.load_audio(audio_file)
result = model.transcribe(audio, batch_size=batch_size)
print(result["segments"]) # before alignment

# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model

# 2. Align whisper output
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], model_a, metadata, audio, device, return_char_alignments=False)

print(result["segments"]) # after alignment

# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model_a

在这里插入图片描述

import whisperx
import zhconv
from whisperx.asr import FasterWhisperPipeline
import time

class WhisperXTool:
    device = "cpu" #"cuda"
    audio_file = "test.mp3"
    batch_size = 16  # reduce if low on GPU mem
    # compute_type = "float16"  # change to "int8" if low on GPU mem (may reduce accuracy)
    compute_type = "int8" # change to "int8" if low on GPU mem (may reduce accuracy)
    fast_model: FasterWhisperPipeline

    def loadModel(self):
        # 1. Transcribe with original whisper (batched)
        self.fast_model = whisperx.load_model("tiny", self.device, compute_type=self.compute_type) #large-v2
        print("模型加载完成")

    def asr(self, filePath: str):
        start = time.time()
        audio = whisperx.load_audio(filePath)
        result = self.fast_model.transcribe(audio, batch_size=self.batch_size)
        s = result["segments"][0]["text"]
        s1 = zhconv.convert(s, 'zh-cn')
        print(s1)
        end = time.time()
        print('识别使用的时间:', end - start, 's')
        return s1

if __name__ == '__main__':
    app = WhisperXTool()
    app.loadModel()
    app.asr(app.audio_file)

在这里插入图片描述

import time
import torch
import os

import whisper
from whisper.utils import get_writer
from faster_whisper import WhisperModel
import whisperx
import gc 

def whisper_test():
    os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
    filename = "test.mp3"   

    ## window GPU  cuda
    ## window CPU  cpu
    ## mac CPU cpu
    ## mac GPU
    model = whisper.load_model("large-v3",device="cuda")
    result = model.transcribe(audio=filename, fp16 =False)
    output_directory = "."

    word_options = {
    "highlight_words": True,
    "max_line_count": 50,
    "max_line_width": 3
    }

    srt_writer = get_writer("srt", output_directory)
    srt_writer(result, filename, word_options)

def faster_whisper_test(): 
    model_size = "large-v3"

    ## window cpu
    model = WhisperModel(model_size, device="cpu", compute_type="int8", cpu_threads=16)
    
    # window gpu
    # model = WhisperModel(model_size, device="cuda", compute_type="float16")
    segments, info = model.transcribe("test.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))

def whisperx_test():
    device = "cpu" 
    model_size = "tiny"
    # model_size ="large-v3"
    audio_file = "test.mp3"
    batch_size = 16
    compute_type = "int8" 

    # widnow CPU
    model = whisperx.load_model(model_size, device, compute_type=compute_type)

    # window GPU
    # model = whisperx.load_model(model_size, "cuda", compute_type="float16")

    audio = whisperx.load_audio(audio_file)
    result = model.transcribe(audio, batch_size=batch_size)

    print(result["segments"])

if __name__ == "__main__":
    whisperx_test()

在这里插入图片描述

更多AI信息如下:
在这里插入图片描述
2024第四届人工智能、自动化与高性能计算国际会议(AIAHPC 2024)将于2024年7月19-21日在中国·珠海召开。
大会网站:更多会议详情
时间地点:中国珠海-中山大学珠海校区|2024年7月19-21日

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

时间复杂度计算

要求算法的时间复杂度时,我们可以分析给定表达式 的阶。让我们来逐步分析: 分析阶的定义: 当我们说一个表达式的时间复杂度是 ( O(g(n)) ),我们指的是当 ( n ) 趋近无穷大时,表达式的增长率与 ( g(n) ) 的增长率相似。…

两数之和你会,三数之和你也会吗?o_O

前言 多少人梦想开始的地方,两数之和。 但是今天要聊的不是入门第一题,也没有面试官会考这一题吧…不会真有吧? 咳咳不管有没有,今天的猪脚是它的兄弟,三数之和,作为双指针经典题目之一,也是常…

SolidWorks强大的工程设计软件下载安装,实现更为高效的设计流程

结构分析:SolidWorks作为一款强大的工程设计软件,集成了有限元分析(FEA)工具,这一工具的运用在工程设计领域具有举足轻重的地位。FEA工具在SolidWorks中的集成,使得工程师们能够便捷地对零件和装配体进行精…

第三十八篇——复盘:如何把信息论学以致用?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 信息论是一个好的学科,里面穿插的知识符合这个时代我们应该具…

STM32F1+HAL库+FreeTOTS学习2——STM32移植FreeRTOS

STM32F1HAL库FreeTOTS学习2——STM32移植FreeRTOS 获取FreeRTOS源码创建工程窥探源码移植 上期我们认识了FreeRTOS,对FreeRTOS有了个初步的认识,这一期我们来上手移植FreeRTOS到STM32上。 获取FreeRTOS源码 进入官网:https://www.freertos.o…

vue+go实现web端连接Linux终端

vuego实现web端连接Linux终端 实现效果 实现逻辑1——vue 依赖包 "xterm": "^5.3.0","xterm-addon-attach": "^0.9.0","xterm-addon-fit": "^0.8.0"样式和代码逻辑 <template><a-modalv-model:visib…

短视频矩阵系统:打造品牌影响力的新方式

一、短视频矩阵概念 短视频营销革命&#xff1a;一站式解决策略&#xff01;短视频矩阵系统是一款专为企业营销设计的高效工具&#xff0c;旨在通过整合和优化众多短视频平台资源&#xff0c;为企业呈现一个全面的短视频营销策略。该系统致力于协助企业以迅速且高效的方式制作…

【ARM】MCU和SOC的区别

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解SOC芯片和MCU芯片的区别 2、 问题场景 用于了解SOC芯片和MCU芯片的区别&#xff0c;内部结构上的区别。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;无 2&#xff09;、电脑环境&#xff1a;无 3&am…

MySQL高级-MVCC-原理分析(RC级别)

文章目录 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView2、先来看第一次快照读具体的读取过程&#xff1a;3、再来看第二次快照读具体的读取过程: 1、RC隔离级别下&#xff0c;在事务中每一次执行快照读时生成ReadView 我们就来分析事务5中&#xff0c;两…

java第三十课 —— 面向对象练习题

面向对象编程练习题 第一题 定义一个 Person 类 {name, age, job}&#xff0c;初始化 Person 对象数组&#xff0c;有 3 个 person 对象&#xff0c;并按照 age 从大到小进行排序&#xff0c;提示&#xff0c;使用冒泡排序。 package com.hspedu.homework;import java.util.…

LLM——10个大型语言模型(LLM)常见面试题以及答案解析

今天我们来总结以下大型语言模型面试中常问的问题 1、哪种技术有助于减轻基于提示的学习中的偏见? A.微调 Fine-tuning B.数据增强 Data augmentation C.提示校准 Prompt calibration D.梯度裁剪 Gradient clipping 答案:C 提示校准包括调整提示&#xff0c;尽量减少产生…

数据结构与算法笔记:实战篇 - 剖析Redis常用数据类型对应的数据结构

概述 从本章开始&#xff0c;就进入实战篇的部分。这部分主要通过一些开源醒目、经典系统&#xff0c;真枪实弹地教你&#xff0c;如何将数据结构和算法应用到项目中。所以这部分的内容&#xff0c;更多的是知识点的回顾&#xff0c;相对于基础篇和高级篇&#xff0c;其实这部…

【Web3项目案例】Ethers.js极简入门+实战案例:实现ERC20协议代币查询、交易

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 目录 简介 前景科普-ERC20 Ethers极简入门教程&#xff1a;HelloVitalik&#xff08;非小白可跳&#xff09; 教程概览 开发工具 V…

虚拟机配置与windows之间文件夹共享samba服务:

虚拟机配置与windows之间文件夹共享samba服务: #输入安装命令&#xff1a; 第一步: 下载samba cd /etc/ sudo apt-get install samba第二步: 配置用户 sudo smbpasswd -a 虚拟机用户名第三步: 进入配置文件配置共享文件 sudo vim /etc/samba/smb.conf末尾输入以下内容: [s…

全球最大智能立体书库|北京:3万货位,715万册,自动出库、分拣、搬运

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 北京城市图书馆的立体书库采用了先进的WMS&#xff08;仓库管理系统&#xff09;和WCS&#xff08;仓库控制系统&#xff09;&#xff0c;与图书…

代码随想录-二叉搜索树(1)

目录 二叉搜索树的定义 700. 二叉搜索树中的搜索 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 98. 验证二叉搜索树 题目描述&#xff1a; 输入输出示例&#xff1a; 思路和想法&#xff1a; 530. 二叉搜索树的最小绝对差 题目描述&#x…

error: Sandbox: rsync.samba in Xcode project

在Targets 的 Build Settings 搜索&#xff1a;User script sandboxing 设置为NO

基于机器学习的制冷系统过充电和欠充电故障诊断(采用红外热图像数据,MATLAB)

到目前为止&#xff0c;制冷系统故障诊断方法已经产生很多种&#xff0c;概括起来主要有三大类&#xff1a;基于分析的方法&#xff0c;基于知识的方法和基于数据驱动的方法。基于分析的方法主要获得制冷系统的数学模型&#xff0c;通过残差来检测和诊断故障。如果存在残差且很…

SonicSense:声学振动丰富机器人的物体感知能力

在通过声学振动进行物体感知方面&#xff0c;尽管以往的研究已经取得了一些有希望的结果&#xff0c;但目前的解决方案仍然受限于几个方面。首先&#xff0c;大多数现有研究集中在只有少数&#xff08;N < 5&#xff09;基本物体的受限设置上。这些物体通常具有均质材料组成…

电路笔记(电源模块): 基于FT2232HL实现的jtag下载器硬件+jtag的通信引脚说明

JTAG接口说明 JTAG 接口根据需求可以选择20针或14针的配置&#xff0c;具体选择取决于应用场景和需要连接的功能。比如之前的可编程逻辑器件XC9572XL使用JTAG引脚&#xff08;TCK、TDI、TDO、TMS、VREF、GND&#xff09;用于与器件进行调试和编程通信。更详细的内容可以阅读11…