You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需认证的Hugging Face离线Speaker Diarization实现方法

无需认证的本地部署说话人 diarization 方案

一、可用的Hugging Face开源模型(无需认证)

  • pyannote/speaker-diarization-3.1:可直接通过Transformers库加载,无需申请额外认证,支持端到端的说话人分割
  • facebook/wav2vec2-large-960h-lv60-self:开源预训练语音模型,结合聚类算法可实现自定义说话人 diarization

二、本地部署实现步骤

1. 安装依赖库

先安装所需工具包:

pip install transformers torch librosa scikit-learn

2. 基于pyannote模型的快速实现

用Transformers的pipeline直接调用模型,完成离线处理:

from transformers import pipeline

# 初始化说话人 diarization 管道
diarization_pipeline = pipeline(
    task="speaker-diarization",
    model="pyannote/speaker-diarization-3.1"
)

# 处理本地音频文件
diarization_result = diarization_pipeline("local_audio.wav")

# 输出说话人时间片段
for segment, _, speaker_id in diarization_result.itertracks(yield_label=True):
    print(f"说话人{speaker_id}: {segment.start:.2f}s - {segment.end:.2f}s")

3. 基于wav2vec2+聚类的自定义实现

如果需要更灵活的特征控制,可通过预训练模型提取特征后做聚类:

import librosa
import torch
from transformers import Wav2Vec2FeatureExtractor, Wav2Vec2Model
from sklearn.cluster import AgglomerativeClustering

# 加载模型与特征提取器
feature_extractor = Wav2Vec2FeatureExtractor.from_pretrained("facebook/wav2vec2-large-960h-lv60-self")
audio_model = Wav2Vec2Model.from_pretrained("facebook/wav2vec2-large-960h-lv60-self")

# 加载本地音频(需转成16kHz采样率)
audio_data, sample_rate = librosa.load("local_audio.wav", sr=16000)

# 提取语音特征
inputs = feature_extractor(audio_data, sampling_rate=sample_rate, return_tensors="pt")
with torch.no_grad():
    model_outputs = audio_model(**inputs)
# 取特征的时间维度均值作为全局特征
audio_features = model_outputs.last_hidden_state.mean(dim=1).numpy()

# 聚类划分说话人(n_clusters可根据实际场景调整)
clustering = AgglomerativeClustering(n_clusters=2).fit(audio_features)
print(f"说话人标签分布:{clustering.labels_}")

注意事项

  • 首次运行会自动下载模型权重,后续可离线重复使用
  • 使用前需确认模型的许可协议,确保符合自身使用场景
  • 长音频可先分割为短片段处理,再合并结果提升效率

内容的提问来源于stack exchange,提问作者san1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:02:45