code: def _parse_ann_line(self, line):
      values = [float(x) for x in line.strip().split()]
      bbox = np.array(values[0:4], dtype=np.float32)
      kps = np.zeros((self.NK, 3), dtype=np.float32)
      ignore = False
      if self.min_size is not None:
          assert not self.test_mode
          w = bbox[2] - bbox[0]
          h = bbox[3] - bbox[1]
          if w < self.min_size or h < self.min_size:
              ignore = True
      if len(values) > 4:
          if len(values) > 5:
              # print(values)
              kps = np.array(values[4:19], dtype=np.float32).reshape(
                  (self.NK, 3)
              )
              for li in range(kps.shape[0]):
                  if (kps[li, :] == -1).all():
                      # assert kps[li][2]==-1
                      kps[li][2] = 0.0  # weight = 0, ignore
                  else:
                      assert kps[li][2] >= 0
                      kps[li][2] = 1.0  # weight
                      # if li==0:
                      #  landmark_num+=1
                      # if kps[li][2]==0.0:#visible
                      #  kps[li][2] = 1.0
                      # else:
                      #  kps[li][2] = 0.0
          else:  # len(values)==5
              if not ignore:
                  ignore = values[4] == 1
      else:
          assert self.test_mode
  
      return dict(bbox=bbox, kps=kps, ignore=ignore, cat="FG")
  
file_path: insightface/detection/scrfd/mmdet/datasets/retinaface.py
imports: import itertools
  import logging
  import os.path
  import tempfile
  from collections import OrderedDict
  import mmcv
  import numpy
  from mmcv.utils import print_log
  from terminaltables import AsciiTable
  from mmdet.core import eval_recalls
  from .builder import DATASETS
  from .custom import CustomDataset
label_desc: Use image node_id 2 for calling the RetinaFaceDataset obj's underlying member method code with example usage: obj._parse_ann_line(line) and returns: dict