Source code for sleap.info.trackcleaner
"""
CLI for TrackCleaner (mostly deprecated).
This runs the track cleaner to (i) cull instances and (ii) connect track breaks
in predictions which have already been tracked.
The `sleap-track` CLI lets you run (or re-run) tracking on predictions, and
includes options to cull instances *before* tracking (with more control over
how instances are selected for culling) and connect track breaks. In most cases
it will be better to use the `sleap-track` CLI.
"""
import operator
from typing import Text
from sleap import Labels
from sleap.nn.tracking import TrackCleaner
[docs]def fit_tracks(filename: Text, instance_count: int):
"""Wraps `TrackCleaner` for easier cli api."""
labels = Labels.load_file(filename)
video = labels.videos[0]
frames = labels.find(video)
TrackCleaner(instance_count=instance_count).run(frames=frames)
# Rebuild list of tracks
labels.tracks = list(
{
instance.track
for frame in labels
for instance in frame.instances
if instance.track
}
)
labels.tracks.sort(key=operator.attrgetter("spawned_on", "name"))
# Save new file
save_filename = filename
save_filename = save_filename.replace(".slp", ".cleaned.slp")
save_filename = save_filename.replace(".h5", ".cleaned.h5")
save_filename = save_filename.replace(".json", ".cleaned.json")
Labels.save_file(labels, save_filename)
print(f"Saved: {save_filename}")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("data_path", help="Path to labels json file")
parser.add_argument(
"-c",
"--instance_count",
type=int,
default=2,
help="Count of instances to keep in each frame",
)
args = parser.parse_args()
fit_tracks(filename=args.data_path, instance_count=args.instance_count)
# print(args)