code: def get_rotate_crop_image(img, box):
      """
      img_height, img_width = img.shape[0:2]
      left = int(np.min(points[:, 0]))
      right = int(np.max(points[:, 0]))
      top = int(np.min(points[:, 1]))
      bottom = int(np.max(points[:, 1]))
      img_crop = img[top:bottom, left:right, :].copy()
      points[:, 0] = points[:, 0] - left
      points[:, 1] = points[:, 1] - top
      """
      points = []
      for i in range(4):
          points.append([box[2 * i], box[2 * i + 1]])
      points = np.array(points, dtype=np.float32)
      img = img.astype(np.float32)
      assert len(points) == 4, "shape of points must be 4*2"
      img_crop_width = int(
          max(
              np.linalg.norm(points[0] - points[1]),
              np.linalg.norm(points[2] - points[3]),
          )
      )
      img_crop_height = int(
          max(
              np.linalg.norm(points[0] - points[3]),
              np.linalg.norm(points[1] - points[2]),
          )
      )
      pts_std = np.float32(
          [
              [0, 0],
              [img_crop_width, 0],
              [img_crop_width, img_crop_height],
              [0, img_crop_height],
          ]
      )
      M = cv2.getPerspectiveTransform(points, pts_std)
      dst_img = cv2.warpPerspective(
          img,
          M,
          (img_crop_width, img_crop_height),
          borderMode=cv2.BORDER_REPLICATE,
          flags=cv2.INTER_CUBIC,
      )
      dst_img_height, dst_img_width = dst_img.shape[0:2]
      if dst_img_height * 1.0 / dst_img_width >= 1.5:
          dst_img = np.rot90(dst_img)
      return dst_img
  
file_path: PaddleOCR/deploy/fastdeploy/serving/fastdeploy_serving/models/det_postprocess/1/model.py
imports: import json
  import numpy
  import time
  import math
  import cv2
  import fastdeploy
  import triton_python_backend_utils
label_desc: Use image node_id 1 for calling a global function with example usage: get_rotate_crop_image(img, box) and returns: dst_img