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

news2025/1/12 3:59:57

文章目录

  • 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.coloradmin.cn/o/1879495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打开防火墙设置提示需要使用新应用以打开此windowsdefender

拿到一台新电脑,装好虚拟机。主机ping虚拟机正常,虚拟机上网也正常,但是虚拟机ping主机ping不通。根据我多年虚拟机使用经验,这显然是因为主机防火墙没关。但是当我准备关闭主机防火墙的时候,发现防火墙设置打不开。界…

rtthread stm32h743的使用(十二)spi设备fal驱动的使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图: fal驱动的使用是建立在sfud驱动之上的,所以我们在上一节使用的工程基础上继续实验。 1.在上一节工程的基础…

互联网大厂核心知识总结PDF资料

我们要敢于追求卓越,也能承认自己平庸,不要低估3,5,10年沉淀的威力 hi 大家好,我是大师兄,大厂工作特点是需要多方面的知识和技能。这种学习和积累一般人需要一段的时间,不太可能一蹴而就&…

Swift宏的实现

上篇介绍了Swift宏的定义与生声明,本篇主要看看是Swift宏的具体实现。结合Swift中Codable协议,封装一个工具让类或者结构体自动实现Codable协议,并且添加一些协议中没有的功能。 关于Codable协议 Codable很好,但是有一些缺陷&…

Cherno 游戏引擎笔记 (45~60)

有几个部分的笔记以图片形式呈现(如果没找到文本可以查看是否遗漏了图片笔记) My Github REPO(GitHub - JJJJJJJustin/Nut: The game_engine which learned from Cherno) 源码笔记,希望帮到你 :-} ---Shader Library(着色器库&…

x-file-storage一行代码进行文件上传,摆脱阿里云,腾讯云,华为云等不同云的学习,简单高效

问题: 不使用x-file-storage时如果使用某个云首先需要学习他的sdk,这样很麻烦,而x-file-storage集成了各种云的上传,只需要进行配置即可一行代码进行上传 使用 官方地址:X File Storage 一行代码将文件存储到本地、FTP、SFTP、…

线性表与顺序存储结构(下)

前言 接上文(线性表与顺序存储结构(上))。 这些顺序存储结构的方法在顺序表上下卷中已经提到过,但是有些许不同,可以为理解顺序表提供更丰富的视角。(不过最主要的区别在于顺序表上下卷中的顺…

一个合理的前端应用文件结构

在大型应用中,最关键且最具挑战性的方面之一就是拥有一个良好且合理的文件结构。在考虑通过微前端将代码库拆分成多个应用之前,可以遵循一些步骤来改善项目级别的架构,并在您考虑这一路径时使过渡更容易。 我们的目标是应用某种模块化方法&am…

关于图片大小问题造成的QPixmap或QImage读取图片失败的解决办法

今天碰到一个奇怪又离谱的问题 : 图片加载失败。明明路径是正确的,图片也实实在在存在。。。 经过比对,发现如下问题: 我就齐了怪了 这大小怎么差这么多?会不会是这里除了问题。秉持着怀疑的态度,我试着用GIMP重新导出…

java笔记(30)——反射的 API 及其 使用

文章目录 反射1. 什么是反射2. 获取class字段(字节码文件对象)方式1方式2方式3应用 3. 获取构造方法和权限修饰符前期准备获取所有的公共构造方法获取所有的构造方法获取无参构造方法获取一个参数的构造方法获取一个参数的构造方法获取两个参数的构造方法…

查看Linux系统中用过什么命令 history

提示:以下所有命令都在Ubuntu-24.04-live-server-amd64系统中运行 文章目录 前言一、基本用法:二、查看其他用户历史三、增加时间戳结语 前言 history 命令用于显示和操作当前用户在当前会话中执行过的命令历史记录。它是 Bash shell 的内置命令&#x…

架构设计上中的master三种架构,单节点,主从节点,多节点分析

文章目录 背景单节点优点缺点 主从节点优点缺点 多节点优点缺点 多节点,多backup设计优点缺点 总结 背景 在很多分布式系统里会有master,work这种结构。 master 节点负责管理资源,分发任务。下面着重讨论下master 数量不同带来的影响 单节点 优点 1.设…

PTA:7-194 循环结构 —— 中国古代著名算题。趣味题目:物不知其数。

作者 苑丽红 单位 长春理工大学 中国古代著名算题。原载《孙子算经》:“今有物不知其数,三三数之剩二;五五数之剩三;七七数之剩二。问物几何?”。本题要求:设某物数量是 N,且三三数剩 x,五五…

如何在Ubuntu20上离线安装joern(包括sbt和scala)

在Ubuntu 20上离线安装Joern,由于Joern通常需要通过互联网从其官方源或GitHub等地方下载,但在离线环境中,我们需要通过一些额外的步骤来准备和安装。(本人水平有限,希望得到大家的指正) 我们首先要做的就是…

Excel 快速查询工具 2023.7.1 更新

Excel 快速查询工具作者表示这个软件是因为有时候需要在 Excel 和网站之间进行切换非常的麻烦,这款软件可以以半透明的方框位于桌面上。 特点 软件窗口半透明并至于顶部,无需来回切换界面。 实时查询,不用点击查询或者按回车之类的&#x…

什么是Cookie?有什么用?如何清除浏览器中的Cookie?

互联网上的每一次点击和每一个选择都可能被一种名为Cookie的技术记录下来。但Cookie是什么?我们在网站上登录时,为什么经常会被问及是否接受Cookie?接受Cookie登录会不会影响我们的在线隐私? Cookie是什么? Cookie是一…

vue3 全局引入 onMounted, reactive, ref 的插件全局引入

webpack 的引入 npm install -D unplugin-auto-import const AutoImport require(unplugin-auto-import/webpack).default;configureWebpack: {devtool: source-map,module: {rules: [{test: /\.mjs$/,include: /node_modules/,type: javascript/auto}],}, plugins: [Aut…

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

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

基于大津阈值法和二值化与联通区域标记进行图像目标计数

1 建模 A.读取图像: 1.使用imread函数读取图像文件。 2.如果图像是彩色的,通常需要先转换为灰度图像,因为大津阈值法通常应用于灰度图像。 B.灰度化: 1.如果图像是彩色的,使用rgb2gray函数将其转换为灰度…

Data-Driven Reinforcement Learning for Robotic Manipulation

意思是 不同的任务以及机器人都有单独的数据和模型 未来需要整合 一个大的数据集包含所有的 然后训练一个大模型 以后具体的任务只需要针对这个模型进行微调 challenge bootstrapping with large data 2 3 4 高清图补充