class_docstr: OpenImagesReader supports reading the images directly from the original
  data source which is hosted in Google Cloud Storage.
  
  Before using it you have to request and configure access following the
  instructions here: https://github.com/cvdfoundation/open-images-dataset
docstr: Args:
      data_dir: Path to base directory where to find all the necessary
          files and folders.
      split: Split to use, it is used for reading the appropiate
          annotations.
      download_threads: Number of threads to use for downloading
          images.
      only_classes: String with classes ids to be used as filter for
          all the available classes. If the string contains ',' it will
          split the string using them.
docstr_tok: ["Args",":","data_dir",":","Path","to","base","directory","where","to","find","all","the","necessary","files","and","folders",".","split",":","Split","to","use",",","it","is","used","for","reading","the","appropiate","annotations",".","download_threads",":","Number","of","threads","to","use","for","downloading","images",".","only_classes",":","String","with","classes","ids","to","be","used","as","filter","for","all","the","available","classes",".","If","the","string","contains","'",",","'","it","will","split","the","string","using","them","."]
code: def __init__(self, data_dir, split, download_threads=25, **kwargs):
      """
      Args:
          data_dir: Path to base directory where to find all the necessary
              files and folders.
          split: Split to use, it is used for reading the appropiate
              annotations.
          download_threads: Number of threads to use for downloading
              images.
          only_classes: String with classes ids to be used as filter for
              all the available classes. If the string contains ',' it will
              split the string using them.
      """
      super(OpenImagesReader, self).__init__(**kwargs)
      self._data_dir = data_dir
      self._split = split
      self._download_threads = download_threads
  
      self._image_ids = None
      self.desc_by_label = {}
  
      self.yielded_records = 0
      self.errors = 0
      self._total_queued = 0
      # Flag to notify threads if the execution is halted.
      self._alive = True
  
imports: import csv
  import os
  import signal
  import six
  import sys
  import tensorflow
  import threading
  from six.moves import queue
  from PIL import Image
  from luminoth.tools.dataset.readers import InvalidDataDirectory
  from luminoth.tools.dataset.readers.object_detection import ObjectDetectionReader
  from luminoth.utils.dataset import read_image
label_desc: Use image node_id 1 to create a new OpenImagesReader object from inherited base classes: ObjectDetectionReader with example: obj = OpenImagesReader(data_dir, split, download_threads)