Mariam-Elz commited on
Commit
54f9fc2
·
verified ·
1 Parent(s): b724a3c

Upload libs/base_utils.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. libs/base_utils.py +84 -0
libs/base_utils.py ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import torch
4
+ import numpy as np
5
+ from PIL import Image
6
+
7
+
8
+ def instantiate_from_config(config):
9
+ if not "target" in config:
10
+ raise KeyError("Expected key `target` to instantiate.")
11
+ return get_obj_from_str(config["target"])(**config.get("params", dict()))
12
+
13
+
14
+ def get_obj_from_str(string, reload=False):
15
+ import importlib
16
+ module, cls = string.rsplit(".", 1)
17
+ if reload:
18
+ module_imp = importlib.import_module(module)
19
+ importlib.reload(module_imp)
20
+ return getattr(importlib.import_module(module, package=None), cls)
21
+
22
+
23
+ def tensor_detail(t):
24
+ assert type(t) == torch.Tensor
25
+ print(f"shape: {t.shape} mean: {t.mean():.2f}, std: {t.std():.2f}, min: {t.min():.2f}, max: {t.max():.2f}")
26
+
27
+
28
+
29
+ def drawRoundRec(draw, color, x, y, w, h, r):
30
+ drawObject = draw
31
+
32
+ '''Rounds'''
33
+ drawObject.ellipse((x, y, x + r, y + r), fill=color)
34
+ drawObject.ellipse((x + w - r, y, x + w, y + r), fill=color)
35
+ drawObject.ellipse((x, y + h - r, x + r, y + h), fill=color)
36
+ drawObject.ellipse((x + w - r, y + h - r, x + w, y + h), fill=color)
37
+
38
+ '''rec.s'''
39
+ drawObject.rectangle((x + r / 2, y, x + w - (r / 2), y + h), fill=color)
40
+ drawObject.rectangle((x, y + r / 2, x + w, y + h - (r / 2)), fill=color)
41
+
42
+
43
+ def do_resize_content(original_image: Image, scale_rate):
44
+ # resize image content wile retain the original image size
45
+ if scale_rate != 1:
46
+ # Calculate the new size after rescaling
47
+ new_size = tuple(int(dim * scale_rate) for dim in original_image.size)
48
+ # Resize the image while maintaining the aspect ratio
49
+ resized_image = original_image.resize(new_size)
50
+ # Create a new image with the original size and black background
51
+ padded_image = Image.new("RGBA", original_image.size, (0, 0, 0, 0))
52
+ paste_position = ((original_image.width - resized_image.width) // 2, (original_image.height - resized_image.height) // 2)
53
+ padded_image.paste(resized_image, paste_position)
54
+ return padded_image
55
+ else:
56
+ return original_image
57
+
58
+ def add_stroke(img, color=(255, 255, 255), stroke_radius=3):
59
+ # color in R, G, B format
60
+ if isinstance(img, Image.Image):
61
+ assert img.mode == "RGBA"
62
+ img = cv2.cvtColor(np.array(img), cv2.COLOR_RGBA2BGRA)
63
+ else:
64
+ assert img.shape[2] == 4
65
+ gray = img[:,:, 3]
66
+ ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
67
+ contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
68
+ res = cv2.drawContours(img, contours,-1, tuple(color)[::-1] + (255,), stroke_radius)
69
+ return Image.fromarray(cv2.cvtColor(res,cv2.COLOR_BGRA2RGBA))
70
+
71
+ def make_blob(image_size=(512, 512), sigma=0.2):
72
+ """
73
+ make 2D blob image with:
74
+ I(x, y)=1-\exp \left(-\frac{(x-H / 2)^2+(y-W / 2)^2}{2 \sigma^2 HS}\right)
75
+ """
76
+ import numpy as np
77
+ H, W = image_size
78
+ x = np.arange(0, W, 1, float)
79
+ y = np.arange(0, H, 1, float)
80
+ x, y = np.meshgrid(x, y)
81
+ x0 = W // 2
82
+ y0 = H // 2
83
+ img = 1 - np.exp(-((x - x0) ** 2 + (y - y0) ** 2) / (2 * sigma ** 2 * H * W))
84
+ return (img * 255).astype(np.uint8)