2017-03-08 121 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上的對象,那麼您可能會認爲它實際上是相同的。