whisper深入-语者分离

这篇具有很好参考价值的文章主要介绍了whisper深入-语者分离。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习目标:如何使用whisper


学习内容一:whisper 转文字

whisper深入-语者分离,音频开发,whisper

1.1 使用whisper.load_model()方法下载,加载

model=whisper.load_model(参数)
  • name 需要加载的模型,如上图
  • device:默认有个方法,有显存使用显存,没有使用cpu
  • download_root:下载的根目录,默认使用~/.cache/whisper
  • in_memory: 是否将模型权重预加载到主机内存中

返回值
model : Whisper
Whisper语音识别模型实例

def load_model(
    name: str,
    device: Optional[Union[str, torch.device]] = None,
    download_root: str = None,
    in_memory: bool = False,
) -> Whisper:
    """
    Load a Whisper ASR model

    Parameters
    ----------
    name : str
        one of the official model names listed by `whisper.available_models()`, or
        path to a model checkpoint containing the model dimensions and the model state_dict.
    device : Union[str, torch.device]
        the PyTorch device to put the model into
    download_root: str
        path to download the model files; by default, it uses "~/.cache/whisper"
    in_memory: bool
        whether to preload the model weights into host memory

    Returns
    -------
    model : Whisper
        The Whisper ASR model instance
    """

    if device is None:
        device = "cuda" if torch.cuda.is_available() else "cpu"
    if download_root is None:
        default = os.path.join(os.path.expanduser("~"), ".cache")
        download_root = os.path.join(os.getenv("XDG_CACHE_HOME", default), "whisper")

    if name in _MODELS:
        checkpoint_file = _download(_MODELS[name], download_root, in_memory)
        alignment_heads = _ALIGNMENT_HEADS[name]
    elif os.path.isfile(name):
        checkpoint_file = open(name, "rb").read() if in_memory else name
        alignment_heads = None
    else:
        raise RuntimeError(
            f"Model {name} not found; available models = {available_models()}"
        )

    with (
        io.BytesIO(checkpoint_file) if in_memory else open(checkpoint_file, "rb")
    ) as fp:
        checkpoint = torch.load(fp, map_location=device)
    del checkpoint_file

    dims = ModelDimensions(**checkpoint["dims"])
    model = Whisper(dims)
    model.load_state_dict(checkpoint["model_state_dict"])

    if alignment_heads is not None:
        model.set_alignment_heads(alignment_heads)

    return model.to(device)

1.2 使用实例对文件进行转录

result = model.transcribe(file_path)

