Trax:
参考:https://trax.readthedocs.io/en/latest/api_python.html#main-module
跟踪过程的伪代码如下:
# 第一帧数据与初始化
rectangle = 获得第一帧的真值框()
image = 获得第一帧的图片()
rectangle = 用rectangle, image对tracker初始化
记录rectangle
# 跟踪
while True:
image = 获得下一帧的图片()
rectangle = 用image对tracker更新
记录rectangle
使用trax可以简单的实现这一过程:
import trax.server
import trax.region
import trax.image
import time
tracker = Tracker()
with trax.server.Server(trax.region.RECTANGLE, trax.image.PATH) as server:
while True:
request = server.wait()
if request.type in ["quit", "error"]:
break
if request.type == "initialize":
rectangle = tracker.initialize(get_rectangle(request.region),
load_image(request.image))
else:
rectangle = tracker.update(load_image(request.image))
server.status(get_region(rectangle))
# trax.server.Server 构建server
# server.wait() 获得下一步操作,其中type是操作类型、region是初始化真值、image是图片路径
vot.VOT:给trax包了个壳,把判断request.type 集成进去了
init:选定真值框格式,用trax.Server构建client
region:将配置信息发送给client,接受其返回,返回为区域初始化+第一张图片路径
frame:从client获得frame的图片路径
report:将跟踪结果发送给client(跑帧数次)
vot.make_full_size:给np.pad包了个壳
对输入图像填充到指定大小
run_vot2020:
handle = vot.VOT("mask")
# 第一帧数据与初始化
vot_anno = handle.region()
image_path = handle.frame()
image = self._read_image(image_path)
vot_anno_mask = vot.make_full_size(vot_anno, (image.shape[1], image.shape[0]))
bbox = masks_to_bboxes(torch.from_numpy(vot_anno_mask), fmt='t').squeeze().tolist()
out = tracker.initialize(image, {'init_mask': vot_anno_mask, 'init_bbox': bbox})
# 跟踪
while True:
image_path = handle.frame()
image = self._read_image(image_path)
pred = out['segmentation'].astype(np.uint8)
handle.report(pred, 1.0)
再可视化