class_docstr: Tracker for OC-SORT.
  
  Args:
      motion (dict): Configuration of motion. Defaults to None.
      obj_score_thrs (float): Detection score threshold for matching objects.
          Defaults to 0.3.
      init_track_thr (float): Detection score threshold for initializing a
          new tracklet. Defaults to 0.7.
      weight_iou_with_det_scores (bool): Whether using detection scores to
          weight IOU which is used for matching. Defaults to True.
      match_iou_thr (float): IOU distance threshold for matching between two
          frames. Defaults to 0.3.
      num_tentatives (int, optional): Number of continuous frames to confirm
          a track. Defaults to 3.
      vel_consist_weight (float): Weight of the velocity consistency term in
          association (OCM term in the paper).
      vel_delta_t (int): The difference of time step for calculating of the
          velocity direction of tracklets.
      init_cfg (dict or list[dict], optional): Initialization config dict.
          Defaults to None.
docstr: association for Observation-Centric Recovery.
  
  As try to recover tracks from being lost whose estimated velocity is
  out- to-date, we use IoU-only matching strategy.
  
  Args:
      track_obs (Tensor): the list of historical associated
          detections of tracks
      det_bboxes (Tensor): of shape (N, 5), unmatched detections
      det_labels (Tensor): of shape (N,)
      det_scores (Tensor): of shape (N,)
      weight_iou_with_det_scores (bool, optional): Whether using
          detection scores to weight IOU which is used for matching.
          Defaults to False.
      match_iou_thr (float, optional): Matching threshold.
          Defaults to 0.5.
  
  Returns:
      tuple(int): The assigning ids.
docstr_tok: ["association","for","Observation-Centric","Recovery",".","As","try","to","recover","tracks","from","being","lost","whose","estimated","velocity","is","out-","to-date",",","we","use","IoU-only","matching","strategy",".","Args",":","track_obs","(","Tensor",")",":","the","list","of","historical","associated","detections","of","tracks","det_bboxes","(","Tensor",")",":","of","shape","(","N",",","5",")",",","unmatched","detections","det_labels","(","Tensor",")",":","of","shape","(","N",",",")","det_scores","(","Tensor",")",":","of","shape","(","N",",",")","weight_iou_with_det_scores","(","bool",",","optional",")",":","Whether","using","detection","scores","to","weight","IOU","which","is","used","for","matching",".","Defaults","to","False",".","match_iou_thr","(","float",",","optional",")",":","Matching","threshold",".","Defaults","to","0.5",".","Returns",":","tuple","(","int",")",":","The","assigning","ids","."]
code: def ocr_assign_ids(
      self,
      track_obs: torch.Tensor,
      last_track_labels: torch.Tensor,
      det_bboxes: torch.Tensor,
      det_labels: torch.Tensor,
      det_scores: torch.Tensor,
      weight_iou_with_det_scores: Optional[bool] = False,
      match_iou_thr: Optional[float] = 0.5,
  ):
      """association for Observation-Centric Recovery.
  
      As try to recover tracks from being lost whose estimated velocity is
      out- to-date, we use IoU-only matching strategy.
  
      Args:
          track_obs (Tensor): the list of historical associated
              detections of tracks
          det_bboxes (Tensor): of shape (N, 5), unmatched detections
          det_labels (Tensor): of shape (N,)
          det_scores (Tensor): of shape (N,)
          weight_iou_with_det_scores (bool, optional): Whether using
              detection scores to weight IOU which is used for matching.
              Defaults to False.
          match_iou_thr (float, optional): Matching threshold.
              Defaults to 0.5.
  
      Returns:
          tuple(int): The assigning ids.
      """
      # compute distance
      ious = bbox_overlaps(track_obs, det_bboxes)
      if weight_iou_with_det_scores:
          ious *= det_scores
  
      # support multi-class association
      cate_match = det_labels[None, :] == last_track_labels[:, None]
      # to avoid det and track of different categories are matched
      cate_cost = (1 - cate_match.int()) * 1e6
  
      dists = (1 - ious + cate_cost).cpu().numpy()
  
      # bipartite match
      if dists.size > 0:
          cost, row, col = lap.lapjv(
              dists, extend_cost=True, cost_limit=1 - match_iou_thr
          )
      else:
          row = np.zeros(len(track_obs)).astype(np.int32) - 1
          col = np.zeros(len(det_bboxes)).astype(np.int32) - 1
      return row, col
  
imports: from typing import List, Optional, Tuple
  import numpy
  import torch
  from addict import Dict
  from mmengine.structures import InstanceData
  from mmdet.registry import MODELS
  from mmdet.structures import DetDataSample
  from mmdet.structures.bbox import bbox_cxcyah_to_xyxy, bbox_overlaps, bbox_xyxy_to_cxcyah
  from .sort_tracker import SORTTracker
label_desc: Use image node_id 10 for calling the OCSORTTracker obj's underlying member method code with example usage: obj.ocr_assign_ids(track_obs, last_track_labels, det_bboxes, det_labels, det_scores, weight_iou_with_det_scores, match_iou_thr) and returns: row,  col