Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 基于音频波形数据的说话人性别检测_Ios_Objective C_Voice Recognition - Fatal编程技术网

Ios 基于音频波形数据的说话人性别检测

Ios 基于音频波形数据的说话人性别检测,ios,objective-c,voice-recognition,Ios,Objective C,Voice Recognition,我想在我正在开发的新闻视频翻译应用程序中添加性别检测功能,以便该应用程序可以根据屏幕上的声音在男性和女性声音之间切换。我不希望100%准确。 我使用EZAudio获得音频时间段的波形数据,并使用平均RMS值设置男性和女性之间的阈值(截止值)。初始截止值=3.3 - (void)setInitialVoiceGenderDetectionParameters:(NSArray *)arrayAudioDetails { float initialMaleAvg =

我想在我正在开发的新闻视频翻译应用程序中添加性别检测功能,以便该应用程序可以根据屏幕上的声音在男性和女性声音之间切换。我不希望100%准确。 我使用EZAudio获得音频时间段的波形数据,并使用平均RMS值设置男性和女性之间的阈值(截止值)。初始截止值=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;
    }
-(void)setInitialVoiceGenderDetectionParameters:(NSArray*)arrayAudioDetails
{
float initialMaleAvg=((ConvertedTextDetails*)[arrayAudioDetails firstObject])。音频平均器;
//音频时间段的平均RMS值,例如5秒
float initialMaleVector=initialMaleAvg*80;
//MaleVector是根据不同的新闻剪辑更改阈值的参数
截止值=(初始MaleVector<5.3)?初始MaleVector:5.3;
截止值=(initialMaleVector>23)?initialMaleVector/2:5.3;
}
初始调整值=-0.9,tanCutOff=0.45。这些值5.3、23、截止值、调整值和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;
}
-(BOOL)检查带有PEEKRMS:(浮动)pRMS和AVERAGERMS:(浮动)臂的性别
{
//pRMS是音频片段中的峰值RMS值,aRMS是平均RMS值
布尔男性=否;
如果(tan(pRMS)切断)
{
切断=切断+调整值;
NSLog(@“女性…”);
男性=否;
}
其他的
{
NSLog(@“男性…”);
男性=是;
切断=切断-调整值;
}
}
其他的
{
NSLog(@“女性”);
男性=否;
}
返回男性;
}
adjustValue用于在每次翻译新闻视频时校准阈值,因为每个视频具有不同的噪声级。但我知道这种方法是不明智的。如何创建一个稳定的阈值?或者如何使每个音频片段正常化

此外,还欢迎采用其他或更有效的方法从声波数据中确定性别


编辑:根据尼古拉的建议,我使用CMU Sphinx研究了性别识别。有人能建议我如何提取MFCC特征并使用开放式耳朵(CMU Sphinx for iOS平台)将其输入GMM/SVM分类器吗?

使用MFCC特征的GMM分类器可以实现准确的性别识别。您可以在此处阅读:


到目前为止,我还不知道这方面的开源实现,尽管在开源语音识别工具包(如CMUSphinx)中有许多组件可用。

通过对GMM分类器进行男性和女性MFCC特征的培训,可以实现准确的性别识别。下面是一个人可以做的事情

  • 我们需要为每个性别收集培训集
  • 从所有不同性别的音频中提取MFCCs特性(可以找到python实现,如scikit talkbox等)
  • 根据从培训集音频中提取的特征,对GMM模型进行性别培训
  • 关于详细信息,这里有一个相同的开源python实现。以下教程评估了从今年(2017年)发布的Google AudioSet中提取的子集代码


    您不想使用频率吗?是的。您想用什么方法提取频率数据进行计算?我已经在使用Nuance API实现应用程序的rest speech功能。您能详细说明CMUSphinx与Nuance的不同之处以及它如何帮助解决我的问题吗?有人知道如何使用Pocket Sphinx for iOS提取MFCC功能吗?提取MFCC的API是sphinxbase库头fe.h的一部分,示例在Sphinx_fe.c中