josedolot commited on
Commit
15eca91
·
1 Parent(s): a525a20

Upload utils/plot.py

Browse files
Files changed (1) hide show
  1. utils/plot.py +90 -0
utils/plot.py ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import webcolors
3
+ import os
4
+ import uuid
5
+ import numpy as np
6
+
7
+ STANDARD_COLORS = [
8
+ 'LawnGreen', 'Chartreuse', 'Aqua', 'Beige', 'Azure', 'BlanchedAlmond', 'Bisque',
9
+ 'Aquamarine', 'BlueViolet', 'BurlyWood', 'CadetBlue', 'AntiqueWhite',
10
+ 'Chocolate', 'Coral', 'CornflowerBlue', 'Cornsilk', 'Crimson', 'Cyan',
11
+ 'DarkCyan', 'DarkGoldenRod', 'DarkGrey', 'DarkKhaki', 'DarkOrange',
12
+ 'DarkOrchid', 'DarkSalmon', 'DarkSeaGreen', 'DarkTurquoise', 'DarkViolet',
13
+ 'DeepPink', 'DeepSkyBlue', 'DodgerBlue', 'FireBrick', 'FloralWhite',
14
+ 'ForestGreen', 'Fuchsia', 'Gainsboro', 'GhostWhite', 'Gold', 'GoldenRod',
15
+ 'Salmon', 'Tan', 'HoneyDew', 'HotPink', 'IndianRed', 'Ivory', 'Khaki',
16
+ 'Lavender', 'LavenderBlush', 'AliceBlue', 'LemonChiffon', 'LightBlue',
17
+ 'LightCoral', 'LightCyan', 'LightGoldenRodYellow', 'LightGray', 'LightGrey',
18
+ 'LightGreen', 'LightPink', 'LightSalmon', 'LightSeaGreen', 'LightSkyBlue',
19
+ 'LightSlateGray', 'LightSlateGrey', 'LightSteelBlue', 'LightYellow', 'Lime',
20
+ 'LimeGreen', 'Linen', 'Magenta', 'MediumAquaMarine', 'MediumOrchid',
21
+ 'MediumPurple', 'MediumSeaGreen', 'MediumSlateBlue', 'MediumSpringGreen',
22
+ 'MediumTurquoise', 'MediumVioletRed', 'MintCream', 'MistyRose', 'Moccasin',
23
+ 'NavajoWhite', 'OldLace', 'Olive', 'OliveDrab', 'Orange', 'OrangeRed',
24
+ 'Orchid', 'PaleGoldenRod', 'PaleGreen', 'PaleTurquoise', 'PaleVioletRed',
25
+ 'PapayaWhip', 'PeachPuff', 'Peru', 'Pink', 'Plum', 'PowderBlue', 'Purple',
26
+ 'Red', 'RosyBrown', 'RoyalBlue', 'SaddleBrown', 'Green', 'SandyBrown',
27
+ 'SeaGreen', 'SeaShell', 'Sienna', 'Silver', 'SkyBlue', 'SlateBlue',
28
+ 'SlateGray', 'SlateGrey', 'Snow', 'SpringGreen', 'SteelBlue', 'GreenYellow',
29
+ 'Teal', 'Thistle', 'Tomato', 'Turquoise', 'Violet', 'Wheat', 'White',
30
+ 'WhiteSmoke', 'Yellow', 'YellowGreen'
31
+ ]
32
+
33
+
34
+ def from_colorname_to_bgr(color):
35
+ rgb_color = webcolors.name_to_rgb(color)
36
+ result = (rgb_color.blue, rgb_color.green, rgb_color.red)
37
+ return result
38
+
39
+
40
+ def standard_to_bgr(list_color_name):
41
+ standard = []
42
+ for i in range(len(list_color_name) - 36): # -36 used to match the len(obj_list)
43
+ standard.append(from_colorname_to_bgr(list_color_name[i]))
44
+ return standard
45
+
46
+
47
+ def get_index_label(label, obj_list):
48
+ index = int(obj_list.index(label))
49
+ return index
50
+
51
+
52
+ def plot_one_box(img, coord, label=None, score=None, color=None, line_thickness=None):
53
+ tl = line_thickness or int(round(0.001 * max(img.shape[0:2]))) # line thickness
54
+ color = color
55
+ c1, c2 = (int(coord[0]), int(coord[1])), (int(coord[2]), int(coord[3]))
56
+ cv2.rectangle(img, c1, c2, color, thickness=tl)
57
+ if label:
58
+ tf = max(tl - 2, 1) # font thickness
59
+ s_size = cv2.getTextSize(str('{:.0%}'.format(score)), 0, fontScale=float(tl) / 3, thickness=tf)[0]
60
+ t_size = cv2.getTextSize(label, 0, fontScale=float(tl) / 3, thickness=tf)[0]
61
+ c2 = c1[0] + t_size[0] + s_size[0] + 15, c1[1] - t_size[1] - 3
62
+ cv2.rectangle(img, c1, c2, color, -1) # filled
63
+ cv2.putText(img, '{}: {:.0%}'.format(label, score), (c1[0], c1[1] - 2), 0, float(tl) / 3, [0, 0, 0],
64
+ thickness=tf, lineType=cv2.FONT_HERSHEY_SIMPLEX)
65
+
66
+
67
+ color_list = standard_to_bgr(STANDARD_COLORS)
68
+
69
+
70
+ def display(preds, imgs, obj_list, imshow=True, imwrite=False):
71
+ for i in range(len(imgs)):
72
+ if len(preds[i]['rois']) == 0:
73
+ continue
74
+
75
+ imgs[i] = imgs[i].copy()
76
+
77
+ for j in range(len(preds[i]['rois'])):
78
+ (x1, y1, x2, y2) = preds[i]['rois'][j].astype(np.int)
79
+ obj = obj_list[preds[i]['class_ids'][j]]
80
+ score = float(preds[i]['scores'][j])
81
+
82
+ plot_one_box(imgs[i], [x1, y1, x2, y2], label=obj, score=score,
83
+ color=color_list[get_index_label(obj, obj_list)])
84
+ if imshow:
85
+ cv2.imshow('img', imgs[i])
86
+ cv2.waitKey(0)
87
+
88
+ if imwrite:
89
+ os.makedirs('test/', exist_ok=True)
90
+ cv2.imwrite(f'test/{uuid.uuid4().hex}.jpg', imgs[i])