到目前为止我做了什么,
>面部检测,
>每帧16个面部点计算.以下是面部特征检测的输出![输入图像说明
>保存特征点的像素地址的向量
注意:我知道如何才能用正面和负面的图像训练SVM,我看到这个codehere,但是我不知道我如何将面部特征信息与它结合在一起.
任何人都可以帮助我用svm开始分类.
一个.什么样的样品输入来训练分类器?
湾如何用这个面部特征点训练分类器?
问候,
解决方法 opencv中的机器学习algos都有类似的界面.训练它,你传递一个NxM Mat自定义(N行,每个特征一行,长度为M)和一个Nx1垫与类标签.喜欢这个://traindata //trainlabelsf e a t u r e 1 f e a t u r e -1f e a t u r e 1f e a t u r e 1f e a t u r e -1
为了预测,您以相同的方式填充1行的Mat,并返回预测的标签
所以,假设你的16个面部点存储在一个向量中,你会喜欢:
Mat trainData; // start emptyMat labels;for all facial_point_vecs:{ for( size_t i=0; i<16; i++ ) { trainData.push_back(point[i]); } labels.push_back(label); // 1 or -1}// Now here comes the magic:// reshape it,so it has N rows,each being a flat float,x,y,y... 32 element arraytrainData = trainData.reshape(1,16*2); // numpoints*2 for x,y// we have to convert to float:trainData.convertTo(trainData,CV_32F);SVM svm; // params omitted for simplicity (but that's where the *real* work starts..)svm.train( trainData,labels );//later predict:vector<Point> points;Mat testData = Mat(points).reshape(1,32); // flattened to 1 rowtestData.convertTo(testData,CV_32F);float p = svm.predict( testData );总结
以上是内存溢出为你收集整理的如何用带有面部特征的openCV训练支持向量机(svm)分类器?全部内容,希望文章能够帮你解决如何用带有面部特征的openCV训练支持向量机(svm)分类器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)