基于 OpenAI Whisper 的说话人识别流水线:精准识别每句话的说话者

https://github.com/MahmoudAshraf97/whisper-diarization

什么是这个项目?

这个仓库将 Whisper 语音识别能力与语音活动检测 (VAD) 和说话人嵌入结合起来,从而识别出 Whisper 生成的每句话的说话者。

以下是它的工作原理:

  1. 提取语音: 首先,从音频中提取语音信号,以提高说话人嵌入的准确性。
  2. 生成文字: 然后使用 Whisper 生成文本转录。
  3. 时间戳校准: 使用 WhisperX 校正并对齐时间戳,以帮助最大程度地减少由于时间偏移导致的识别错误。
  4. 语音活动检测: 将音频输入 MarbleNet 进行 VAD 和分割,排除沉默部分。
  5. 说话人嵌入: 使用 TitaNet 从每个片段中提取说话人嵌入,以便识别每个片段的说话者。
  6. 说话人关联: 将结果与 WhisperX 生成的时间戳关联起来,根据时间戳检测出每一句话的说话者。
  7. 标点符号重对齐: 使用标点符号模型补偿轻微的时间偏移,进一步提高准确性。

WhisperX 和 NeMo 参数:

diarize.pyhelpers.py 文件中已编码了 WhisperX 和 NeMo 参数。我将在以后添加 CLI 参数来更改它们。

安装

FFMPEG 和 Cython 是必须的预先条件。

pip install cython or sudo apt update && sudo apt install cython3 # on Ubuntu or Debian 
sudo apt update && sudo apt install ffmpeg  # on Arch Linux 
sudo pacman -S ffmpeg  # on MacOS using Homebrew (https://brew.sh/) brew install ffmpeg 
# on Windows using Chocolatey (https://chocolatey.org/) choco install ffmpeg  
# on Windows using Scoop (https://scoop.sh/) scoop install ffmpeg  
# on Windows using WinGet (https://github.com/microsoft/winget-cli) winget install ffmpeg 
pip install -r requirements.txt 

使用

python diarize.py -a AUDIO_FILE_NAME

如果您的系统有足够的 VRAM (>=10GB),可以使用 diarize_parallel.py,它将 NeMo 与 Whisper 并行运行。这在某些情况下可能会有益,最终结果相同,因为这两个模型彼此独立。

请注意,这是一个实验性项目,可能会出现错误和问题。您的反馈非常欢迎!