Ios 基于音频波形数据的说话人性别检测
我想在我正在开发的新闻视频翻译应用程序中添加性别检测功能,以便该应用程序可以根据屏幕上的声音在男性和女性声音之间切换。我不希望100%准确。 我使用EZAudio获得音频时间段的波形数据,并使用平均RMS值设置男性和女性之间的阈值(截止值)。初始截止值=3.3Ios 基于音频波形数据的说话人性别检测,ios,objective-c,voice-recognition,Ios,Objective C,Voice Recognition,我想在我正在开发的新闻视频翻译应用程序中添加性别检测功能,以便该应用程序可以根据屏幕上的声音在男性和女性声音之间切换。我不希望100%准确。 我使用EZAudio获得音频时间段的波形数据,并使用平均RMS值设置男性和女性之间的阈值(截止值)。初始截止值=3.3 - (void)setInitialVoiceGenderDetectionParameters:(NSArray *)arrayAudioDetails { float initialMaleAvg =
- (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特征的培训,可以实现准确的性别识别。下面是一个人可以做的事情
您不想使用频率吗?是的。您想用什么方法提取频率数据进行计算?我已经在使用Nuance API实现应用程序的rest speech功能。您能详细说明CMUSphinx与Nuance的不同之处以及它如何帮助解决我的问题吗?有人知道如何使用Pocket Sphinx for iOS提取MFCC功能吗?提取MFCC的API是sphinxbase库头fe.h的一部分,示例在Sphinx_fe.c中