从音频的波形数据中对说话者进行性别检测

时间:2015-05-22 12:47:31

标签: ios objective-c voice-recognition

我想为我正在处理的新闻视频翻译应用添加性别检测功能,以便应用可以根据屏幕上的语音在男女声音之间切换。我不期望100%的准确性。 我使用EZAudio获取音频时间段的波形数据,并使用平均RMS值设置男性和女性之间的阈值(cutOff)值。最初cutOff = 3.3。

    - (void)setInitialVoiceGenderDetectionParameters:(NSArray *)arrayAudioDetails
    {
        float initialMaleAvg = ((ConvertedTextDetails *)[arrayAudioDetails firstObject]).audioAverageRMS;
        // The average RMS value of a time period of Audio, say 5 sec
        float initialMaleVector = initialMaleAvg * 80;
        // MaleVector is the parameter to change the threshold according to different news clippings
        cutOff = (initialMaleVector < 5.3) ? initialMaleVector : 5.3;
        cutOff = (initialMaleVector > 23) ? initialMaleVector/2 : 5.3;
    }

最初adjustValue = -0.9和tanCutOff = 0.45。这些值5.3,23,cutOff,adjustValue和tanCutOff都是通过严格的测试获得的。此外,tan值用于放大值的差异。

    - (BOOL)checkGenderWithPeekRMS:(float)pRMS andAverageRMS:(float)aRMS
{
    //pRMS is the peak RMS value in the audio snippet and aRMS is the average RMS value
    BOOL male = NO;
    if(tan(pRMS) < tanCutOff)
    {
        if(pRMS/aRMS > cutOff)
        {
            cutOff = cutOff + adjustValue;
            NSLog(@"FEMALE....");
            male = NO;
        }
        else
        {
            NSLog(@"MALE....");
            male = YES;
            cutOff = cutOff - adjustValue;
        }
    }
    else
    {
        NSLog(@"FEMALE.");
        male = NO;
    }

    return male;
}

adjustValue的用法是每次翻译新闻视频时校准阈值,因为每个视频具有不同的噪声级别。但我知道这种方法是noob-ish。我能做些什么来创造一个稳定的门槛?或者我如何规范化每个音频片段?

也欢迎从音频波数据中确定性别的替代或更有效的方法。

编辑:根据尼古拉的建议,我使用CMU Sphinx研究性别识别。任何人都可以建议如何使用Open Ears(适用于iOS平台的CMU Sphinx)提取MFCC功能并输入GMM / SVM分类器?

2 个答案:

答案 0 :(得分:1)

使用MFCC功能的GMM分类器可以实现准确的性别识别。你可以在这里阅读:

AGE AND GENDER RECOGNITION FOR TELEPHONE APPLICATIONS BASED ON GMM SUPERVECTORS AND SUPPORT VECTOR MACHINES

到目前为止,我还不知道开源实现,尽管CMUSphinx等开源语音识别工具包中有很多组件。

答案 1 :(得分:-1)

通过针对男性和女性的MFCC特征训练GMM分类器,可以实现准确的性别识别。以下是人们可以采取的措施。

  1. 需要为每个性别收集训练集。
  2. 从各个性别的所有音频中提取MFCC功能(可以找到像scikit-talkbox等的python实现)。
  3. 从训练集音频中提取所提取特征的性别GMM模型。
  4. 有关详细信息,这是一个开源的python实现。以下教程评估从今年(2017年)发布的Google音频集中提取的子集代码

    https://appliedmachinelearning.wordpress.com/2017/06/14/voice-gender-detection-using-gmms-a-python-primer/