【问题标题】:Speaker Recognition [closed]说话人识别[关闭]
【发布时间】:2024-01-10 22:25:02
【问题描述】:

我如何区分两个人说话?就像有人说“你好”然后另一个人说“你好”我应该在音频数据中寻找什么样的签名?周期性?

非常感谢任何可以回答这个问题的人!

【问题讨论】:

    标签: audio speech-recognition signatures


    【解决方案1】:

    这个问题的解决方案在于数字信号处理 (DSP)。说话人识别是一个复杂的问题,它使计算机和通信工程齐头并进。大多数说话人识别技术都需要使用机器学习进行信号处理(通过说话人数据库进行训练,然后使用训练数据进行识别)。可以遵循的算法概要 -

    1. 录制原始格式的音频。这是需要处理的数字信号
    2. 对捕获的信号应用一些预处理例程。这些例程可以是简单的信号归一化,或过滤信号以去除噪声(对人声的正常频率范围使用带通滤波器。带通滤波器可以在依次使用低通和高通滤波器来创建。)
    3. 一旦相当确定捕获的信号几乎没有噪声,特征提取阶段就开始了。用于提取语音特征的一些已知技术是 - 梅尔频率倒谱系数 (MFCC)、线性预测编码 (LPC) 或简单的FFT 功能。
    4. 现在,有两个阶段 - 训练和测试
    5. 首先,系统需要针对不同说话者的语音特征进行训练,然后才能区分它们。为了确保正确计算特征,建议必须收集来自说话者的几个(> 10)语音样本用于训练目的。
    6. 可以使用不同的技术(如神经网络或基于距离的分类)进行训练,以找出来自不同说话者的声音特征的差异。
    7. 在测试阶段,训练数据用于找到与被测信号距离最近的语音特征集。 欧几里得或切比雪夫距离等不同距离可用于计算这种接近度。

    有两种支持说话人识别的开源实现 - ALIZEhttp://mistral.univ-avignon.fr/index_en.htmlMARFhttp://marf.sourceforge.net/

    我知道回答这个问题有点晚了,但我希望有人觉得它有用。

    【讨论】:

    • 现在存在第三个开源选项:Recognito github.com/amaurycrickx/recognito。主要优点是学习曲线短。我建议阅读 Homayoon Beigi 的“说话人识别基础”,以深入了解该主题
    • @ExtremeCoder 和我正在寻找“签名”。更具体地说,我们如何得出 MFCC 足以区分说话者的结论?你有这方面的参考吗?
    【解决方案2】:

    这是一个极其困难的问题,即使对于语音和信号处理专家来说也是如此。此页面有更多信息:http://en.wikipedia.org/wiki/Speaker_recognition

    以及一些建议的技术起点:

    使用的各种技术 处理和存储声纹包括 频率估计,隐马尔可夫 模型,高斯混合模型, 模式匹配算法,神经 网络,矩阵表示,向量 量化和决策树。一些 系统还使用“反扬声器” 技术,例如队列模型,以及 世界模型。

    【讨论】:

      【解决方案3】:

      只有两个人来区分,如果他们说出相同的单词或短语,这会更容易。我建议从简单的事情开始,只根据需要增加复杂性。

      首先,我会尝试按时间和幅度或(如果您有方便的软件功能)对整个话语进行 FFT 分箱的数字波形的样本计数。我也会首先考虑一个基本的建模过程,例如线性判别(或任何你已经可用的)。

      【讨论】:

        【解决方案4】:

        另一种方法是使用一组麦克风并区分声源的位置和方向。我认为这是一种更简单的方法,因为位置计算比从单声道或立体声源中分离不同的扬声器要简单得多。

        【讨论】: