android – 使用OpenCV SVM进行对象检测

前端之家收集整理的这篇文章主要介绍了android – 使用OpenCV SVM进行对象检测前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在互联网上的一个地方找不到好的解释.有太多的东西,而不是找出该做什么,我变得更加困惑.

我的目标:创建一个使用相机实时检测物体的Android应用程序(我的对象是方向盘和汽车轮胎).

到目前为止,我尝试了哈尔分类器,但是训练困难,花了很多时间,无法正确地训练,所以我决定寻找另一种方式来实现我的目标.

现在我发现了特征检测器和SVM训练.我的问题是:

1:我应该使用哪种算法(SURF,ORB,FREAK等)?

2:你怎么看待HOG Bag-Of-Words?

3:你能告诉如何训练SVM或者给你一个链接? – 我没有找到关于这个的任何教程.我继续搜索,但我的时间有限,我决定问.

4:哪个算法会给出最好的结果?

5:我应该用Android NDK在本机上实现,或者与Java实现不会有太大的区别?

如果您有任何教程或参考资料,请将它们添加到您的答案或评论中.对于长期的问题抱歉,正如我说我的时间有限(这是一个学校项目),而且我认为如果人们可以在一个地方找到这些答案,这将是很好的.我会欣赏每一个答案,即使不是一个完整的答案.先谢谢你!

解决方法

1:对于所有情况,没有最优算法,但是根据应用程序的要求,适合某些非常具体情况的算法.

您可以尝试SIFT和SURF哪些是最流行的描述符,但不是非常有效(缓慢),并且需要大量内存.
如果效率是您的目标,您可以尝试二进制描述符(例如Brief,BRISK,FREAK),这些描述符效率更高,需要更少的存储空间.看一下FAST探测器.

2:图像分类问题的一个词是一种识别对象类别的方法,给出一组包含对象类的正训练图像,以及一组不具有对象类别的负训练图像.

Bag-Of-Words将为您提供每个训练图像的向量表示.

得到这个之后,您将必须训练一个分类器来区分对应于正(方向盘和汽车轮胎)和负面训练图像的矢量.
您可以为此使用SVM分类器.

3:你在这里有一个完整的方法教程(BOW SVM)在OpenCV 2.3.您需要在代码中进行一些更改,但总体思路是:http://www.morethantechnical.com/2011/08/25/a-simple-object-classifier-with-bag-of-words-using-opencv-2-3-w-code/

另外,SVM的OpenCV教程:
http://docs.opencv.org/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

4:如前所述,没有完美的算法,所以我无法回答你.我认为在用(1)中的替代方法进行一些测试后,你将能够回答我们.

猜你在找的Android相关文章