跟踪是在视频流中定位移动对象或多个对象随时间的进程。跟踪的目的是不一样的物体检测。物体检测是在单个帧中定位感兴趣的对象的过程。跟踪跨越多个帧的对象的相关联的检测。
跟踪多个对象需要检测,预测和数据关联。
检测:在视频帧检测所关注的对象。
预言:预测在下一帧中对象的位置。
数据协会:使用预测的位置关联检测跨帧形成轨道.
选择用于检测感兴趣对象的正确方法取决于你想跟踪什么,以及是否相机静止。
要用固定的摄像机检测运动中的物体,您可以使用vision.ForegroundDetector
系统对象。背景减法的方法有效地工作,但需要相机是静止的。
要用移动的摄像机检测运动中的物体,可以使用滑动窗口检测方法。这种方法通常比背景减法工作得更慢。要检测和跟踪特定类别的对象,请使用表中描述的System对象或函数。
要跟踪的对象类型 | 相机 | 功能 |
---|---|---|
任何移动 | 静止 |
|
脸,眼睛,鼻子,嘴巴,上半身 | 固定,搬家 | |
行人 | 固定,搬家 | |
自定义对象类别 | 固定,搬家 |
|
跟踪对象随着时间的手段,你必须在下一帧预测其位置。预测的最简单的方法是假设该对象将是接近其最后的已知位置。换言之,前一检测起到下一预测。该方法对于高的帧速率是特别有效的。然而,当物体以不同的速度移动,或使用此预测方法可能会失败,当帧速率是相对于运动中的物体的速度低。
预测的更复杂的方法是使用以前所观察到的物体的运动。卡尔曼滤波器(vision.KalmanFilter
)预测对象的下一位置,假定它根据运动模型,如等速或恒定加速度移动。卡尔曼滤波器还考虑到过程噪声和测量噪声。过程噪声为物体的实际运动与运动模型的偏差。测量噪声为检测错误。
要使配置卡尔曼滤波器更容易,请使用configureKalmanFilter
.这个函数设置了一个过滤器,用于跟踪在笛卡尔坐标系中以恒定速度或恒定加速度移动的物理对象。所有方面的统计数据都是相同的。如果你需要用不同的假设来配置卡尔曼滤波器,你需要构造vision.KalmanFilter
直接对象。
数据协会是跨帧关联对应于同一物理对象的检测的过程。一个特定对象的时间历史由多个检测组成,称为一个跟踪.一种履带表示可以包括对象的前面位置的整个历史。或者,也可以只由对象的最后已知位置和当前速度。
要将检测匹配到曲目,必须建立评估匹配的标准。通常,您可以通过定义成本函数来建立这个标准。将检测与轨道匹配的成本越高,检测属于轨道的可能性就越小。一个简单的代价函数可以定义为预测对象和被检测对象的边界框之间的重叠程度。这从行驶中的汽车中追踪行人的示例实现这个成本函数bboxOverlapRatio
函数。您可以实现一个更复杂的成本函数,一个解释预测的不确定性的函数,使用距离
功能的功能vision.KalmanFilter
对象。您还可以实现一个自定义的成本函数,该函数可以包含关于对象大小和外观的信息。
门控是一种从考虑中消除极不可能匹配的方法,例如通过对成本函数施加一个阈值。如果开销超过某个阈值,则观察结果无法与跟踪匹配。使用这种阈值方法可以有效地得到一个循环控制区域围绕每个预测,其中一个匹配检测可以找到。另一种门控技术是使门区域足够大到包括K.-最接近预测的邻居。
数据关联归结为最小权值二部匹配问题,是图论研究的一个重要领域。二部图用顶点表示轨迹和检测。它还表示匹配检测和轨迹的代价,作为相应顶点之间的加权边缘。
这assignDetectionsToTracks
功能实现的Munkres'匈牙利二分匹配算法的变体。它的输入是成本矩阵,其中所述行对应于轨道和列对应于检测。每个条目包含分配特定的检测到特定轨道的成本。您可以通过比赛不可能的成本设置为无穷实现门。
数据协会必须考虑到新的对象可以出现在视野中,或者被跟踪可以离开视野的对象的事实。换句话说,在任何给定的框架,新的轨道一定数量可能需要创建,现有轨道的一些数量可能需要被丢弃。这assignDetectionsToTracks
函数返回除了匹配对未分配的轨道和未分配的检测的索引。
处理不匹配检测的一种方法是从每一个检测中创建一个新的轨道。或者,您可以从大于特定大小的不匹配检测,或从具有特定位置或外观的检测,创建新的轨道。例如,如果场景有一个入口点,比如一个门口,那么您可以指定只有位于入口点附近的不匹配的检测才能开始新的轨道,而所有其他检测都被认为是噪声。
处理无与伦比的轨道的另一种方法是删除保持无与伦比的特定数量的帧中的任何轨道。或者,您可以指定要删除一个无与伦比的轨道时,其最后已知位置附近的出口点。
assignDetectionsToTracks
|bboxOverlapRatio
|configureKalmanFilter
|extractHOGFeatures
|selectStrongestBbox
|trainCascadeObjectDetector
|愿景。CascadeObjectDetector
|vision.ForegroundDetector
|vision.KalmanFilter
|vision.PeopleDetector
|愿景。PointTracker