code: def eval_recalls(
      gts,
      proposals,
      proposal_nums=None,
      iou_thrs=0.5,
      logger=None,
      use_legacy_coordinate=False,
  ):
      """Calculate recalls.
  
      Args:
          gts (list[ndarray]): a list of arrays of shape (n, 4)
          proposals (list[ndarray]): a list of arrays of shape (k, 4) or (k, 5)
          proposal_nums (int | Sequence[int]): Top N proposals to be evaluated.
          iou_thrs (float | Sequence[float]): IoU thresholds. Default: 0.5.
          logger (logging.Logger | str | None): The way to print the recall
              summary. See `mmengine.logging.print_log()` for details.
              Default: None.
          use_legacy_coordinate (bool): Whether use coordinate system
              in mmdet v1.x. "1" was added to both height and width
              which means w, h should be
              computed as 'x2 - x1 + 1` and 'y2 - y1 + 1'. Default: False.
  
  
      Returns:
          ndarray: recalls of different ious and proposal nums
      """
  
      img_num = len(gts)
      assert img_num == len(proposals)
      proposal_nums, iou_thrs = set_recall_param(
          proposal_nums, iou_thrs
      )
      all_ious = []
      for i in range(img_num):
          if proposals[i].ndim == 2 and proposals[i].shape[1] == 5:
              scores = proposals[i][:, 4]
              sort_idx = np.argsort(scores)[::-1]
              img_proposal = proposals[i][sort_idx, :]
          else:
              img_proposal = proposals[i]
          prop_num = min(img_proposal.shape[0], proposal_nums[-1])
          if gts[i] is None or gts[i].shape[0] == 0:
              ious = np.zeros(
                  (0, img_proposal.shape[0]), dtype=np.float32
              )
          else:
              ious = bbox_overlaps(
                  gts[i],
                  img_proposal[:prop_num, :4],
                  use_legacy_coordinate=use_legacy_coordinate,
              )
          all_ious.append(ious)
      all_ious = np.array(all_ious)
      recalls = _recalls(all_ious, proposal_nums, iou_thrs)
  
      print_recall_summary(
          recalls, proposal_nums, iou_thrs, logger=logger
      )
      return recalls
  
file_path: mmdetection/mmdet/evaluation/functional/recall.py
imports: from collections.abc import Sequence
  import numpy
  from mmengine.logging import print_log
  from terminaltables import AsciiTable
  from .bbox_overlaps import bbox_overlaps
label_desc: Use image node_id 3 for calling a global function with example usage: eval_recalls(gts, proposals, proposal_nums, iou_thrs, logger, use_legacy_coordinate) and returns: recalls