class_docstr: COCO dataset for bottom-up pose estimation. 
  
  The dataset loads raw features and apply specified transforms
  to return a dict containing the image tensors and other information.
  
  COCO keypoint indexes::
  
      0: 'nose',
      1: 'left_eye',
      2: 'right_eye',
      3: 'left_ear',
      4: 'right_ear',
      5: 'left_shoulder',
      6: 'right_shoulder',
      7: 'left_elbow',
      8: 'right_elbow',
      9: 'left_wrist',
      10: 'right_wrist',
      11: 'left_hip',
      12: 'right_hip',
      13: 'left_knee',
      14: 'right_knee',
      15: 'left_ankle',
      16: 'right_ankle'
  
  Args:
      dataset_dir (str): Root path to the dataset.
      anno_path (str): Relative path to the annotation file.
      image_dir (str): Path to a directory where images are held.
          Default: None.
      num_joints (int): keypoint numbers
      transform (composed(operators)): A sequence of data transforms.
      shard (list): [rank, worldsize], the distributed env params
      test_mode (bool): Store True when building test or
          validation dataset. Default: False.
docstr: Get anno for a single image.
  
  Args:
      idx (int): image idx
  
  Returns:
      dict: info for model training
docstr_tok: ["Get","anno","for","a","single","image",".","Args",":","idx","(","int",")",":","image","idx","Returns",":","dict",":","info","for","model","training"]
code: def _get_imganno(self, idx):
      """Get anno for a single image.
  
      Args:
          idx (int): image idx
  
      Returns:
          dict: info for model training
      """
      coco = self.coco
      img_id = self.img_ids[idx]
      ann_ids = coco.getAnnIds(imgIds=img_id)
      anno = coco.loadAnns(ann_ids)
  
      anno = [
          obj
          for obj in anno
          if obj["iscrowd"] == 0 and obj["num_keypoints"] > 0
      ]
  
      db_rec = {}
      joints, orgsize = self._get_joints(anno, idx)
      db_rec["gt_joints"] = joints
      db_rec["im_shape"] = orgsize
  
      if self.return_bbox:
          db_rec["gt_bbox"] = self._get_bboxs(anno, idx)
  
      if self.return_class:
          db_rec["gt_class"] = self._get_labels(anno, idx)
  
      if self.return_area:
          db_rec["gt_areas"] = self._get_areas(anno, idx)
  
      if self.return_mask:
          db_rec["mask"] = self._get_mask(anno, idx)
  
      db_rec["im_id"] = img_id
      db_rec["image_file"] = os.path.join(
          self.img_prefix, self.id2name[img_id]
      )
  
      return db_rec
  
imports: import os
  import cv2
  import numpy
  import json
  import copy
  import pycocotools
  from pycocotools.coco import COCO
  from .dataset import DetDataset
  from ppdet.core.workspace import register, serializable
label_desc: Use image node_id 4 for calling the KeypointBottomUpCocoDataset obj's underlying member method code with example usage: obj._get_imganno(idx) and returns: db_rec