Haar Cascade 是 OpenCV 中唯一可用的图像识别技术吗

Posted

技术标签:

【中文标题】Haar Cascade 是 OpenCV 中唯一可用的图像识别技术吗【英文标题】:Is Haar Cascade the only available technique for image recognition in OpenCV 【发布时间】:2011-11-27 22:06:54 【问题描述】:

我知道 OpenCV 中有许多检测技术,例如 SURF、STAR、ORB 等……但这些技术是用于新视频源的特征检测,而不是用于处理需要事先学习的对象的特定实例。 OpenCV 的文档并不那么容易翻阅,除了 Haar 之外,我还没有找到任何东西,我知道它最适合人脸识别。

那么除了Haar还有其他的技巧吗? Haar 技术可以追溯到 10 年前的研究,所以理想情况下,我希望从那时起已经在 OpenCV 中实现了一些更多的进步。

【问题讨论】:

我也在尝试开发一些非常相似的东西。想知道你走了多远。 【参考方案1】:

如果您正在寻找 OpenCV 机器学习类型算法,请查看此link。

有关最先进的动态对象检测算法,请查看 OpenTLD。它使用边界框和随机森林来随着时间的推移了解对象。观看演示视频here。

还可以查看 OpenCV 中的 matching_to_many_images.cpp 示例。它使用特征描述符来匹配对象,就像 Google Goggles 一样。与此相关的示例是 bagofwords_classification.cpp 示例。在这种情况下,它可能是您正在寻找的东西。它使用特征检测器(SURF、SIFT 等)来检测对象,然后通过将特征的相对位置与学习的特征数据库进行比较来对它们进行分类。也可以看看来自 MIT 的 tutorial。

latentsvmdetect.cpp 对您来说也是一个很好的起点。

希望有帮助!

【讨论】:

openTLD 看起来很棒,但遗憾的是它一次只处理一个对象 您要检测什么样的对象?就像你想检测人一样,你可以看看 opencv peopledetect 样本。它使用HoG descriptors 和 SVM(我相信)进行训练。 我正在尝试检测所有对象,包括人。理想情况下,在我的实现中,我希望软件能够识别数千个不同类和实例的对象。我一直在寻找最好的算法来解决这个问题。 Haar 是我唯一可以在 OpenCV 中使用的东西吗? 为了对场景中的所有对象进行分类,您需要事先训练您的软件了解这些对象是什么。该任务的数据收集要求会有点高 :) 有必要收集您要分类的每个对象的图像(这将占用您的大部分时间)。您需要使用某种分类器(例如,Haar Cascades、SVM、HoG、Boosted trees 等)来了解您分割的一块像素。分割可能涉及边缘检测或背景减除,甚至是手动分割。 哪种分类器最有效?我目前受限于消费级笔记本电脑。所有这些分类器都无法像 openTLD 那样实现动态对象检测吗?我想实现类似的东西,但没有 kinect:youtube.com/watch?v=fQ59dXOo63o

以上是关于Haar Cascade 是 OpenCV 中唯一可用的图像识别技术吗的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 Haar Cascade(.xml 文件)以在 OpenCV 中使用?

利用opencv建立一个识别手机的haar cascade分类器

如何使用 OpenCV 创建 Haar Cascade (xml) 以跟踪手或手指?

python opencv怎么创建一个cascadeobjectdetector对象

Haar Cascade 与 Hog 检测

使用opencv训练目标检测模型基于cascade模型