├── Model
│ ├── init.py
│ └── centroidtracker.py
├── object_tracker.py
├── deploy.prototxt
└──res10_300x300_ssd_iter_140000_fp16.caffemodel
===========================================================================
新建 centroidtracker.py,写入代码:
import the necessary packages
from scipy.spatial import distance as dist
from collections import OrderedDict
import numpy as np
class CentroidTracker():
def init(self, maxDisappeared=50):
self.nextObjectID = 0
self.objects = OrderedDict()
self.disappeared = OrderedDict()
存储给定对象被允许标记为“消失”的最大连续帧数,直到我们需要从跟踪中注销该对象
self.maxDisappeared = maxDisappeared
导入了所需的包和模块:distance 、 OrderedDict 和 numpy 。
定义类 CentroidTracker 。构造函数接受一个参数maxDisappeared,即给定对象必须丢失/消失的最大连续帧数,如果超过这个数值就将这个对象删除。
四个类变量:
-
nextObjectID :用于为每个对象分配唯一 ID 的计数器。如果一个对象离开帧并且没有返回 maxDisappeared 帧,则将分配一个新的(下一个)对象 ID。
-
objects :使用对象 ID 作为键和质心 (x, y) 坐标作为值的字典。
-
disappeared:保持特定对象 ID(键)已被标记为“丢失”的连续帧数(值)。
-
maxDisappeared :在我们取消注册对象之前,允许将对象标记为“丢失/消失”的连续帧数。
让我们定义负责向我们的跟踪器添加新对象的 register 方法:
def register(self, centroid):
注册对象时,我们使用下一个可用的对象ID来存储质心
self.objects[self.nextObjectID] = centroid
self.disappeared[self.nextObjectID] = 0
self.nextObjectID += 1
def deregister(self, objectID):
要注销注册对象ID,我们从两个字典中都删除了该对象ID
del self.objects[objectID]
del self.disappeared[objectID]
register 方法接受一个质心,然后使用下一个