Spaces:
Paused
Paused
| """ | |
| @author: cuny | |
| @fileName: utils.py | |
| @create_time: 2021/12/29 下午1:29 | |
| @introduce: | |
| 焕影服务的一些工具函数,涉及两类: | |
| 1. 开发debug时候的工具函数 | |
| 2. 初始化COS配置时的工具函数 | |
| """ | |
| import cv2 | |
| from .error import WrongImageType | |
| import numpy as np | |
| class Debug(object): | |
| color_dir:dict = { | |
| "red":"31m", | |
| "green":"32m", | |
| "yellow":"33m", | |
| "blue":"34m", | |
| "common":"38m" | |
| } # 颜色值 | |
| __DEBUG:bool = True | |
| def debug(self): | |
| return self.__DEBUG | |
| def debug(self, value): | |
| if not isinstance(value, bool): | |
| raise TypeError("你必须设定debug的值为bool的True或者False") | |
| print(f"设置debug为: {value}") | |
| self.__DEBUG = value | |
| def debug_print(self, text, **kwargs): | |
| if self.debug is True: | |
| key = self.color_dir["common"] if "font_color" not in kwargs else self.color_dir[kwargs["font_color"]] | |
| print(f"\033[{key}{text}\033[0m") | |
| def resize_image_esp(input_image, esp=2000): | |
| """ | |
| 输入: | |
| input_path:numpy图片 | |
| esp:限制的最大边长 | |
| """ | |
| # resize函数=>可以让原图压缩到最大边为esp的尺寸(不改变比例) | |
| width = input_image.shape[0] | |
| length = input_image.shape[1] | |
| max_num = max(width, length) | |
| if max_num > esp: | |
| print("Image resizing...") | |
| if width == max_num: | |
| length = int((esp / width) * length) | |
| width = esp | |
| else: | |
| width = int((esp / length) * width) | |
| length = esp | |
| print(length, width) | |
| im_resize = cv2.resize(input_image, (length, width), interpolation=cv2.INTER_AREA) | |
| return im_resize | |
| else: | |
| return input_image | |
| def cv_show(self, *args, **kwargs): | |
| def check_images(img): | |
| # 判断是否是矩阵类型 | |
| if not isinstance(img, np.ndarray): | |
| raise WrongImageType("输入的图像必须是 np.ndarray 类型!") | |
| if self.debug is True: | |
| size = 500 if "size" not in kwargs else kwargs["size"] # 默认缩放尺寸为最大边500像素点 | |
| if len(args) == 0: | |
| raise ProcessError("你必须传入若干图像信息!") | |
| flag = False | |
| base = None | |
| for image in args: | |
| check_images(image) | |
| if flag is False: | |
| image = self.resize_image_esp(image, size) | |
| h, w = image.shape[0], image.shape[1] | |
| flag = (w, h) | |
| base = image | |
| else: | |
| image = cv2.resize(image, flag) | |
| base = np.hstack((base, image)) | |
| title = "cv_show" if "winname" not in kwargs else kwargs["winname"] | |
| cv2.imshow(title, base) | |
| cv2.waitKey(0) | |
| else: | |
| pass | |