确定在多相机设置中哪个相机检测到动作

时间:2017-03-08 03:14:03

标签: java camera

我有一个应该能够同时运行多个摄像头的设置。这些摄像机检测对象(不是以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编程,但我不认为解决方案必须是特定于语言的。

1 个答案:

答案 0 :(得分: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上找到的对象,那么你可以认为它实际上是相同的。