AIStudio SSH 公钥管理,一处配置,处处可用AIStudio SSH 公钥管理,一处配置,处处可用 ,只为更佳开发体验如何配置
Skip to content
回到全部文章

在开发机上使用 Whisper 和 WhisperX

本教程将指导您如何在开发机上部署和使用 WhisperWhisperX 两个强大的语音处理工具,帮助您实现高质量的音频转录、翻译需求。

OpenAI Whisper 项目介绍

OpenAI Whisper 是一个由 OpenAI 开发的开源自动语音识别 (ASR) 系统,用于执行语音识别和语音翻译功能,并且能够将多种语言的语音转录成文字。

主要特点:

  • 多语言语音识别:Whisper 可以处理多种语言的语音转录,不仅仅局限于英语。
  • 处理音频质量:即使在音频质量较差或背景噪音较多的情况下,Whisper 也能进行有效的语音识别。
  • 开源模型:OpenAI 将 Whisper 的模型和推理代码开源,为开发者和研究人员提供了一个强大的基础,用于构建各种语音处理应用和进行进一步研究。
  • 强大的性能:OpenAI 的测试表明,Whisper 在多种语言的音频转录方面表现出色。

OpenAI 提供了 Whisper API 支持转录 (transcriptions) 和 翻译 (translations) 两种模式,也同样基于开源的 large-v2 Whisper model。

衍生项目

在 OpenAI Whisper 推出后,基于 OpenAI 的 Whisper 模型衍生了部分项目,有各自侧重点和特色功能:

  • WhisperX:致力于提供比原始 Whisper 更准确的转录结果,可生成词级别的对齐时间戳,用于制作更精细、更同步的字幕,或帮助语言学习者理解发音和语速;识别说话人功能(speaker diarization)可在生成结果中区分不同说话人。
  • insanely-fast-whisper:主要目标是大幅提升 Whisper 模型的推理速度,使其能够更快地完成语音转录任务。
  • WhisperLive:WhisperLive 专注于实现实时的语音转录功能,可以将正在进行的语音输入流 (例如麦克风输入) 实时地转换为文字。

SSH 远程连接

由于 Whisper 和 WhisperX 需要下载模型文件,下载过程可能需要 10-30 分钟。为避免 Web Terminal 连接超时中断,建议使用 SSH 远程连接。

教程详见:SSH 远程连接

OpenAI Whisper

创建实验环境

点击下方链接,直接访问智算云控制台的创建开发机页面。

进入开发机创建页面后,请根据页面提示,完成开发机的相应配置。由于 Whisper 依赖 Pytorch,在选择镜像时,建议选择已包含 Whisper 依赖的预置镜像,节省安装时间。例如:

ngc:24.05-python3.10-cuda12.4.1-ubuntu22.04

安装 Whisper

OpenAI 的 Whisper 模型是基于 Python 3.9.9 以及 PyTorch 1.10.0 开发的。根据官方说法,在 Python 3.8-3.11 的环境中可以正常运行。建议提前检查当前 Python 版本,确保符合要求:

shell
python3 --version

Whisper 依赖 ffmpeg 进行不同音频格式处理,通过以下命令安装:

shell
sudo apt update && sudo apt install ffmpeg

使用 pip 安装 Whisper:

shell
pip install -U openai-whisper

语音转写

安装结束后开箱即用。以下是一个简单的命令行示例:

shell
whisper path/to/audio.mp3

NOTE

建议克隆 OpenAI Whisper 仓库,使用其中的测试音频文件。 git clone https://github.com/openai/whisper.git 也可以自备音频文件。

Whisper 在默认情况下会使用 turbo 模型进行语音转录。可尝试通过参数 --model 换成最小的 tiny 模型:

shell
whisper path/to/audio.mp3 --model tiny

也可以试试最大的 large-v3 模型

shell
whisper path/to/audio.mp3 --model large-v3

使用 OpenAI Whisper 仓库中的音频文件测试输出效果:

shell
$ whisper ./whisper/tests/jfk.flac --model tiny.en
100%|█████████████████████████████████████| 72.1M/72.1M [00:06<00:00, 12.0MiB/s]
[00:00.000 --> 00:08.000]  And so, my fellow Americans ask not what your country can do for you
[00:08.000 --> 00:11.000]  ask what you can do for your country.

Whisper 部分模型可以自动识别音频语言。为了提高转录准确性,可以使用参数 --language 指定音频的语言(--language 是提供的音频的语言类型,而非转录后的文字语言类型):

shell
whisper path/to/audio.mp3 --language Chinese

输出字幕文件

Whisper 支持输出文件格式包括:txt, vtt, srt, tsv, json, 默认输出格式为全部。您可以使用参数 --output_format 指定输出格式,如:

