我有一个应该能够同时运行多个摄像头的设置。这些摄像机检测对象(不是以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 :(得分: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上找到的对象,那么你可以认为它实际上是相同的。