def transcribe(
    model: "Whisper",
    audio: Union[str, np.ndarray, torch.Tensor],
    *,
    verbose: Optional[bool] = None,
    temperature: Union[float, Tuple[float, ...]] = (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
    compression_ratio_threshold: Optional[float] = 2.4,
    logprob_threshold: Optional[float] = -1.0,
    no_speech_threshold: Optional[float] = 0.6,
    condition_on_previous_text: bool = True,
    initial_prompt: Optional[str] = None,
    word_timestamps: bool = False,
    prepend_punctuations: str = "\"'“¿([{-",
    append_punctuations: str = "\"'.。,,!!??::”)]}、",
    **decode_options,
):
    """
    将音频转换为文本。

    参数:
    - model: Whisper模型
    - audio: 音频文件路径、NumPy数组或PyTorch张量
    - verbose: 是否打印详细信息,默认为None
    - temperature: 温度参数,默认为(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
    - compression_ratio_threshold: 压缩比阈值,默认为2.4
    - logprob_threshold: 对数概率阈值,默认为-1.0
    - no_speech_threshold: 无语音信号阈值,默认为0.6
    - condition_on_previous_text: 是否根据先前的文本进行解码,默认为True
    - initial_prompt: 初始提示,默认为None
    - word_timestamps: 是否返回单词时间戳,默认为False
    - prepend_punctuations: 前缀标点符号,默认为"\"'“¿([{-"
    - append_punctuations: 后缀标点符号,默认为"\"'.。,,!!??::”)]}、"
    - **decode_options: 其他解码选项

    返回:
    - 转录得到的文本
    """

1.3 实战

建议load_model添加参数

  • download_root:下载的根目录,默认使用~/.cache/whisper
    transcribe方法添加参数
  • word_timestamps=True
import whisper
import arrow

# 定义模型、音频地址、录音开始时间
def excute(model_name,file_path,start_time):
    model = whisper.load_model(model_name)
    result = model.transcribe(file_path,word_timestamps=True)
    for segment in result["segments"]:
        now = arrow.get(start_time)
        start = now.shift(seconds=segment["start"]).format("YYYY-MM-DD HH:mm:ss")
        end = now.shift(seconds=segment["end"]).format("YYYY-MM-DD HH:mm:ss")
        print("【"+start+"->" +end+"】:"+segment["text"])

if __name__ == '__main__':
    excute("large","/root/autodl-tmp/no/test.mp3","2022-10-24 16:23:00")


whisper深入-语者分离,音频开发,whisper

学习内容二:语者分离(pyannote.audio)pyannote.audio是huggingface开源音色包

第一步:安装依赖

pip install pyannote.audio

第二步:创建key

https://huggingface.co/settings/tokens
whisper深入-语者分离,音频开发,whisper

第三步:测试pyannote.audio

  • 创建实例:Pipeline.from_pretrained(参数)
  • 使用GPU加速:import torch # 导入torch库
    pipeline.to(torch.device(“cuda”))
  • 实例转化音频pipeline(“test.wav”)

from_pretrained(参数)

  • cache_dir:路径或str,可选模型缓存目录的路径。默认/pyannote"当未设置时。

pipeline(参数)

  • file_path:录音文件
  • num_speakers:几个说话者,可以不带

from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization@2.1", use_auth_token="申请的key")

# send pipeline to GPU (when available)
import torch
device='cuda' if torch.cuda.is_available() else 'cpu'
pipeline.to(torch.device(device))

# apply pretrained pipeline
diarization = pipeline("test.wav")
print(diarization)
# print the result
for turn, _, speaker in diarization.itertracks(yield_label=True):
    print(f"start={turn.start:.1f}s stop={turn.end:.1f}s speaker_{speaker}")
# start=0.2s stop=1.5s speaker_0
# start=1.8s stop=3.9s speaker_1
# start=4.2s stop=5.7s speaker_0
# ...

学习内容三:整合

这里要借助一个开源代码,用于整合以上两种产生的结果

报错No module named 'pyannote_whisper'
如果你使用使用AutoDL平台,你可以使用学术代理加速

source /etc/network_turbo
git clone https://github.com/yinruiqing/pyannote-whisper.git
cd pyannote-whisper
pip install -r requirements.txt

whisper深入-语者分离,音频开发,whisper
这个错误可能是由于缺少或不正确安装了所需的 sndfile 库。sndfile 是一个用于处理音频文件的库,它提供了多种格式的读写支持。

你可以尝试安装 sndfile 库,方法如下:

在 Ubuntu 上,使用以下命令安装:sudo apt-get install libsndfile1-dev
在 CentOS 上,使用以下命令安装:sudo yum install libsndfile-devel
在 macOS 上,使用 Homebrew 安装:brew install libsndfile
然后重新执行如上指令

在项目里面写代码就可以了,或者复制代码里面的pyannote_whisper.utils模块代码

whisper深入-语者分离,音频开发,whisper

import os
import whisper
from pyannote.audio import Pipeline
from pyannote_whisper.utils import diarize_text
import concurrent.futures
import subprocess
import torch
print("正在加载声纹模型")
pipeline = Pipeline.from_pretrained("pyannote/speaker-diarization@2.1",use_auth_token="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")
output_dir = '/root/autodl-tmp/no/out'
print("正在whisper模型")
model = whisper.load_model("large", device="cuda")

# MP3转化为wav
def convert_to_wav(path):
    new_path = ''
    if path[-3:] != 'wav':
        new_path = '.'.join(path.split('.')[:-1]) + '.wav'
        try:
            subprocess.call(['ffmpeg', '-i', path, new_path, '-y', '-an'])
        except:
            return path, 'Error: Could not convert file to .wav'
    else:
        new_path = ''
    return new_path, None


def process_audio(file_path):
    file_path, retmsg = convert_to_wav(file_path)
    print(f"===={file_path}=======")
    asr_result = model.transcribe(file_path, initial_prompt="语音转换")
    pipeline.to(torch.device('cuda'))
    diarization_result = pipeline(file_path, num_speakers=2)
    final_result = diarize_text(asr_result, diarization_result)
    output_file = os.path.join(output_dir, os.path.basename(file_path)[:-4] + '.txt')
    with open(output_file, 'w') as f:
        for seg, spk, sent in final_result:
            line = f'{seg.start:.2f} {seg.end:.2f} {spk} {sent}\n'
            f.write(line)


if not os.path.exists(output_dir):
    os.makedirs(output_dir)

wave_dir = '/root/autodl-tmp/no'

# 获取当前目录下所有wav文件名
wav_files = [os.path.join(wave_dir, file) for file in os.listdir(wave_dir) if file.endswith('.mp3')]

# 处理每个wav文件
# with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
#     executor.map(process_audio, wav_files)
for wav_file in wav_files:
    process_audio(wav_file)
print('处理完成!')

whisper深入-语者分离,音频开发,whisper文章来源地址https://www.toymoban.com/news/detail-764665.html

到了这里,关于whisper深入-语者分离的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前端开发攻略---根据音频节奏实时绘制不断变化的波形图。深入剖析如何通过代码实现音频数据的可视化。

    逐行解析 JavaScript 代码块: 这几行代码首先获取了  audio  和  canvas  元素的引用,并使用  getContext(\\\'2d\\\')  方法获取了 Canvas 2D 上下文对象,以便后续在画布上进行绘图操作。 initCvs  函数用于初始化画布的尺寸。它将画布的宽度设置为窗口宽度的倍数,高度设置为窗口高度

    2024年04月15日
    浏览(56)
  • 使用Python轻松识别音频中文字(Whisper)

    在开会或是讨论问题的时候,我们总有一些内容需要记录下来。但由于各种原因,我们无法做到全面细致的记录。事后我们可能需要补充这些细节性内容,而回放视频或是录音费时费力,这时候语音识别可以帮助我们轻松解决这一痛点。目前,常见的语音识别服务以收费的居

    2024年02月09日
    浏览(37)
  • Whisper与ChatGPT联手,轻松实现音频转录文本

    目录 前言 一、Whisper简介 二、Whisper可用的模型和语言 三、开源 Whisper 本地转录 3.1、安装pytube库 3.2、下载音频MP4文件 3.3、安装 Whisper 库 四、在线 Whisper API 转录 4.1、Whisper API 接口调用 4.2、使用Prompt参数优化 4.3、其它参数介绍 4.4、转录过程翻译功能 4.5、分割音频处理大文件

    2024年02月13日
    浏览(44)
  • 深入探索RK3588平台开发:解析Linux音频调试与alsa-utils工具

    近期我深入研究了RK3588平台的开发,特别是在音频领域的探索。在这个系列的讲解中,我们将重点关注Linux音频调试,并深入探讨与之相关的alsa-utils工具。通过本文,我将为大家详细介绍如何在RK3588平台上进行高效的音频开发,让我们一同踏入这个令人兴奋的领域。 RK3588是瑞

    2024年01月25日
    浏览(53)
  • Whisper 音频转文字模型体验;语音实时转录文字工具

    参考: https://github.com/openai/whisper https://blog.csdn.net/weixin_44011409/article/details/127507692 安装Whisper 和ffmpeg (# on Ubuntu or Debian sudo apt update sudo apt install ffmpeg on Windows using Chocolatey (https://chocolatey.org/) choco install ffmpeg on Windows using Scoop (https://scoop.sh/) scoop install ffmpeg)

    2024年02月11日
    浏览(46)
  • 测试离线音频转文本模型Whisper.net的基本用法

      微信公众号“dotNET跨平台”中的文章《OpenAI的离线音频转文本模型Whisper的.NET封装项目》介绍了基于.net封装的开源语音辨识Whisper神经网络项目Whisper.net,其GitHub地址见参考文献2。本文基于Whisper.net帮助文档中的示例,测试Whisper.net的基本用法。   创建基于.net6的Winform项

    2024年02月09日
    浏览(40)
  • OpenAI的离线音频转文本模型 Whisper 的.NET封装项目

    whisper介绍 Open AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支持其它98种语言的自动语音辨识。 Whisper系统所提供的自动语音辨识(Automatic Speech Recognition,ASR)模型是被训练来运行语音辨识与翻译任务的,它们能将各种语言的语音变

    2023年04月24日
    浏览(38)
  • OpenAI Whisper + FFmpeg + TTS:动态实现跨语言视频音频翻译

    本文作者系360奇舞团前端开发工程师 本文介绍了如何结合 OpenAI Whisper、FFmpeg 和 TTS(Text-to-Speech)技术,以实现将视频翻译为其他语言并更换声音的过程。我们将探讨如何使用 OpenAI Whisper 进行语音识别和翻译,然后使用 FFmpeg 提取视频音轨和处理视频,最后使用 TTS 技术生成新

    2024年02月09日
    浏览(48)
  • 基于Whisper语音识别的实时视频字幕生成 (一): 流式显示视频帧和音频帧

    Whistream(微流)是基于Whisper语音识别的的在线字幕生成工具,支持rtsp/rtmp/mp4等视频流在线语音识别 whishow(微秀)是python实现的在线音视频流播放器,支持rtsp/rtmp/mp4等流式输入,也是whistream的前端。python实现原理如下: (1) SPROCESS.run() 的三个子线程负责:缓存流数据,处理音

    2024年04月13日
    浏览(57)
  • 【C#】Whisper 离线语音识别(微软晓晓语音合成的音频)(带时间戳、srt字幕)...

    语音合成语音识别 用微软语音合成功能生成xiaoxiao的语音。 用Whisper离线识别合成的语音输出srt字幕。 一、语音合成 参考这个网址:https://www.bilibili.com/read/cv19064633 合成的音频:晓晓朗读-温柔 二、Whisper 语音识别 下载模型后放入程序目录下: 请注意,主要示例目前仅使用

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包