我需要执行计算机视觉任务以检测水瓶或汽水 jar 。我将获得瓶子、汽水 jar 或任何其他随机物体的“正面”图像(一个接一个),我的算法应该确定它是瓶子、 jar 头还是其中任何一个。
关于对象检测场景的一些细节:
- 如前所述,我将针对每个图像/视频帧测试一个对象。
- 并非所有的水壶都是一样的。塑料、盖子或标签可能有颜色差异。 也许有些人无法获得标签或盖子。
- 汽水 jar 也有同样的变化。不过,不会对起皱的汽水 jar 进行测试。
- 物体之间可能存在微小的尺寸差异。
- 我可以使用绿色(或任何自定义颜色)背景。
- 我会对图片进行任何需要的过滤。
- 这将在 Raspberry Pi 上运行。
以防万一,每个示例:
我已经测试了几次 OpenCV 人脸检测算法,我知道它工作得很好,但我需要获得一个特殊的 Haar Cascades 特征 XML 文件来检测此方法中的每个自定义对象。
因此,我想到的不同替代方案是:
我想要一个简单的算法,我认为甚至不需要创建自定义 Haar 分类器。你有什么建议?
更新
我强烈考虑了形状/纵横比方法。
但是我想我遇到了一些问题,因为瓶子的尺寸甚至形状各不相同。 但是这让我想到或设定了以下考虑因素:
- 我正在使用 THRESH_BINARY 方法应用阈值。 (感谢答案)。
- 我将在检测时使用白色背景。
- 汽水 jar 大小都一样。
- 因此,高精度的汽水 jar 边界框可以区分 jar 头。
我取得的成就:
阈值确实帮助了我,我注意到在白色背景测试中我会获得 jar 头:
这是从瓶子中得到的:
因此,较暗的区域占据主导地位是显而易见的。在某些情况下, jar 头可能会变成假阴性。对于瓶子,光线和角度可能会导致结果不一致,但我真的认为这可能是一种更短的方法。
所以,我现在很困惑我应该如何评估 黑暗 主导地位,我读过 findContours
导致它,但我完全不知道如何捕获这样的功能。例如,对于汽水 jar ,它可能会找到多个轮廓,所以我不知道要评估什么。
注意:我愿意测试与 Open CV 不同的任何其他算法或库。
最佳答案
我在这里看到了一些基本的想法:
- 检查对象(准确地说是对象边界和矩形)的宽度/高度比。对于 jar 头,它大约是 2-2.5,对于瓶子,我认为它会 >3。这是一个非常简单的想法,它应该很容易快速测试,我认为它应该具有很好的准确性。对于某些值,例如 2.75(假设我给出的值是正确的,这很可能不是真的),您可以使用一些不同的算法。
- 检查您的对象是否包含玻璃/透明区域 - 如果是,则肯定是瓶子。 Here您可以阅读更多相关信息。
- 使用 grabcut 算法获取对象蒙版/更精确的形状,并检查顶部的形状宽度是否与底部的宽度相似 - 如果是,则不是 jar 头,不是 - 瓶子(瓶子顶部有螺帽) .
关于algorithm - 除了 Haar 级联之外,还有哪些算法或方法可用于自定义对象检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29397564/