我在网上搜索了很多,找不到任何简单的解决方案。
我正在尝试创建一个人员检测器,对于这个项目我选择了Emgu库。
现在我能够发现人,但没有很好的成功率。
我正在尝试训练我的SVM,我在这篇文章中看到:SVM classifier based on HOG features for “object detection” in OpenCV我需要培训的过程:
步骤1)准备一些您想要检测的物体的训练图像(阳性样本)。此外,您还需要准备一些没有感兴趣对象的图像(负样本)。
步骤2)检测训练样本的HOG特征,并使用此功能训练SVM分类器(也在OpenCV中提供)。
步骤3)在HOGDescriptor :: setSVMDetector()方法中使用训练的SVM分类器的系数。
我有一些训练图像,我正在使用这行代码来提取HOG功能:
public static Image<Bgr, Byte> Resize(Image<Bgr, Byte> im)
{
return im.Resize(64, 128, Inter.Linear);
}
public static float[] GetVector(Image<Bgr, Byte> im)
{
HOGDescriptor hog = new HOGDescriptor(); // with defaults values
Image<Bgr, Byte> imageOfInterest = Resize(im);
Point[] p = new Point[imageOfInterest.Width * imageOfInterest.Height];
int k = 0;
for (int i = 0; i < imageOfInterest.Width; i++)
{
for (int j = 0; j < imageOfInterest.Height; j++)
{
Point p1 = new Point(i, j);
p[k++] = p1;
}
}
return hog.Compute(imageOfInterest, new Size(8, 8), new Size(0, 0), p);
}
但我无法找到如何训练我的SVM(上述步骤中的第2步)。
答案 0 :(得分:1)
我已经能够做到这一点。 注意:它有一些问题我还没有解决过多的HoG功能。
代码是:
//GetVector - function from people detection file
float[] hog = GetVector(new Image<Bgr, byte>(image));
svm.TrainAuto(new TrainData(training_mat, Emgu.CV.ML.MlEnum.DataLayoutType.RowSample, lables));
答案 1 :(得分:0)
使用OpenCV进行人体检测并不简单(EmguCV只是C#包装器)。人们可以采取不同的姿势:正面,侧面,双手向上/向下等。这比使用HAAR级联(http://docs.opencv.org/3.1.0/d7/d8b/tutorial_py_face_detection.html#gsc.tab=0)检测面部更复杂。
你需要重新考虑你的方法,因为你有更好的机会使用XBox Kinect。 Kinect SDK具有检测人员的必要功能。看看这个答案:https://stackoverflow.com/a/10584231/1786034