我有一个设置,该设置应该能够同时运行多个摄像机。这些摄像机检测对象(不是以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.
}
}
}
这意味着每个相机都将拥有自己的图像手工艺类。另外,每个相机都是线程,并且图像的获取旨在在运行方法中。另外,每个摄像机都有一个唯一的ID,即,如果设置具有3个相机,则ID为1、2和3。
。我正在Java编程,但我认为解决方案必须是特定于语言的。
基于聊天中的其他信息,基本问题更多地符合"我们如何跟踪移动对象"而不是"我们如何找出哪个相机检测到的运动"。
为了完整,"我们如何找出检测到哪个相机的运动"实际上很容易(并且基本上涵盖了问题)。将Camera
实例传递到ImageHandling
类。
发生的事情会变得更加有趣...
一旦摄像机检测到运动,您真正需要做的是要拥有一个跟踪一个移动对象的MovingObject
类。显然,某些经理需要保留Movingobjects
的列表。
猜测您会有类似的东西:
class MovingObject
{
Camera firstDetectedOn;
int speed;
int directionOfMotion;
int width;
int height;
}
然后,经理需要变得聪明并允许对象合并。例如如果在摄像头1上似乎是一个对象,然后在相机2上可以看到类似的对象(大小/方向/速度),那么它们也许是同一对象,而不是2个单独的对象。再加上物理布局 - 如果CAM2在CAM1的东部,并且CAM1中的对象向东移动,那么与CAM1中的对象向西移动的可能性更大。
一种方法可能是将项目保留为独特的对象,并记录它们"可能"相同的地方。如果对象消失了CAM1,但您知道它可能是CAM2上的对象,那么您实际上可以假设它是相同的。