11

我无法在互联网上的一个地方找到好的解释。有太多东西,而不是找出该做什么,我变得更加困惑。

我的目标:创建一个使用摄像头实时检测对象的 Android 应用程序(我的对象是方向盘和汽车轮胎。)

到目前为止,我尝试了 haar 分类器,但它很难训练,花费了很多时间并且无法正确训练它,所以我决定寻找另一种方法来实现我的目标。

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

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

2:你觉得 HOG + Bag-Of-Words 怎么样?

3:如果有的话,你会告诉如何训练 SVM 或提供链接吗?- 我没有找到任何关于这个的教程。我一直在寻找,但我的时间有限,我决定问问。

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

5:我应该用Android NDK原生实现还是Java实现不会有这么大的区别?

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

4

1 回答 1

9

1:没有适用于所有情况的最佳算法,只有适合某些非常具体情况的算法,具体取决于应用程序的要求。

您可以尝试SIFTSURF,它们是最流行的描述符,但效率不高(慢)并且需要大量内存。如果效率是您的目标,您可以尝试二进制描述符(例如,BRIEF、ORB、BRISK、FREAK),它们效率更高并且需要更少的存储空间。也看看FAST检测器。

2:图像分类问题的词袋是一种识别对象类别的方法,给定一组包含对象类别的正训练图像和一组不包含对象类别的负训练图像。

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

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

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

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

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

5.我认为你应该使用Android NDK,但我对Android开发不太了解。

http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/android_dev_intro.html http://opencv.org/platforms/android.html

于 2014-12-13T16:39:55.683 回答