|
import cv2 |
|
import numpy as np |
|
|
|
from util.utils import renorm |
|
from util.misc import color_sys |
|
|
|
_color_getter = color_sys(100) |
|
|
|
|
|
def add_box_to_img(img, boxes, colorlist, brands=None): |
|
"""[summary] |
|
|
|
Args: |
|
img ([type]): np.array, H,W,3 |
|
boxes ([type]): list of list(4) |
|
colorlist: list of colors. |
|
brands: text. |
|
|
|
Return: |
|
img: np.array. H,W,3. |
|
""" |
|
H, W = img.shape[:2] |
|
for _i, (box, color) in enumerate(zip(boxes, colorlist)): |
|
x, y, w, h = box[0] * W, box[1] * H, box[2] * W, box[3] * H |
|
img = cv2.rectangle(img.copy(), (int(x-w/2), int(y-h/2)), (int(x+w/2), int(y+h/2)), color, 2) |
|
if brands is not None: |
|
brand = brands[_i] |
|
org = (int(x-w/2), int(y+h/2)) |
|
font = cv2.FONT_HERSHEY_SIMPLEX |
|
fontScale = 0.5 |
|
thickness = 1 |
|
img = cv2.putText(img.copy(), str(brand), org, font, |
|
fontScale, color, thickness, cv2.LINE_AA) |
|
return img |
|
|
|
def plot_dual_img(img, boxes, labels, idxs, probs=None): |
|
"""[summary] |
|
|
|
Args: |
|
img ([type]): 3,H,W. tensor. |
|
boxes (): tensor(Kx4) or list of tensor(1x4). |
|
labels ([type]): list of ints. |
|
idxs ([type]): list of ints. |
|
probs (optional): listof floats. |
|
|
|
Returns: |
|
img_classcolor: np.array. H,W,3. img with class-wise label. |
|
img_seqcolor: np.array. H,W,3. img with seq-wise label. |
|
""" |
|
|
|
boxes = [i.cpu().tolist() for i in boxes] |
|
img = (renorm(img.cpu()).permute(1,2,0).numpy() * 255).astype(np.uint8) |
|
|
|
class_colors = [_color_getter(i) for i in labels] |
|
if probs is not None: |
|
brands = ["{},{:.2f}".format(j,k) for j,k in zip(labels, probs)] |
|
else: |
|
brands = labels |
|
img_classcolor = add_box_to_img(img, boxes, class_colors, brands=brands) |
|
|
|
seq_colors = [_color_getter((i * 11) % 100) for i in idxs] |
|
img_seqcolor = add_box_to_img(img, boxes, seq_colors, brands=idxs) |
|
return img_classcolor, img_seqcolor |
|
|
|
|
|
def plot_raw_img(img, boxes, labels): |
|
"""[summary] |
|
|
|
Args: |
|
img ([type]): 3,H,W. tensor. |
|
boxes ([type]): Kx4. tensor |
|
labels ([type]): K. tensor. |
|
|
|
return: |
|
img: np.array. H,W,3. img with bbox annos. |
|
|
|
""" |
|
img = (renorm(img.cpu()).permute(1,2,0).numpy() * 255).astype(np.uint8) |
|
H, W = img.shape[:2] |
|
for box, label in zip(boxes.tolist(), labels.tolist()): |
|
x, y, w, h = box[0] * W, box[1] * H, box[2] * W, box[3] * H |
|
|
|
img = cv2.rectangle(img.copy(), (int(x-w/2), int(y-h/2)), (int(x+w/2), int(y+h/2)), _color_getter(label), 2) |
|
|
|
org = (int(x-w/2), int(y+h/2)) |
|
font = cv2.FONT_HERSHEY_SIMPLEX |
|
fontScale = 1 |
|
thickness = 1 |
|
img = cv2.putText(img.copy(), str(label), org, font, |
|
fontScale, _color_getter(label), thickness, cv2.LINE_AA) |
|
|
|
return img |