我想为我正在处理的新闻视频翻译应用添加性别检测功能,以便应用可以根据屏幕上的语音在男女声音之间切换。我不期望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分类器?
答案 0 :(得分:1)
使用MFCC功能的GMM分类器可以实现准确的性别识别。你可以在这里阅读:
到目前为止,我还不知道开源实现,尽管CMUSphinx等开源语音识别工具包中有很多组件。
答案 1 :(得分:-1)
通过针对男性和女性的MFCC特征训练GMM分类器,可以实现准确的性别识别。以下是人们可以采取的措施。
有关详细信息,这是一个开源的python实现。以下教程评估从今年(2017年)发布的Google音频集中提取的子集代码