Skip to content

Module mot.object_detection.preprocessing

View Source
import numpy as np

import cv2

def resize_to_min_dimension(image, min_dimension: int, max_dimension: int):

    """Resize an image given to the min size maintaining the aspect ratio.

    If one of the image dimensions is bigger than the max_dimension after resizing, it will scale

    the image such that its biggest dimension is equal to the max_dimension.

    Otherwise, will keep the image size as is.

    Arguments :

    - *image*: A np.array of size [height, width, channels].

    - *min_dimension*: minimum image dimension.

    - *max_dimension*: If the resized largest size is over max_dimension. Will use to max_dimension

    to compute the resizing ratio.

    Returns:

    - *resized_image*: The input image resized with the aspect_ratio preserved in float32

    - *scale_ratio*: The ratio used to scale back the boxes to the good shape

    """

    image = image.astype(np.float32, copy=False)

    im_size_min = np.min(image.shape[0:2])

    im_size_max = np.max(image.shape[0:2])

    scale_ratio = float(min_dimension) / float(im_size_min)

    # Prevent the biggest axis from being more than MAX_SIZE

    if np.round(scale_ratio * im_size_max) > max_dimension:

        scale_ratio = float(max_dimension) / float(im_size_max)

    resized_image = cv2.resize(image,

                               None,

                               None,

                               fx=scale_ratio,

                               fy=scale_ratio,

                               interpolation=cv2.INTER_LINEAR)

    return resized_image, scale_ratio

def preprocess_for_serving(image, min_dimension=800, max_dimension=1300):

    """Adapt the preprocessing to the tensorpack

    Arguments:

    - *image*: A np.array of shape [height, width, channels] in BGR

    - *min_dimension*: minimum image dimension.

    - *max_dimension*: If the resized largest size is over max_dimension. Will use to max_dimension

    to compute the resizing ratio.

    Returns:

    - *input_signature*: A dictionary which match the server signature

    - *scaling_ratio*: A float representing the scaling to resize the image.

    """

    resized_image, scale_ratio = resize_to_min_dimension(image, min_dimension, max_dimension)

    return {"inputs": resized_image.tolist()}, scale_ratio

Functions

preprocess_for_serving

def preprocess_for_serving(
    image,
    min_dimension=800,
    max_dimension=1300
)

Adapt the preprocessing to the tensorpack

Arguments:

  • image: A np.array of shape [height, width, channels] in BGR
  • min_dimension: minimum image dimension.
  • max_dimension: If the resized largest size is over max_dimension. Will use to max_dimension to compute the resizing ratio.

Returns:

  • input_signature: A dictionary which match the server signature
  • scaling_ratio: A float representing the scaling to resize the image.
View Source
def preprocess_for_serving(image, min_dimension=800, max_dimension=1300):

    """Adapt the preprocessing to the tensorpack

    Arguments:

    - *image*: A np.array of shape [height, width, channels] in BGR

    - *min_dimension*: minimum image dimension.

    - *max_dimension*: If the resized largest size is over max_dimension. Will use to max_dimension

    to compute the resizing ratio.

    Returns:

    - *input_signature*: A dictionary which match the server signature

    - *scaling_ratio*: A float representing the scaling to resize the image.

    """

    resized_image, scale_ratio = resize_to_min_dimension(image, min_dimension, max_dimension)

    return {"inputs": resized_image.tolist()}, scale_ratio

resize_to_min_dimension

def resize_to_min_dimension(
    image,
    min_dimension:int,
    max_dimension:int
)

Resize an image given to the min size maintaining the aspect ratio.

If one of the image dimensions is bigger than the max_dimension after resizing, it will scale the image such that its biggest dimension is equal to the max_dimension. Otherwise, will keep the image size as is.

Arguments :

  • image: A np.array of size [height, width, channels].
  • min_dimension: minimum image dimension.
  • max_dimension: If the resized largest size is over max_dimension. Will use to max_dimension to compute the resizing ratio.

Returns:

  • resized_image: The input image resized with the aspect_ratio preserved in float32
  • scale_ratio: The ratio used to scale back the boxes to the good shape
View Source
def resize_to_min_dimension(image, min_dimension: int, max_dimension: int):

    """Resize an image given to the min size maintaining the aspect ratio.

    If one of the image dimensions is bigger than the max_dimension after resizing, it will scale

    the image such that its biggest dimension is equal to the max_dimension.

    Otherwise, will keep the image size as is.

    Arguments :

    - *image*: A np.array of size [height, width, channels].

    - *min_dimension*: minimum image dimension.

    - *max_dimension*: If the resized largest size is over max_dimension. Will use to max_dimension

    to compute the resizing ratio.

    Returns:

    - *resized_image*: The input image resized with the aspect_ratio preserved in float32

    - *scale_ratio*: The ratio used to scale back the boxes to the good shape

    """

    image = image.astype(np.float32, copy=False)

    im_size_min = np.min(image.shape[0:2])

    im_size_max = np.max(image.shape[0:2])

    scale_ratio = float(min_dimension) / float(im_size_min)

    # Prevent the biggest axis from being more than MAX_SIZE

    if np.round(scale_ratio * im_size_max) > max_dimension:

        scale_ratio = float(max_dimension) / float(im_size_max)

    resized_image = cv2.resize(image,

                               None,

                               None,

                               fx=scale_ratio,

                               fy=scale_ratio,

                               interpolation=cv2.INTER_LINEAR)

    return resized_image, scale_ratio