code: def random_fonts(
      self, fonts: Optional[List[Tuple[Any, Optional[str]]]]
  ) -> Iterator[Tuple[Any, List[str]]]:
      fonts_and_chars = fonts or [(font, None) for font in CV2_FONTS]
      while True:
          font_idx = random.randint(0, len(fonts_and_chars) - 1)
          font, chars_path = fonts_and_chars[font_idx]
          if chars_path is not None:
              with pathmgr.open(chars_path, "rb") as f:
                  chars = [chr(c) for c in pickle.load(f)]
          else:
              chars = list(string.ascii_letters + string.punctuation)
          yield font, chars
  
file_path: AugLy/augly/video/augmenters/cv2/text.py
imports: import pickle
  import random
  import string
  from typing import Any, Iterator, List, Optional, Tuple
  import cv2
  import numpy
  from augly.utils import pathmgr
  from augly.video.augmenters.cv2.base_augmenter import BaseCV2Augmenter
  from PIL import Image, ImageDraw, ImageFont
label_desc: Use image node_id 3 for calling the VideoDistractorByText obj's underlying member method code with example usage: obj.random_fonts(fonts) without return types