code: def update(self, kpt_res, mot_res):
      kpts = kpt_res.get("keypoint")[0]
      bboxes = kpt_res.get("bbox")
      mot_bboxes = mot_res.get("boxes")
      updated_id = set()
  
      for idx in range(len(kpts)):
          tracker_id = mot_bboxes[idx, 0]
          updated_id.add(tracker_id)
  
          kpt_seq = self.keypoint_saver.get(
              tracker_id, KeyPointSequence(self.max_size)
          )
          is_full = kpt_seq.save(kpts[idx], bboxes[idx])
          self.keypoint_saver[tracker_id] = kpt_seq
  
          # Scene1: result should be popped when frames meet max size
          if is_full:
              self.id_to_pop.add(tracker_id)
              self.flag_to_pop = True
  
      # Scene2: result of a lost tracker should be popped
      interrupted_id = set(self.keypoint_saver.keys()) - updated_id
      if len(interrupted_id) > 0:
          self.flag_to_pop = True
          self.id_to_pop.update(interrupted_id)
  
file_path: PaddleDetection/deploy/pipeline/pphuman/action_utils.py
label_desc: Use image node_id 3 for calling the KeyPointBuff obj's underlying member method code with example usage: obj.update(kpt_res, mot_res) without return types