Spaces:
Running
on
Zero
Running
on
Zero
import numpy as np | |
import torch | |
def center_of_bbox(bbox: list) -> tuple[float, float]: | |
"""#### Calculate the center of a bounding box. | |
#### Args: | |
- `bbox` (list): The bounding box coordinates [x1, y1, x2, y2]. | |
#### Returns: | |
- `tuple[float, float]`: The center coordinates (x, y). | |
""" | |
w, h = bbox[2] - bbox[0], bbox[3] - bbox[1] | |
return bbox[0] + w / 2, bbox[1] + h / 2 | |
def make_2d_mask(mask: torch.Tensor) -> torch.Tensor: | |
"""#### Convert a mask to 2D. | |
#### Args: | |
- `mask` (torch.Tensor): The input mask tensor. | |
#### Returns: | |
- `torch.Tensor`: The 2D mask tensor. | |
""" | |
if len(mask.shape) == 4: | |
return mask.squeeze(0).squeeze(0) | |
elif len(mask.shape) == 3: | |
return mask.squeeze(0) | |
return mask | |
def combine_masks2(masks: list) -> torch.Tensor | None: | |
"""#### Combine multiple masks into one. | |
#### Args: | |
- `masks` (list): A list of mask tensors. | |
#### Returns: | |
- `torch.Tensor | None`: The combined mask tensor or None if no masks are provided. | |
""" | |
try: | |
mask = torch.from_numpy(np.array(masks[0]).astype(np.uint8)) | |
except: | |
print("No Human Detected") | |
return None | |
return mask | |
def dilate_mask( | |
mask: torch.Tensor, dilation_factor: int, iter: int = 1 | |
) -> torch.Tensor: | |
"""#### Dilate a mask. | |
#### Args: | |
- `mask` (torch.Tensor): The input mask tensor. | |
- `dilation_factor` (int): The dilation factor. | |
- `iter` (int, optional): The number of iterations. Defaults to 1. | |
#### Returns: | |
- `torch.Tensor`: The dilated mask tensor. | |
""" | |
return make_2d_mask(mask) | |
def make_3d_mask(mask: torch.Tensor) -> torch.Tensor: | |
"""#### Convert a mask to 3D. | |
#### Args: | |
- `mask` (torch.Tensor): The input mask tensor. | |
#### Returns: | |
- `torch.Tensor`: The 3D mask tensor. | |
""" | |
if len(mask.shape) == 4: | |
return mask.squeeze(0) | |
elif len(mask.shape) == 2: | |
return mask.unsqueeze(0) | |
return mask | |