code: def load_kitti_detection_annotations(
      txt_path, frame_size, extra_attrs=True
  ):
      """Loads the KITTI detection annotations from the given TXT file.
  
      See :ref:`this page <KITTIDetectionDataset-import>` for format details.
  
      Args:
          txt_path: the path to the annotations TXT file
          frame_size: the ``(width, height)`` of the image
          extra_attrs (True): whether to load extra annotation attributes onto
              the imported labels. Supported values are:
  
              -   ``True``: load all extra attributes found
              -   ``False``: do not load extra attributes
              -   a name or list of names of specific attributes to load
  
      Returns:
          a :class:`fiftyone.core.detections.Detections` instance
      """
      if extra_attrs == True:
          extra_attrs = {
              "truncated",
              "occluded",
              "alpha",
              "dimensions",
              "location",
              "rotation_y",
          }
      elif extra_attrs == False:
          extra_attrs = set()
      elif etau.is_str(extra_attrs):
          extra_attrs = {extra_attrs}
      else:
          extra_attrs = set(extra_attrs)
  
      detections = []
      with open(txt_path) as f:
          reader = csv.reader(f, delimiter=" ")
          for row in reader:
              detections.append(
                  _parse_kitti_detection_row(
                      row, frame_size, extra_attrs
                  )
              )
  
      return fol.Detections(detections=detections)
  
imports: import csv
  import logging
  import struct
  import os
  import numpy
  import eta.core.utils
  import eta.core.web
  import fiftyone
  import fiftyone.core.labels
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.core.utils
  import fiftyone.utils.data
label_desc: Use image node_id 1 for calling a global function with example usage: load_kitti_detection_annotations(txt_path, frame_size, extra_attrs) and returns: fol