Spaces:
Runtime error
Runtime error
import numpy as np | |
from pycocotools import mask as mask_utils | |
SHAPE = [720, 1280] | |
def mask_prepare(track_dict): | |
scores, masks = [], [] | |
labels = track_dict["labels"] | |
for instance in labels: | |
masks.append(mask_utils.decode(instance["rle"])) | |
scores.append(instance["score"]) | |
return scores, masks, track_dict | |
def mask_postprocess(scores, masks, track_dict): | |
sorted_idxs = np.argsort(scores)[::-1] # Sort indices in descending order of scores | |
processed_area = np.zeros( | |
SHAPE, dtype=np.uint8 | |
) # Empty mask to record processed areas | |
for idx in sorted_idxs: | |
current_mask = masks[idx] | |
# Remove overlapping parts with already processed areas | |
current_mask = np.where(processed_area, 0, current_mask) | |
if current_mask.sum() > 0: # Only keep non-empty masks | |
# Update processed area | |
processed_area = np.maximum(processed_area, current_mask) | |
masks[idx] = current_mask | |
valid_rle_masks = [ | |
mask_utils.encode(np.asfortranarray(masks[idx])) | |
for idx in sorted_idxs | |
if masks[idx].sum() > 0 | |
] | |
valid_idxs = [idx for idx in sorted_idxs if masks[idx].sum() > 0] | |
valid_track_dicts = track_dict.copy() | |
valid_labels = [] | |
for i in range(len(valid_idxs)): | |
vidx = valid_idxs[i] | |
if isinstance(valid_rle_masks[i]["counts"], bytes): | |
valid_rle_masks[i]["counts"] = valid_rle_masks[i]["counts"].decode() | |
valid_track_dicts["labels"][vidx]["rle"] = valid_rle_masks[i] | |
valid_labels.append(valid_track_dicts["labels"][vidx]) | |
valid_track_dicts["labels"] = valid_labels | |
return valid_track_dicts | |