code: def get_reader(uri, format=None, mode="?", **kwargs):
      """get_reader(uri, format=None, mode='?', **kwargs)
  
      Returns a :class:`.Reader` object which can be used to read data
      and meta data from the specified file.
  
      Parameters
      ----------
      uri : {str, pathlib.Path, bytes, file}
          The resource to load the image from, e.g. a filename, pathlib.Path,
          http address or file object, see the docs for more info.
      format : str
          The format to use to read the file. By default imageio selects
          the appropriate for you based on the filename and its contents.
      mode : {'i', 'I', 'v', 'V', '?'}
          Used to give the reader a hint on what the user expects (default "?"):
          "i" for an image, "I" for multiple images, "v" for a volume,
          "V" for multiple volumes, "?" for don't care.
      kwargs : ...
          Further keyword arguments are passed to the reader. See :func:`.help`
          to see what arguments are available for a particular format.
      """
  
      imopen_args = decypher_format_arg(format)
      imopen_args["legacy_mode"] = True
  
      image_file = imopen(uri, "r" + mode, **imopen_args)
  
      if isinstance(image_file, LegacyPlugin):
          return image_file.legacy_get_reader(**kwargs)
      else:
          return LegacyReader(image_file, **kwargs)
  
imports: import re
  import warnings
  from numbers import Number
  from pathlib import Path
  from typing import Dict
  import numpy
  from imageio.core.legacy_plugin_wrapper import LegacyPlugin
  from imageio.core.util import Array
  from imageio.core.v3_plugin_api import PluginV3
  from .None import formats
  from .config import known_extensions, known_plugins
  from .core import RETURN_BYTES
  from .core.imopen import imopen
label_desc: Use image node_id 6 for calling a global function with example usage: get_reader(uri, format, mode) and returns: image_file, LegacyReader