pyannote speaker diarization包报NoneType对象无items属性错误咨询
问题原因分析
- 该报错由pyannote-audio开发分支近期的代码变更导致:一周前可正常运行是因为当时preprocessors配置的默认加载逻辑未改动,最新提交将pipeline实例化时的preprocessors默认值从空字典修改为
None,后续代码遍历preprocessors调用.items()方法时未做非空判断,直接对None值执行方法调用就会触发该AttributeError。 - 另一类常见触发场景是拉取的预训练pipeline配置文件中缺失preprocessors字段,配置解析阶段会将该字段赋值为None,和上述默认值改动触发报错的逻辑完全一致。
- 该问题仅存在于安装开发分支代码、或近一周内拉取过最新预训练模型权重的运行环境,固定版本的正式发布版不会出现该问题。
解决思路
- 临时快速修复:实例化pipeline时手动传入空字典作为preprocessors参数,覆盖默认的None值即可,参考代码:
from pyannote.audio import Pipeline vad_pipeline = Pipeline.from_pretrained( "pyannote/voice-activity-detection", preprocessors={} )
- 版本回退方案:无需修改业务代码,直接将pyannote-audio回退到无该问题的正式稳定版本,执行安装命令:
pip install pyannote-audio==3.1.1 - 自定义逻辑兜底:如果是二次开发修改过加载逻辑的场景,可以在遍历preprocessors前增加非空判断兜底,参考代码:
# 遍历前先做非空校验 if self.preprocessors is None: self.preprocessors = {} # 原有遍历逻辑保持不变 for key, preprocessor in self.preprocessors.items(): # 自定义业务处理逻辑 pass
注意:如果是按照官方语音活动检测教程跑通流程的场景,优先选第一种传参修复或者第二种版本回退方案,不需要改动包本身的源码。
内容的提问来源于stack exchange,提问作者askrobola
相关产品推荐
相关产品推荐

