未验证 提交 47ea7513 编写于 作者: K Kirill Sizov 提交者: GitHub

Fix interpolation for outside shapes (#3348)

* fix interpolation

* add tests

* remove unnecessary conditions
Co-authored-by: NNikita Manovich <nikita.manovich@intel.com>
上级 0974484b
......@@ -453,11 +453,7 @@ class TrackManager(ObjectManager):
for frame in range(shape0["frame"] + 1, shape1["frame"]):
offset = (frame - shape0["frame"]) / distance
points = None
if shape1["outside"]:
points = np.asarray(shape0["points"])
else:
points = shape0["points"] + diff * offset
points = shape0["points"] + diff * offset
shapes.append(copy_shape(shape0, frame, points.tolist()))
......@@ -679,11 +675,7 @@ class TrackManager(ObjectManager):
distance = shape1["frame"] - shape0["frame"]
for frame in range(shape0["frame"] + 1, shape1["frame"]):
offset = (frame - shape0["frame"]) / distance
points = None
if shape1["outside"]:
points = np.asarray(shape0["points"])
else:
points = interpolate_position(shape0, shape1, offset)
points = interpolate_position(shape0, shape1, offset)
shapes.append(copy_shape(shape0, frame, points))
......
......@@ -167,3 +167,139 @@ class TrackManagerTest(TestCase):
self._check_interpolation(track)
def test_outside_bbox_interpolation(self):
track = {
"frame": 0,
"label_id": 0,
"group": None,
"attributes": [],
"source": "manual",
"shapes": [
{
"frame": 0,
"points": [1.0, 2.0, 3.0, 4.0],
"type": "rectangle",
"occluded": False,
"outside": False,
"attributes": []
},
{
"frame": 2,
"points": [3.0, 4.0, 5.0, 6.0],
"type": "rectangle",
"occluded": False,
"outside": True,
"attributes": [],
},
{
"frame": 4,
"points": [5.0, 6.0, 7.0, 8.0],
"type": "rectangle",
"occluded": False,
"outside": True,
"attributes": []
}
]
}
expected_shapes = [
{
"frame": 0,
"points": [1.0, 2.0, 3.0, 4.0],
"type": "rectangle",
"occluded": False,
"outside": False,
"attributes": [],
"keyframe": True
},
{
"frame": 1,
"points": [2.0, 3.0, 4.0, 5.0],
"type": "rectangle",
"occluded": False,
"outside": False,
"attributes": [],
"keyframe": False
},
{
"frame": 2,
"points": [3.0, 4.0, 5.0, 6.0],
"type": "rectangle",
"occluded": False,
"outside": True,
"attributes": [],
"keyframe": True
},
{
"frame": 4,
"points": [5.0, 6.0, 7.0, 8.0],
"type": "rectangle",
"occluded": False,
"outside": True,
"attributes": [],
"keyframe": True
}
]
interpolated_shapes = TrackManager.get_interpolated_shapes(track, 0, 5)
self.assertEqual(expected_shapes, interpolated_shapes)
def test_outside_polygon_interpolation(self):
track = {
"frame": 0,
"label_id": 0,
"group": None,
"attributes": [],
"source": "manual",
"shapes": [
{
"frame": 0,
"points": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
"type": "polygon",
"occluded": False,
"outside": False,
"attributes": []
},
{
"frame": 2,
"points": [3.0, 4.0, 5.0, 6.0, 7.0, 8.0],
"type": "polygon",
"occluded": False,
"outside": True,
"attributes": []
}
]
}
expected_shapes = [
{
"frame": 0,
"points": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
"type": "polygon",
"occluded": False,
"outside": False,
"attributes": [],
"keyframe": True
},
{
"frame": 1,
"points": [2.0, 3.0, 4.0, 5.0, 6.0, 7.0],
"type": "polygon",
"occluded": False,
"outside": False,
"attributes": [],
"keyframe": False
},
{
"frame": 2,
"points": [3.0, 4.0, 5.0, 6.0, 7.0, 8.0],
"type": "polygon",
"occluded": False,
"outside": True,
"attributes": [],
"keyframe": True
}
]
interpolated_shapes = TrackManager.get_interpolated_shapes(track, 0, 3)
self.assertEqual(expected_shapes, interpolated_shapes)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册