user2990057
user2990057

Reputation: 121

Determine which camera has detected motion in multi-camera setup

I have a setup which should be able to run multiple cameras at the same time. These cameras detect objects (not in a OO-kind of way, but a physical object, like a chair) and give these objects unique IDs.

However, I am thinking about how I should determine from which camera a motion is detected. The reason why this is needed is because if something (could be a human or an object) moves from camera1 to camera2, the ID should remain the same.

I have no solution for this, which is why I ask you. My setup, however, looks like this.

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.
       }
    }
}

This means that every camera will have its own ImageHandling class. Also, every camera is a thread, and the fetching of images is meant to be in the run-method. Also, each camera has a unique ID, i.e. if the setup has 3 cameras, the IDs will be 1, 2 and 3.

I'm programming in Java, but I don't think that a solution has to be language specific.

Upvotes: 0

Views: 81

Answers (1)

John3136
John3136

Reputation: 29265

Based on additional information from the chat, the basic question is more along the lines of "How do we track a moving object" rather than "How do we find out which camera detected movement".

For the sake of completeness, "How do we find out which camera detected movement" is actually fairly easy (and basically covered in the question). Pass the Camera instance to the ImageHandling class.

What happens then gets more interesting...

What you really need to do once a Camera detects motion is to have a MovingObject class that keeps track of one moving object. Obviously some manager somewhere needs to keep a list of Movingobjects.

At a guess you would have something like:

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

The manager then needs to be smart and allow merging of objects. e.g. If an object is seem on camera1 and then a similar object (size/direction/speed) is seen on camera2, then perhaps they are the same object and not 2 separate ones. Add to that the physical layout - if cam2 is East of cam1 and the object in cam1 is moving East then it is much more likely to be the same than if the object in cam1 was moving West.

One approach may be to keep the items as unique objects and record somewhere that they "might" be the same. If the object disappears of cam1 but you know it might be the object found on cam2, then you may be able to assume it is in fact the same.

Upvotes: 1

Related Questions