Source code for pyvar.ml.utils.resizer
# Copyright 2021 Variscite LTD
# SPDX-License-Identifier: BSD-3-Clause
"""
:platform: Unix/Yocto
:synopsis: Class to resize image/frame.
.. moduleauthor:: Diego Dorta <diego.d@variscite.com>
"""
import cv2
import numpy as np
from PIL import Image
[docs]
class Resizer:
"""
:ivar frame: original frame;
:ivar frame_resized: resized frame;
:ivar image: original image;
:ivar image_path: image path;
:ivar image_resized: image resized;
:ivar model_height: model height;
:ivar model_width: model width.
"""
def __init__(self):
"""
Constructor method for the Resizer class.
"""
self.frame = None
self.frame_resized = None
self.image = None
self.image_path = None
self.image_resized = None
self.model_height = None
self.model_width = None
[docs]
def set_sizes(self, engine_input_details=None):
"""
Set the height and width model size.
"""
if engine_input_details is not None:
_, self.model_height, self.model_width, _ = engine_input_details[0]['shape']
[docs]
def resize_frame(self, frame=None, width=None, height=None, expand_dims=True):
"""
Resize the frame.
Args:
frame (numpy array): original frame to be resized;
width (int): new width to resize;
height (int): new height to resize;
expand_dims (bool): if expand dimensions or not
Returns:
The :obj:`numpy.array` resized frame is stored at the frame_resized attribute.
"""
if frame is not None:
self.frame = frame
if width is not None and isinstance(width, int):
self.model_width = width
if height is not None and isinstance(height, int):
self.model_height = height
self.frame_resized = cv2.resize(frame, (self.model_width, self.model_height))
if expand_dims:
self.frame_resized = np.expand_dims(self.frame_resized, axis=0)
[docs]
def resize_image(self, image_path=None, width=None, height=None, expand_dims=True):
"""
Resize the image.
Args:
image_path (numpy array): original image to be resized;
width (int): new width to resize;
height (int): new height to resize;
expand_dims (bool): if expand dimensions or not
Returns:
The :obj:`numpy.array` resized image is stored at image_resized attribute.
"""
if image_path is not None:
self.image_path = image_path
if width is not None and isinstance(width, int):
self.model_width = width
if height is not None and isinstance(height, int):
self.model_height = height
with Image.open(self.image_path) as img:
self.image = np.array(img)
self.image = self.image[:, :, ::-1].copy()
self.image_resized = img.resize((self.model_width, self.model_height))
if expand_dims:
self.image_resized = np.expand_dims(self.image_resized, axis=0)