使用通用网络摄像头进行对象检测

Posted

技术标签:

【中文标题】使用通用网络摄像头进行对象检测【英文标题】:Object detection with a generic webcam 【发布时间】:2011-03-09 22:12:28 【问题描述】:

这是我想以尽可能少的努力解决的任务(最好使用 QT 和 C++ 或 Java):我想使用网络摄像头视频输入来检测前面是否有(或更多)板条箱相机镜头与否。场景可以从“清晰”变为“镜头前有一个板条箱”并返回,同时凸轮将其视频信号提供给我的应用程序。对于原型测试/学习,我有 2-3 张“空”场景的图像,以及 2-3 张带有一个或多个 crate 的图像。

你知道如何解决这个任务的简单想法吗?我找到了 OpenCV,但是这个框架对于这个简单的任务来说是不是太笨重了?我是计算机视觉领域的新手。这通常是一项艰巨的任务,还是在实时馈送中检测凸轮前面是否存在障碍物是否简单而可靠?非常感谢您的专家意见!

【问题讨论】:

祝你好运。大多数此类应用程序是在大学中自定义生成的。公司生成的所有软件都是专有的或出售的。在 Google 上搜索“Object Recognition Library Open Source”。 【参考方案1】:

这是我听说过的一种方法,可能会取得一些成功:

对图像执行边缘检测以将其转换为黑白图像,从而将边缘显示为黑色像素。 现在创建一个直方图来记录图像中每个垂直像素列中黑色像素的频率。这里的理论是,一个桶内或周围的直方图中的高频值表示垂直边缘,这可能是一个板条箱的边缘。

您还可以考虑使用第二个直方图来测量图像每一行的像素。

显然这是一种相当简单的方法,并且高度依赖于“简单”的输入;即在空白背景下具有“硬”边缘的普通盒子(最好是与盒子形成强烈对比的背景)。

【讨论】:

【参考方案2】:

您不需要一个成熟的计算机视觉库来检测相机前面是否有箱子。您可以拍摄快照并制作颜色直方图(简单)。要捕获快照,请查看此处:

http://msdn.microsoft.com/en-us/library/dd742882%28VS.85%29.aspx

【讨论】:

【参考方案3】:

这里有很多变量,包括环境照明的任何可能变化以及视野中的任何其他活动。看看实现一个 Canny 边缘检测器(OpenCV 有,Intel Performance Primitives 也有)来寻找感兴趣的形状的轮廓。如果你有点知道盒子的位置,你也许可以对感兴趣区域的像素求和。如果框可以出现在视野中的任何位置,那就更具挑战性了。

【讨论】:

【参考方案4】:

这不是你应该从 Java 开始的。当我遇到这类问题时,我会从 Matlab(OpenCV 库)或类似的东西开始,看看解决方案是否可以在那里工作,然后将其移植到 Java。

为了回答您的问题,我通过对“参考”图像(在您的情况下没有板条箱)与当前图像进行异或处理,然后对直方图进行处理(右侧的聚集像素表示差异很大),或者只是将可见像素并将它们与阈值进行比较。 XOR 不是很精确,但速度很快。

我的意思是,我花了 2 小时来安装 Scilab 和工具包并编写概念证明。如果第一个解决方案对每个附加算法(已经在 Mat-/Scilab 中完成)不起作用,我会在 Java 中花费两天时间。恕我直言,您从错误的角度解决问题。

如果 Java/C++ 真的只是一些无关紧要的简单工具,那么放弃它们并使用 Scilab 或其他 Matlab 克隆 - 原型设计和微调会快得多。

【讨论】:

【参考方案5】:

对象检测涉及两个部分。一是特征提取,二是相似度计算。板条箱的一些明显特征是几何、边缘、纹理等......

因此,您可以找到一些算法来从您的 crate 图像中提取这些特征。然后将这些特征与您的训练样本图像进行比较。

【讨论】:

以上是关于使用通用网络摄像头进行对象检测的主要内容,如果未能解决你的问题,请参考以下文章

将HOG + SVM培训应用于网络摄像头以进行对象检测

使用rtsp流时Tensorflow对象检测速度慢

这个网络摄像头人脸检测有啥问题?

来自前景提取的物体运动检测(grabcut)

带有面部检测和形状预测的 Dlib 网络摄像头捕获速度很慢

EMgucv 保存从网络摄像头检测到的多张人脸