shell
whisper path/to/audio.mp3 --output_format srt

NOTE

更多参数详见:Whisper arguments

Whisper 模型

关于 OpenAI Whisper 支持的模型,可参考下方或仓库 README。

  • turbo:优化模型,支持多种语言,在保持高精度的同时提升推理速度。
  • tiny:最小型模型,支持多种语言。
  • tiny.en:最小型模型,英语专用。
  • base:基础模型,支持多种语言。
  • large-v3 :大型模型,最新版本,支持多种语言。

WhisperX

相较于 Whisper,WhisperX 可以实现更高效的语音转录,同时还提供了更精确的时间戳对齐功能说话人分离功能

申请模型授权

WhisperX 的说话人分离功能依赖以下两个模型,必须先前往 HuggingFace 模型页面申请授权。

创建实验环境

点击下方链接,直接访问智算云控制台的创建开发机页面。

进入开发机创建页面后,请根据页面提示,完成开发机的相应配置。在选择镜像时,请使用以下基础镜像:

ubuntu:22.04-20240429

设置环境变量

通过 Hugging Face 模型授权后,可继续执行以下步骤:

  1. 访问 https://huggingface.co/settings/tokens ,创建一个具有阅读权限(read)的新令牌并复制令牌。

    alt text

  2. 设置 HF_TOKEN 环境变量,值为上一步复制的 HuggingFace 访问令牌:

    shell
    export HF_TOKEN=your_huggingface_token

    可以通过以下命令行进行检查:

    shell
    echo $HF_TOKEN

由于 WhisperX 需要从 HuggingFace 下载模型文件,而国内直接访问可能存在连接不稳定、速度缓慢等问题。建议设置 HF_ENDPOINT 环境变量,将下载请求定向到 HuggingFace 镜像站点。

shell
export HF_ENDPOINT=https://hf-mirror.com

可以通过以下命令行进行检查:

shell
echo $HF_ENDPOINT

安装 WhisperX

  1. 官方推荐使用虚拟环境安装 WhisperX,自行安装 Conda 较为复杂,我们可以直接使用智算云平台镜像中内置的 Miniconda,通常位于 /usr/local/ 目录下。

    shell
    # 添加 conda 到 PATH
    source /usr/local/miniconda3/etc/profile.d/conda.sh
    
    # 初始化 conda,持久化写入 .bashrc
    conda init

    启用后请注意关闭当前 Shell 会话,再新建会话。

  2. 由于国内网络问题,可能无法访问 Conda 自带源,或访问速度极慢。因此,建议使用国内镜像源,如清华镜像源。下面示例使用 cat 命令直接追加写入了 ~/.condarc,请注意勿重复添加。

    shell
    # 添加清华镜像源。
    cat << EOF >> ~/.condarc
    channels:
    - defaults
    show_channel_urls: true
    default_channels:
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
    - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
    custom_channels:
    conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
    deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/
    nvidia: https://mirrors.sustech.edu.cn/anaconda-extra/cloud
    EOF

    然后清除相关缓存:

    shell
    conda clean -i
    
    conda clean -p
    
    conda clean -a
  3. 创建虚拟环境

    shell
    # 创建名为 whisperx 的虚拟环境
    conda create --name whisperx python=3.10
    
    # 激活虚拟环境
    conda activate whisperx
  4. 安装 Pytorch 和 WhisperX

    shell
    # 安装 Pytorch 等相关库
    conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
    
    # 安装 WhisperX
    pip install whisperx

语音转写

以下命令行示例将使用语音转录功能(不包含说话人分离功能),首次执行时将下载两个模型,后续执行时不再需要下载。

shell
whisperx path/to/audio.mp3

命令行中可以指定不同的模型、语言和文件路径等。例如,指定路径和输出 srt 格式文件,可以使用以下命令:

shell
whisperx path/to/audio.mp3 --output_dir /your/path --output_format srt

输出字词级别的时间戳

Whisperx 可以实现字词级的时间戳标记,设置参数 --highlight_words True 即可。

shell
whisperx path/to/audio.mp3 --highlight_words True --output_format json

NOTE

英文音频识别的是单词级别,中文音频识别是汉字级别。

识别说话人

体验 WhisperX 说话人分离功能。首次执行时将下载两个模型,后续执行时不再需要下载。

shell
whisperx path/to/audio.mp3 --diarize

NOTE

更多参数详见:WhisperX arguments

总结

测试发现,在默认条件下 Whisper 与 WhisperX 在转录同一段音频时的表现:

  • Whipser 项目安装部署较为简单。
  • WhisperX 使用转录和说话人分离耗费的时长和 Whisper 音频转录的时长相当。
  • WhisperX 比 Whisper 多了说话人分离、字词级别时间戳功能。

参考资料