
pyannote 说话人日志工具包pyannote.audio 是一个用 Python 编写的开源说话人日志(speaker diarization)工具包。它基于 PyTorch 机器学习框架,附带最先进的预训练模型与流水线,可进一步在你的自有数据上微调以获得更佳性能。
community-1 开源说话人日志ffmpeg(torchcodec 音频解码库需要它)uvadd pyannote.audio(推荐)或 pip install pyannote.audio 安装pyannote/speaker-diarization-community-1 用户条款hf.co/settings/tokens 创建 Huggingface 访问令牌import torch
from pyannote.audio import Pipeline
from pyannote.audio.pipelines.utils.hook import ProgressHook
# Community-1 开源说话人日志流水线
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-community-1", token="HUGGINGFACE_ACCESS_TOKEN"
)
# 在可用时将流水线发送至 GPU
pipeline.to(torch.device("cuda"))
# 应用预训练流水线(可选进度钩子)
with ProgressHook() as hook:
output = pipeline("audio.wav", hook=hook) # 本地运行
# 打印结果
for turn, speaker in output.speaker_diarization:
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
# ...
precision-2 高级说话人日志dashboard.pyannote.ai 创建 pyannoteAI API 密钥from pyannote.audio import Pipeline
# Precision-2 高级说话人日志服务
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-precision-2", token="PYANNOTEAI_API_KEY"
)
output = pipeline("audio.wav") # 在 pyannoteAI 服务器上运行
# 打印结果
for turn, speaker in output.speaker_diarization:
print(f"start={turn.start:.1f}s stop={turn.end:.1f}s {speaker}")
# start=0.2s stop=1.6s SPEAKER_00
# start=1.8s stop=4.0s SPEAKER_01
# start=4.2s stop=5.6s SPEAKER_00
# ...
访问 docs.pyannote.ai 了解 pyannoteAI 的其他功能(声纹识别、置信度分数等)
| 基准(最后更新于 2025-09) | legacy (3.1) |
community-1 |
precision-2 |
|---|---|---|---|
| AISHELL-4 | 12.2 | 11.7 | 11.4 |
| AliMeeting (channel 1) | 24.5 | 20.3 | 15.2 |
| AMI (IHM) | 18.8 | 17.0 | 12.9 |
| AMI (SDM) | 22.7 | 19.9 | 15.6 |
| AVA-AVD | 49.7 | 44.6 | 37.1 |
| CALLHOME (part 2) | 28.5 | 26.7 | 16.6 |
| DIHARD 3 (full) | 21.4 | 20.2 | 14.7 |
| Ego4D (dev.) | 51.2 | 46.8 | 39.0 |
| MSDWild | 25.4 | 22.8 | 17.3 |
| RAMC | 22.2 | 20.8 | 10.5 |
| REPERE (phase2) | 7.9 | 8.9 | 7.4 |
| VoxConverse (v0.3) | 11.2 | 11.2 | 8.5 |
说话人日志错误率(%,越低越好)
与 3.1 旧版流水线相比,community-1 在说话人计数与分配方面带来了显著改进。
precision-2 高级流水线(在其自托管版本中)进一步提升了准确性和处理速度。
| 基准(最后更新于 2025-09) | community-1 |
precision-2 |
加速 |
|---|---|---|---|
| AMI (IHM),约 1 小时文件 | 每 1 小时音频 31 秒 | 每 1 小时音频 14 秒 | 快 2.2 倍 |
| DIHARD 3 (full),约 5 分钟文件 | 每 1 小时音频 37 秒 | 每 1 小时音频 14 秒 | 快 2.6 倍 |
在 NVIDIA H100 80GB HBM3 上的自托管速度
通过 pyannote.audio 中的可选遥测功能,你可以选择发送匿名使用指标,帮助 pyannote 团队改进该库。
对于每次调用 Pipeline.from_pretrained({origin})(或 Model.from_pretrained({origin})),我们以以下隐私保护方式收集有关 {origin} 的信息:
{origin} 是托管在 Huggingface 上的官方 pyannote 或 pyannoteAI 流水线(或模型),我们将其记录为 {origin}。{origin} 是托管在 Huggingface 上来自任何其他组织的流水线(或模型),我们将其记录为 huggingface。{origin} 是本地文件或目录的路径,我们将其记录为 local。我们还会记录流水线的 Python 类(例如 pyannote.audio.pipelines.SpeakerDiarization)。
对于用流水线处理的每个文件,我们收集:
* 文件时长(秒)
* 说话人日志流水线的 num_speakers、min_speakers 和 max_speakers 值
我们不收集任何可用于识别用户身份的信息。
遥测可通过三种方式配置:
1. 使用环境变量
2. 仅在当前 Python 会话中
3. 跨会话全局配置
为保持一致,以上所有选项都会修改环境变量的值。
如果未设置环境变量,pyannote.audio 将读取遥测配置中的默认值。
默认配置也可以在 Python 中更改。
你可以通过设置 PYANNOTE_METRICS_ENABLED 环境变量来控制遥测:
# 启用指标
export PYANNOTE_METRICS_ENABLED=1
# 禁用指标
export PYANNOTE_METRICS_ENABLED=0
要控制当前 Python 内核会话的遥测:
from pyannote.audio.telemetry import set_telemetry_metrics
# 为当前会话启用指标
set_telemetry_metrics(True)
# 为当前会话禁用指标
set_telemetry_metrics(False)
要设置跨会话持久化的遥测偏好:
from pyannote.audio.telemetry import set_telemetry_metrics
# 全局启用指标
set_telemetry_metrics(True, save_choice_as_default=True)
# 全局禁用指标
set_telemetry_metrics(False, save_choice_as_default=True)
pyannote 预训练语音分离流水线,作者 Clément Pagés如果你使用 pyannote.audio,请使用以下引用:
@inproceedings{Plaquet23,
author={Alexis Plaquet and Hervé Bredin},
title={{Powerset multi-class cross entropy loss for neural speaker diarization}},
year=2023,
booktitle={Proc. INTERSPEECH 2023},
}
@inproceedings{Bredin23,
author={Hervé Bredin},
title={{pyannote.audio 2.1 speaker diarization pipeline: principle, benchmark, and recipe}},
year=2023,
booktitle={Proc. INTERSPEECH 2023},
}
以下命令将安装 pre-commit 钩子以及开发 pyannote.audio 库所需的包。
uv sync --extra dev --extra test --extra cli
uvx pre-commit install
uv run --extra test --extra cli pytest -m "not network and not notebook"
标记为 network 的测试会从 Hugging Face 下载公开模型:
uv run --extra test --extra cli pytest -m network
历史 notebook 需显式启用(pytest -m notebook),可能需要额外的模型、数据集、凭证以及针对当前 API 的更新。
使用 uvx ruff check . 和 uvx ruff format --check . 运行代码检查与格式检查。