Module facetorch.analyzer.detector.pre

Expand source code
from abc import abstractmethod

import torch
from codetiming import Timer
from facetorch.base import BaseProcessor
from facetorch.datastruct import ImageData
from facetorch.logger import LoggerJsonFile
from facetorch.utils import rgb2bgr
from torchvision import transforms

logger = LoggerJsonFile().logger


class BaseDetPreProcessor(BaseProcessor):
    @Timer(
        "BaseDetPreProcessor.__init__", "{name}: {milliseconds:.2f} ms", logger.debug
    )
    def __init__(
        self,
        transform: transforms.Compose,
        device: torch.device,
        optimize_transform: bool,
    ):
        """Base class for detector pre processors.

        All detector pre processors should subclass it.
        All subclass should overwrite:

        - Methods:``run``, used for running the processing

        Args:
            device (torch.device): Torch device cpu or cuda.
            transform (transforms.Compose): Transform compose object to be applied to the image.
            optimize_transform (bool): Whether to optimize the transform.

        """
        super().__init__(transform, device, optimize_transform)

    @abstractmethod
    def run(self, data: ImageData) -> ImageData:
        """Abstract method that runs the detector pre processing functionality.
        Returns a batch of preprocessed face tensors.

        Args:
            data (ImageData): ImageData object containing the image tensor.

        Returns:
            ImageData: ImageData object containing the image tensor preprocessed for the detector.

        """


class DetectorPreProcessor(BaseDetPreProcessor):
    @Timer(
        "DetectorPreProcessor.__init__", "{name}: {milliseconds:.2f} ms", logger.debug
    )
    def __init__(
        self,
        transform: transforms.Compose,
        device: torch.device,
        optimize_transform: bool,
        reverse_colors: bool,
    ):
        """Initialize the detector preprocessor.

        Args:
            transform (Compose): Composed Torch transform object.
            device (torch.device): Torch device cpu or cuda.
            optimize_transform (bool): Whether to optimize the transform.
            reverse_colors (bool): Whether to reverse the colors of the image tensor from RGB to BGR or vice versa. If False, the colors remain unchanged.

        """
        super().__init__(transform, device, optimize_transform)
        self.reverse_colors = reverse_colors

    @Timer("DetectorPreProcessor.run", "{name}: {milliseconds:.2f} ms", logger.debug)
    def run(self, data: ImageData) -> ImageData:
        """Run the detector preprocessor on the image tensor in BGR format and return the transformed image tensor.

        Args:
            data (ImageData): ImageData object containing the image tensor.

        Returns:
            ImageData: ImageData object containing the preprocessed image tensor.
        """
        if data.tensor.device != self.device:
            data.tensor = data.tensor.to(self.device)

        data.tensor = self.transform(data.tensor)

        if self.reverse_colors:
            data.tensor = rgb2bgr(data.tensor)

        return data

Classes

class BaseDetPreProcessor (transform: torchvision.transforms.transforms.Compose, device: torch.device, optimize_transform: bool)

Base class for detector pre processors.

All detector pre processors should subclass it. All subclass should overwrite:

  • Methods:run, used for running the processing

Args

device : torch.device
Torch device cpu or cuda.
transform : transforms.Compose
Transform compose object to be applied to the image.
optimize_transform : bool
Whether to optimize the transform.
Expand source code
class BaseDetPreProcessor(BaseProcessor):
    @Timer(
        "BaseDetPreProcessor.__init__", "{name}: {milliseconds:.2f} ms", logger.debug
    )
    def __init__(
        self,
        transform: transforms.Compose,
        device: torch.device,
        optimize_transform: bool,
    ):
        """Base class for detector pre processors.

        All detector pre processors should subclass it.
        All subclass should overwrite:

        - Methods:``run``, used for running the processing

        Args:
            device (torch.device): Torch device cpu or cuda.
            transform (transforms.Compose): Transform compose object to be applied to the image.
            optimize_transform (bool): Whether to optimize the transform.

        """
        super().__init__(transform, device, optimize_transform)

    @abstractmethod
    def run(self, data: ImageData) -> ImageData:
        """Abstract method that runs the detector pre processing functionality.
        Returns a batch of preprocessed face tensors.

        Args:
            data (ImageData): ImageData object containing the image tensor.

        Returns:
            ImageData: ImageData object containing the image tensor preprocessed for the detector.

        """

