code: def download_image_classification_dataset(
      csv_path, dataset_dir, classes=None, num_workers=None
  ):
      """Downloads the classification dataset specified by the given CSV file,
      which should have the following format::
  
          <label1>,<image_url1>
          <label2>,<image_url2>
          ...
  
      The image filenames are the basenames of the URLs, which are assumed to be
      unique.
  
      The dataset is written to disk in
      :class:`fiftyone.types.FiftyOneImageClassificationDataset` format.
  
      Args:
          csv_path: a CSV file containing the labels and image URLs
          dataset_dir: the directory to write the dataset
          classes (None): an optional list of classes. By default, this will be
              inferred from the contents of ``csv_path``
          num_workers (None): a suggested number of threads to use to download
              images
      """
      labels, image_urls = zip(
          *[
              tuple(line.split(",", 1))
              for line in etau.read_file(csv_path).splitlines()
          ]
      )
  
      if classes is None:
          classes = sorted(set(labels))
  
      labels_map_rev = {label: idx for idx, label in enumerate(classes)}
  
      images_dir = os.path.join(dataset_dir, "data")
      labels_path = os.path.join(dataset_dir, "labels.json")
  
      logger.info("Downloading images to '%s'...", images_dir)
      image_paths = download_images(
          image_urls, images_dir, num_workers=num_workers
      )
  
      labels_dict = {}
      for image_path, label in zip(image_paths, labels):
          uuid = os.path.splitext(os.path.basename(image_path))[0]
          labels_dict[uuid] = labels_map_rev[label]
  
      _labels = {"classes": classes, "labels": labels_dict}
  
      logger.info("Writing labels to '%s'", labels_path)
      etas.write_json(_labels, labels_path)
  
imports: import logging
  import multiprocessing.dummy
  import requests
  import os
  import pathlib
  import urllib
  import eta.core.image
  import eta.core.serial
  import eta.core.utils
  import eta.core.video
  import fiftyone.core.fields
  import fiftyone.core.labels
  import fiftyone.core.utils
label_desc: Use image node_id 4 for calling a global function with example usage: download_image_classification_dataset(csv_path, dataset_dir, classes, num_workers) without return types