对于说话人识别我需要使用GMM算法,我选择了OpenCV库来实现。
我为每位发言者提供了task2(argument[1], argument[2], callbackFn)
的向量成员变量:
ml::EM
我有一种方法只需要给定的发言者std::vector< cv::Ptr<cv::ml::EM> > gMFCCVec;
。
trainEM
我的问题可以用不同的样本调用void train(size_t speakerID, cv::Mat& samples)
{
gMFCCVec[speakerID]->trainEM(samples);
}
方法。我有trainEM
和cv::Mat data1
。如果我打电话给:
cv::Mat data2
将 trainEM(data1);
trainEM(data2);
和ml::EM
同时对data1
进行培训。或者最后一个的训练结果将覆盖第一个(在这种情况下,data2
将仅使用ml::EM
进行训练?)
答案 0 :(得分:1)
最后一个训练结果将覆盖第一个。
您可以在implementation中看到trainEM
来电setTrainData
:
bool trainEM(InputArray samples,
OutputArray logLikelihoods,
OutputArray labels,
OutputArray probs)
{
Mat samplesMat = samples.getMat();
setTrainData(START_AUTO_STEP, samplesMat, 0, 0, 0, 0);
return doTrain(START_AUTO_STEP, logLikelihoods, labels, probs);
}
且setTrainData
来电clear()
:
void setTrainData(int startStep, const Mat& samples,
const Mat* probs0,
const Mat* means0,
const std::vector<Mat>* covs0,
const Mat* weights0)
{
clear();
...
并且clear
只是清除以前训练过的数据:
void clear()
{
trainSamples.release();
...