code: def poly2rbox_oc_np(poly):
      """convert poly to rbox (0, pi / 2]
  
      Args:
          poly: [x1, y1, x2, y2, x3, y3, x4, y4]
  
      Returns:
          rbox: [cx, cy, w, h, angle]
      """
      points = np.array(poly, dtype=np.float32).reshape((-1, 2))
      (cx, cy), (w, h), angle = cv2.minAreaRect(points)
      # using the new OpenCV Rotated BBox definition since 4.5.1
      # if angle < 0, opencv is older than 4.5.1, angle is in [-90, 0)
      if angle < 0:
          angle += 90
          w, h = h, w
  
      # convert angle to [0, 90)
      if angle == -0.0:
          angle = 0.0
      if angle == 90.0:
          angle = 0.0
          w, h = h, w
  
      angle = angle / 180 * np.pi
      return [cx, cy, w, h, angle]
  
file_path: PaddleDetection/ppdet/modeling/rbox_utils.py
imports: import math
  import paddle
  import numpy
  import cv2
label_desc: Use image node_id 3 for calling a global function with example usage: poly2rbox_oc_np(poly) and returns: list