code: def report(self, average=False):
      dic = {}
      dic["total"] = (
          round(self.total_time.value() / max(1, self.img_num), 4)
          if average
          else self.total_time.value()
      )
      dic["det"] = (
          round(
              self.module_time["det"].value() / max(1, self.img_num), 4
          )
          if average
          else self.module_time["det"].value()
      )
      dic["mot"] = (
          round(
              self.module_time["mot"].value() / max(1, self.img_num), 4
          )
          if average
          else self.module_time["mot"].value()
      )
      dic["attr"] = (
          round(
              self.module_time["attr"].value() / max(1, self.img_num), 4
          )
          if average
          else self.module_time["attr"].value()
      )
      dic["kpt"] = (
          round(
              self.module_time["kpt"].value() / max(1, self.img_num), 4
          )
          if average
          else self.module_time["kpt"].value()
      )
      dic["video_action"] = self.module_time["video_action"].value()
      dic["skeleton_action"] = (
          round(
              self.module_time["skeleton_action"].value()
              / max(1, self.img_num),
              4,
          )
          if average
          else self.module_time["skeleton_action"].value()
      )
  
      dic["img_num"] = self.img_num
      return dic
  
imports: import time
  import os
  import ast
  import glob
  import yaml
  import copy
  import numpy
  import subprocess
  from python.keypoint_preprocess import EvalAffine, TopDownEvalAffine, expand_crop
label_desc: Use image node_id 4 for calling the PipeTimer obj's underlying member method code with example usage: obj.report(average) and returns: dic