通过摄像头检测真实物体。利用摄像头查找真实物体的可能性。

6
我正在使用安卓相机开发一个机器人项目,如果路径上有任何物体,机器人可以移动并清理表面。我在检测路径中的物体时遇到了困难,我没有使用任何传感器来找到相机和物体之间的距离,我仅仅使用相机来查找路径中的物体。我不想找出路径中物体的形状、类型和颜色。路径中的小物体可以被忽略,比如沙子、草等。路径中不应该有任何大物体(在下图中标记的部分)。
在使用相机进行物体检测时,绘画、阴影会被检测为物体。从上图可以看出,音乐符号被检测为物体。是否有任何付费或开源库可用于使用相机进行真实物体检测(如果可以在Java或c++中使用,将更有帮助)。我尝试过opencv、javacv、jhlabs、jjil、aviary sdk、jiu、imagemagic等等。但是我无法找到确切的解决方案满足我的需求。如果有人处理这个图像处理,请建议我在使用安卓相机进行真实物体检测时应该怎么做。如果不可能,请给我一个解释为什么不可能。
我尝试了以下可能性: 1. 人脸识别算法(特征检测):基于匹配模式的人脸检测算法。在这种情况下不适用,即物体可以是任何形状,没有可匹配的模式。 2. 物体识别:物体识别也是进行模式匹配。我不想识别物体,只想找出标记区域中是否有物体,并且它是一个真实的物体(即不是任何地板上的绘画、阴影等)。 3. 边缘检测:我尝试了不同的边缘检测算法,但这对我来说也不是准确的解决方案。即,绘画和阴影具有边缘,因此我们不能假设我们发现的边缘是真正的物体。

1
你解决了吗?你尝试从扭曲的图像中找到共同的图像了吗?实现高斯模糊很容易,因为它只是将周围像素的平均值直接放入窗口矩阵中。其他扭曲也不太难。至于实时性,当机器人发现某些东西并处理所发现的内容后,您可能会减慢机器人的运行速度,然后继续。请访问 http://www.amazon.com/dp/013168728X/?tag=stackoverfl08-20。抱歉,我用Java完成了我的工作。 - Andrew Scott Evans
谢谢Andrew。我会检查这个并在这里分享结果。我现在有一些其他的项目,等我有空了我会检查这个。 - Sujith
6个回答

4
如果有人在处理图像方面工作,请建议我如何使用Android相机进行实时物体检测。如果不可能,请解释一下为什么不可能。
实时、实时的物体检测是一个正在进行密集研究的领域。目前,我们现有的算法只能进行模式匹配,并在相机框架内寻找预定义的图像。真实世界检测的问题在于,真实世界太...真实了。任何物体或项目都有很多变化,单个库无法提供它们的检测。真实世界检测只能通过大量数据生成和机器学习训练来实现,这需要比大多数移动设备提供的处理和电池功率更多。

感谢Raghav Sood,如果您发现任何相关的可能性,请告诉我。 - Sujith

2

您可能希望了解一些称为运动结构的技术。如果您有来自同一摄像头的一系列照片,并且这些照片是在短时间间隔内拍摄的,那么您可以获取有关照片中场景的一些三维信息。不幸的是,我不知道是否有任何库可以直接为您完成此操作,但这是一个相当流行的问题,因此一些搜索可能会给您提供一个现成的解决方案。


谢谢morynicz提供的信息。我已经搜索了结构运动,这个概念非常棒啊。 - Sujith
2
嗨morynicz,我刚刚在nadroid中发现了一些运动结构的示例。请查看此演示:https://play.google.com/store/apps/details?id=org.boofcv.android。源代码:https://github.com/FedeCamposeco/Android-SfM-client,https://github.com/lessthanoptimal/BoofAndroidDemo。 - Sujith

1
如果相机与地面平行且地面通常是平坦的,您可以考虑视频帧上物体的位置来估计物体的距离。物体距离越远,它在图像顶部的位置就越高。实际上,您可以通过一些噪声估算出米数,就像我们人类一样。
我认为您识别“真实物体”的问题可以翻译为:“查找不平(与地面)的视觉元素,换句话说,查找具有一定高度的对象”。
您考虑过立体视觉方法吗?使用两个相机可以更好地处理三维问题。

1
感谢Marvin的回答。找到距离是一个解决方案。但问题在于我们无法在Android中估算物体到相机的距离。在Android中没有传感器可以找到距离。 - Sujith

1
在视频监控中进行了大量的图像分析。首先,您需要定义所需的成功率。如果您正在尝试在一个图像上完成所有这些工作,则可能已经意识到这是行不通的 : )。在视频分析中,您可以搜索一些用于动态检测的好算法,这些算法将为您提供某个背景下的所有移动对象。您有一个更困难的情况,即您正在移动。您需要以某种方式对该背景进行建模。如果您希望您的机器人在一些色彩丰富的背景上移动,例如油漆,那么您如何知道什么是没有深度感知的物体。也许尝试一些阴影处理,但还是不行。而且,所有这些算法都非常耗费资源,结果越好,所需的CPU功率就越多。Android并不适合这种应用。您可以进行一些简单的处理,但您想要的远远超出了当前的可能性。
底线是您需要更加调整您的需求和资源。
PS. 如果您最终像您最初说的那样做到了,我们会在某个游艇上看到您和一些美丽的模特。
希望这能帮助您,祝您工作愉快。

谢谢Marko Lazic。请告诉我您是否尝试过任何图像处理库。想到我会错过游艇真是令人心碎;) - Sujith

0

我认为你应该使用多个摄像头......给图像一个二维视图.....希望这能有所帮助....


感谢交换。如果您发现任何相关信息,请告诉我。 - Sujith

0

你可以使用Tensorflow和Keras训练或使用预训练的深度学习模型,首先必须收集尽可能多的对象数据,确保从现场收集,然后尝试使用不同的体系结构来训练模型以满足您的需求。您可以调整超参数并将模型转换为Tensorflow Lite以在Android应用程序中打包模式。

更多参考资料,请访问tenserflow

这是我发现的解决计算机视觉问题的最简单方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接