text: #-*-coding:utf-8-*-
  # date:2020-04-11
  # Author: Eric.Lee
  # function: common utils
  
  import os
  import shutil
  import cv2
  import numpy as np
  import json
  
  def mkdir_(path, flag_rm=False):
      if os.path.exists(path):
          if flag_rm == True:
              shutil.rmtree(path)
              os.mkdir(path)
              print('remove {} done ~ '.format(path))
      else:
          os.mkdir(path)
  
  def plot_box(bbox, img, color=None, label=None, line_thickness=None):
      tl = line_thickness or round(0.002 * max(img.shape[0:2])) + 1
      color = color or [random.randint(0, 255) for _ in range(3)]
      c1, c2 = (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3]))
      cv2.rectangle(img, c1, c2, color, thickness=tl)# 目标的bbox
      if label:
          tf = max(tl - 2, 1)
          t_size = cv2.getTextSize(label, 0, fontScale=tl / 3, thickness=tf)[0] # label size
          c2 = c1[0] + t_size[0], c1[1] - t_size[1] - 3 # 字体的bbox
          cv2.rectangle(img, c1, c2, color, -1)  # label 矩形填充
          # 文本绘制
          cv2.putText(img, label, (c1[0], c1[1] - 2), 0, tl / 4, [225, 255, 255],thickness=tf, lineType=cv2.LINE_AA)
  
  class JSON_Encoder(json.JSONEncoder):
      def default(self, obj):
          if isinstance(obj, np.integer):
              return int(obj)
          elif isinstance(obj, np.floating):
              return float(obj)
          elif isinstance(obj, np.ndarray):
              return obj.tolist()
          else:
              return super(JSON_Encoder, self).default(obj)
  