|
- """
- MIT License
- Copyright (c) 2020 Ziqiang
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
- """
- import numpy as np
- import cv2
-
- COLORS_10 = [(144, 238, 144), (178, 34, 34), (221, 160, 221), (0, 255, 0), (0, 128, 0), (210, 105, 30), (220, 20, 60),
- (192, 192, 192), (255, 228, 196), (50, 205, 50), (139, 0, 139), (100, 149, 237), (138, 43, 226), (238, 130, 238),
- (255, 0, 255), (0, 100, 0), (127, 255, 0), (255, 0, 255), (255, 140, 0), (255, 239, 213), (0, 230, 100),
- (199, 21, 133), (124, 252, 0), (147, 112, 219), (106, 90, 205), (176, 196, 222), (65, 105, 225), (173, 255, 47),
- (255, 20, 147), (219, 112, 147), (186, 85, 211), (199, 21, 133), (148, 0, 211), (255, 99, 71), (144, 238, 144),
- (255, 255, 0), (230, 230, 250), (0, 0, 255), (128, 128, 0), (189, 183, 107), (255, 255, 224), (128, 128, 128),
- (105, 105, 105), (64, 224, 208), (205, 133, 63), (0, 128, 128), (72, 209, 204), (139, 69, 19), (255, 245, 238),
- (250, 240, 230), (152, 251, 152), (0, 255, 255), (135, 206, 235), (0, 191, 255), (176, 224, 230), (0, 250, 154),
- (245, 255, 250), (240, 230, 140), (245, 222, 179), (0, 139, 139), (143, 188, 143), (255, 0, 0), (240, 128, 128),
- (102, 205, 170), (60, 179, 113), (46, 139, 87), (165, 42, 42), (178, 34, 34), (175, 238, 238), (255, 248, 220),
- (218, 165, 32), (255, 250, 240), (253, 245, 230), (244, 164, 96), (210, 105, 30)]
-
-
- def draw_bbox(img, box, cls_name, identity=None, offset=(0, 0)):
- """
- draw box of an id
- """
- x1, y1, x2, y2 = [int(i + offset[idx % 2]) for idx, i in enumerate(box)]
- # set color and label text
- color = COLORS_10[identity %
- len(COLORS_10)] if identity is not None else COLORS_10[0]
- label = '{} {}'.format(cls_name, identity)
- # box text and bar
- t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 1, 1)[0]
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
- cv2.rectangle(
- img, (x1, y1), (x1 + t_size[0] + 3, y1 + t_size[1] + 4), color, -1)
- cv2.putText(img, label, (x1, y1 +
- t_size[1] +
- 4), cv2.FONT_HERSHEY_PLAIN, 1, [255, 255, 255], 1)
- return img
-
-
- def draw_bboxes(img, bbox, identities=None, offset=(0, 0)):
- for i, box in enumerate(bbox):
- x1, y1, x2, y2 = [int(i) for i in box]
- x1 += offset[0]
- x2 += offset[0]
- y1 += offset[1]
- y2 += offset[1]
- # box text and bar
- id = int(identities[i]) if identities is not None else 0
- color = COLORS_10[id % len(COLORS_10)]
- label = '{} {}'.format("id", id)
- t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2, 2)[0]
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
- # cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1)
- cv2.putText(img, label, (x1, y1 +
- t_size[1] +
- 4), cv2.FONT_HERSHEY_PLAIN, 2, [255, 255, 255], 2)
- return img
-
-
- def draw_bboxes_conf(img, bbox, conf, identities=None, offset=(0, 0)):
- for i, box in enumerate(bbox):
- x1, y1, x2, y2 = [int(i) for i in box]
- x1 += offset[0]
- x2 += offset[0]
- y1 += offset[1]
- y2 += offset[1]
- # box text and bar
- id = int(identities[i]) if identities is not None else 0
- color = COLORS_10[id % len(COLORS_10)]
- label = '{}|{:.2f}'.format(id, conf[i])
- t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2, 2)[0]
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
- # cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1)
- cv2.putText(img, label, (x1, y1 +
- t_size[1] +
- 4), cv2.FONT_HERSHEY_PLAIN, 2, [255, 255, 255], 2)
- return img
-
-
- def draw_bboxes_conf_cls(
- img,
- bbox,
- conf,
- identities=None,
- offset=(
- 0,
- 0),
- cls_id_=0):
- for i, box in enumerate(bbox):
- x1, y1, x2, y2 = [int(i) for i in box]
- x1 += offset[0]
- x2 += offset[0]
- y1 += offset[1]
- y2 += offset[1]
- # box text and bar
- id = int(identities[i]) if identities is not None else 0
- color = COLORS_10[cls_id_ % len(COLORS_10)]
- label = '{}|{:.2f}'.format(id, conf[i])
- t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2, 2)[0]
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)
- # cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1)
- cv2.putText(img, label, (x1, y1 +
- t_size[1] +
- 4), cv2.FONT_HERSHEY_PLAIN, 2, [255, 255, 255], 2)
- return img
-
-
- def draw_bboxes_color(
- img, bbox, identities=None, color=(
- 255, 0, 0), offset=(
- 0, 0)):
- for i, box in enumerate(bbox):
- x1, y1, x2, y2 = [int(i) for i in box]
- x1 += offset[0]
- x2 += offset[0]
- y1 += offset[1]
- y2 += offset[1]
- # box text and bar
- id = int(identities[i]) if identities is not None else 0
- name = 'det'
- dx = 0
- if color == (0, 0, 255):
- name = 'reg'
- dx = 40
- elif color == (0, 255, 0):
- name = 'pred'
- dx = 20
- label = '{} {}'.format(name, id)
- t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2, 2)[0]
- cv2.rectangle(img, (x1, y1), (x2, y2), color, 3)
- # cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1)
- cv2.putText(img, label, (x1 +
- dx, y1 +
- t_size[1] +
- 4), cv2.FONT_HERSHEY_PLAIN, 2, [255, 255, 255], 2)
-
- return img
-
-
- def softmax(x):
- assert isinstance(x, np.ndarray), "expect x be a numpy array"
- x_exp = np.exp(x * 5)
- return x_exp / x_exp.sum()
-
-
- def softmin(x):
- assert isinstance(x, np.ndarray), "expect x be a numpy array"
- x_exp = np.exp(-x)
- return x_exp / x_exp.sum()
-
-
- if __name__ == '__main__':
- x = np.arange(10) / 10.
- x = np.array([0.5, 0.5, 0.5, 0.6, 1.])
- y = softmax(x)
- z = softmin(x)
- import ipdb
- ipdb.set_trace()
|