code: def run(generator, args, anchor_params, pyramid_levels):
      """Main loop.
  
      Args
          generator: The generator to debug.
          args: parseargs args object.
      """
      # display images, one at a time
      i = 0
      while True:
          # load the data
          image = generator.load_image(i)
          annotations = generator.load_annotations(i)
          if len(annotations["labels"]) > 0:
              # apply random transformations
              if args.random_transform:
                  (
                      image,
                      annotations,
                  ) = generator.random_transform_group_entry(
                      image, annotations
                  )
                  (
                      image,
                      annotations,
                  ) = generator.random_visual_effect_group_entry(
                      image, annotations
                  )
  
              # resize the image and annotations
              if args.resize:
                  image, image_scale = generator.resize_image(image)
                  annotations["bboxes"] *= image_scale
  
              anchors = anchors_for_shape(
                  image.shape,
                  anchor_params=anchor_params,
                  pyramid_levels=pyramid_levels,
              )
              positive_indices, _, max_indices = compute_gt_annotations(
                  anchors, annotations["bboxes"]
              )
  
              # draw anchors on the image
              if args.anchors:
                  draw_boxes(
                      image,
                      anchors[positive_indices],
                      (255, 255, 0),
                      thickness=1,
                  )
  
              # draw annotations on the image
              if args.show_annotations:
                  # draw annotations in red
                  draw_annotations(
                      image,
                      annotations,
                      color=(0, 0, 255),
                      label_to_name=generator.label_to_name,
                  )
  
                  # draw regressed anchors in green to override most red annotations
                  # result is that annotations without anchors are red, with anchors are green
                  draw_boxes(
                      image,
                      annotations["bboxes"][
                          max_indices[positive_indices], :
                      ],
                      (0, 255, 0),
                  )
  
              # display name on the image
              if args.display_name:
                  draw_caption(
                      image,
                      [0, image.shape[0]],
                      os.path.basename(generator.image_path(i)),
                  )
  
          # write to file and advance if no-gui selected
          if args.no_gui:
              output_path = make_output_path(
                  args.output_dir,
                  generator.image_path(i),
                  flatten=args.flatten_output,
              )
              os.makedirs(os.path.dirname(output_path), exist_ok=True)
              cv2.imwrite(output_path, image)
              i += 1
              if i == generator.size():  # have written all images
                  break
              else:
                  continue
  
          # if we are using the GUI, then show an image
          cv2.imshow("Image", image)
          key = cv2.waitKeyEx()
  
          # press right for next image and left for previous (linux or windows, doesn't work for macOS)
          # if you run macOS, press "n" or "m" (will also work on linux and windows)
  
          if key in rightkeys:
              i = (i + 1) % generator.size()
          if key in leftkeys:
              i -= 1
              if i < 0:
                  i = generator.size() - 1
  
          # press q or Esc to quit
          if (key == ord("q")) or (key == 27):
              return False
  
      return True
  
file_path: ImageAI/imageai_tf_deprecated/Detection/keras_retinanet/bin/debug.py
imports: import argparse
  import os
  import sys
  import cv2
  from ..preprocessing.pascal_voc import PascalVocGenerator
  from ..preprocessing.csv_generator import CSVGenerator
  from ..preprocessing.kitti import KittiGenerator
  from ..preprocessing.open_images import OpenImagesGenerator
  from ..utils.anchors import anchors_for_shape, compute_gt_annotations
  from ..utils.config import read_config_file, parse_anchor_parameters, parse_pyramid_levels
  from ..utils.image import random_visual_effect_generator
  from ..utils.tf_version import check_tf_version
  from ..utils.transform import random_transform_generator
  from ..utils.visualization import draw_annotations, draw_boxes, draw_caption
label_desc: Use image node_id 3 for calling a global function with example usage: run(generator, args, anchor_params, pyramid_levels) and returns: True, False