2017-03-08 48 views
0

我有一个应该能够同时运行多台摄像机的设置。这些相机检测物体(不是以OO类方式,而是物理物体,如椅子),并为这些物体提供唯一的ID。确定哪台摄像机在多摄像机设置中检测到动作

但是,我正在考虑如何确定从哪个相机检测到动作。这需要的原因是因为如果某物(可能是人物或物体)从camera1移动到camera2,则ID应该保持不变。

我对此没有解决办法,这就是为什么我问你。不过,我的设置看起来像这样。

public class Camera extends Thread{ 
    public int cameraID; 
    private ImageHandling imgHandling; 

    public void run(){ 
     while(true){ 
      //read images from camera 
      . 
      . 
      . 
      imgHandling.initialize(this); 
      //imgHandling does all the image analysis and also handles the tracking AND the motion detection. This should not be relevant for this question. 
      //The identification of different movements is also done in the imageHandling. 
     } 
    } 
} 

这意味着每个摄像头都有自己的ImageHandling类。另外,每个摄像头都是一个线程,并且图像的获取意味着在运行方法中。此外,每个相机都有一个唯一的ID,即如果该设置有3个相机,ID将是1,2和3.

我用Java编程,但我不认为解决方案必须是语言特定。

+0

你有一个相机类,大概映射到一个物理相机?如果相机有检测动作的方法,那肯定会是你的相机类的一部分?您可以将“CameraMotionListeners”添加到每个摄像头以通知他们动作。就目前而言,这太宽泛了...... – John3136

+0

它自己提供的相机只是提供图像。我完成了所有的运动检测。所以没有任何检测或图像处理在相机中完成。 我应该怎么做才能缩小它呢?因为我找不到类似的问题。 – user2990057

+0

它是否在Camera类中完成? – John3136

回答

1

根据聊天中的附加信息,基本问题更多地沿着“我们如何跟踪移动物体”而不是“我们如何找出哪个相机检测到移动”这两行。

为了完整起见,“我们如何找出哪个相机检测到移动”实际上相当简单(并且基本上覆盖了问题)。将Camera实例传递给ImageHandling类。

然后会发生什么事变得更有趣......

你真的需要做一次摄像头检测运动什么是有一个MovingObject类跟踪一个移动的物体。显然有些经理需要保留一份Movingobjects的清单。

在猜测你会是这样的:

class MovingObject 
{ 
    Camera firstDetectedOn; 
    int  speed; 
    int  directionOfMotion; 
    int  width; 
    int  height; 
} 

经理则需要很聪明,让对象的合并。 例如如果在camera1上看到一个物体,然后在camera2上看到类似的物体(大小/方向/速度),那么它们可能是同一个物体,而不是两个单独的物体。除此之外,物理布局 - 如果cam2是cam1的东侧,并且cam1中的对象正在向东移动,则与cam1中的对象向西移动相比,它们更可能相同。

一种方法可能是将这些项目保存为唯一对象,并在某处记录他们“可能”相同的地方。如果对象cam1消失,但您知道它可能是cam2上的对象,那么您可能会认为它实际上是相同的。