Ancestors

Subclasses

Methods

def run(self, data: ImageData) ‑> ImageData

Abstract method that runs the detector pre processing functionality. Returns a batch of preprocessed face tensors.

Args

data : ImageData
ImageData object containing the image tensor.

Returns

ImageData
ImageData object containing the image tensor preprocessed for the detector.
Expand source code
@abstractmethod
def run(self, data: ImageData) -> ImageData:
    """Abstract method that runs the detector pre processing functionality.
    Returns a batch of preprocessed face tensors.

    Args:
        data (ImageData): ImageData object containing the image tensor.

    Returns:
        ImageData: ImageData object containing the image tensor preprocessed for the detector.

    """

Inherited members

class DetectorPreProcessor (transform: torchvision.transforms.transforms.Compose, device: torch.device, optimize_transform: bool, reverse_colors: bool)

Initialize the detector preprocessor.

Args

transform : Compose
Composed Torch transform object.
device : torch.device
Torch device cpu or cuda.
optimize_transform : bool
Whether to optimize the transform.
reverse_colors : bool
Whether to reverse the colors of the image tensor from RGB to BGR or vice versa. If False, the colors remain unchanged.
Expand source code
class DetectorPreProcessor(BaseDetPreProcessor):
    @Timer(
        "DetectorPreProcessor.__init__", "{name}: {milliseconds:.2f} ms", logger.debug
    )
    def __init__(
        self,
        transform: transforms.Compose,
        device: torch.device,
        optimize_transform: bool,
        reverse_colors: bool,
    ):
        """Initialize the detector preprocessor.

        Args:
            transform (Compose): Composed Torch transform object.
            device (torch.device): Torch device cpu or cuda.
            optimize_transform (bool): Whether to optimize the transform.
            reverse_colors (bool): Whether to reverse the colors of the image tensor from RGB to BGR or vice versa. If False, the colors remain unchanged.

        """
        super().__init__(transform, device, optimize_transform)
        self.reverse_colors = reverse_colors

    @Timer("DetectorPreProcessor.run", "{name}: {milliseconds:.2f} ms", logger.debug)
    def run(self, data: ImageData) -> ImageData:
        """Run the detector preprocessor on the image tensor in BGR format and return the transformed image tensor.

        Args:
            data (ImageData): ImageData object containing the image tensor.

        Returns:
            ImageData: ImageData object containing the preprocessed image tensor.
        """
        if data.tensor.device != self.device:
            data.tensor = data.tensor.to(self.device)

        data.tensor = self.transform(data.tensor)

        if self.reverse_colors:
            data.tensor = rgb2bgr(data.tensor)

        return data

Ancestors

Methods

def run(self, data: ImageData) ‑> ImageData

Run the detector preprocessor on the image tensor in BGR format and return the transformed image tensor.

Args

data : ImageData
ImageData object containing the image tensor.

Returns

ImageData
ImageData object containing the preprocessed image tensor.
Expand source code
@Timer("DetectorPreProcessor.run", "{name}: {milliseconds:.2f} ms", logger.debug)
def run(self, data: ImageData) -> ImageData:
    """Run the detector preprocessor on the image tensor in BGR format and return the transformed image tensor.

    Args:
        data (ImageData): ImageData object containing the image tensor.

    Returns:
        ImageData: ImageData object containing the preprocessed image tensor.
    """
    if data.tensor.device != self.device:
        data.tensor = data.tensor.to(self.device)

    data.tensor = self.transform(data.tensor)

    if self.reverse_colors:
        data.tensor = rgb2bgr(data.tensor)

    return data

Inherited members