code: def after_run(self, run_context, run_values):
      results = run_values.results
      global_step = results.get("global_step")
  
      if self._draw_images:
          self._timer.update_last_triggered_step(global_step)
          prediction_dict = results.get("prediction_dict")
          if prediction_dict is not None:
              summaries = image_vis_summaries(
                  prediction_dict,
                  config=self._config,
                  image_visualization_mode=self._image_visualization_mode,
                  image=results.get("image"),
                  gt_bboxes=results.get("gt_bboxes"),
              )
              if self._summary_writer is not None:
                  for summary in summaries:
                      self._summary_writer.add_summary(
                          summary, global_step
                      )
  
      self._next_step = global_step + 1
  
file_path: luminoth/luminoth/utils/hooks/image_vis_hook.py
imports: import tensorflow
  from tensorflow.python.training.summary_io import SummaryWriterCache
  from luminoth.utils.image_vis import image_vis_summaries
label_desc: Use image node_id 4 for calling the ImageVisHook obj's underlying member method code with example usage: obj.after_run(run_context, run_values) without return types