code: def _make_kitti_detection_row(detection, frame_size):
      cols = [
          detection.label.replace(" ", "_"),
          detection.get_attribute_value("truncated", 0),
          detection.get_attribute_value("occluded", 0),
          detection.get_attribute_value("alpha", 0),
      ]
  
      width, height = frame_size
      x, y, w, h = detection.bounding_box
      cols.extend(
          [
              int(round(x * width)),
              int(round(y * height)),
              int(round((x + w) * width)),
              int(round((y + h) * height)),
          ]
      )
  
      dimensions = detection.get_attribute_value("dimensions", None)
      if dimensions is not None:
          dimensions = dimensions.tolist()
      else:
          dimensions = [0, 0, 0]
  
      cols.extend(dimensions)
  
      location = detection.get_attribute_value("location", None)
      if location is not None:
          location = location.tolist()
      else:
          location = [0, 0, 0]
  
      cols.extend(location)
  
      rotation_y = detection.get_attribute_value("rotation_y", 0)
      cols.append(rotation_y)
  
      if detection.confidence is not None:
          cols.append(detection.confidence)
  
      return " ".join(map(str, cols))
  
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 6 for calling a global function with example usage: _make_kitti_detection_row(detection, frame_size) and returns: str