class_docstr: Class that performs object detection on images.
  
  The API expects a TFLite model with mandatory TFLite Model Metadata.
  
  Input tensor:
    (kTfLiteUInt8/kTfLiteFloat32)
    - image input of size `[batch x height x width x channels]`.
    - batch inference is not supported (`batch` is required to be 1).
    - only RGB inputs are supported (`channels` is required to be 3).
    - if type is kTfLiteFloat32, NormalizationOptions are required to be
      attached to the metadata for input normalization.
  Output tensors must be the 4 outputs of a `DetectionPostProcess` op, i.e:
    (kTfLiteFloat32)
    - locations tensor of size `[num_results x 4]`, the inner array
      representing bounding boxes in the form [top, left, right, bottom].
    - BoundingBoxProperties are required to be attached to the metadata
      and must specify type=BOUNDARIES and coordinate_type=RATIO.
    (kTfLiteFloat32)
    - classes tensor of size `[num_results]`, each value representing the
      integer index of a class.
    - optional (but recommended) label map(s) can be attached as
      AssociatedFile-s with type TENSOR_VALUE_LABELS, containing one label per
      line. The first such AssociatedFile (if any) is used to fill the
      `class_name` field of the results. The `display_name` field is filled
      from the AssociatedFile (if any) whose locale matches the
      `display_names_locale` field of the `ObjectDetectorOptions` used at
      creation time ("en" by default, i.e. English). If none of these are
      available, only the `index` field of the results will be filled.
    (kTfLiteFloat32)
    - scores tensor of size `[num_results]`, each value representing the score
      of the detected object.
    - optional score calibration can be attached using ScoreCalibrationOptions
      and an AssociatedFile with type TENSOR_AXIS_SCORE_CALIBRATION. See
      metadata_schema.fbs [1] for more details.
    (kTfLiteFloat32)
    - integer num_results as a tensor of size `[1]`
  
  An example of such model can be found at:
  https://tfhub.dev/google/lite-model/object_detection/mobile_object_localizer_v1/1/metadata/1
  
  [1]:
  https://github.com/google/mediapipe/blob/6cdc6443b6a7ed662744e2a2ce2d58d9c83e6d6f/mediapipe/tasks/metadata/metadata_schema.fbs#L456
class_docstr_tok: ["Class","that","performs","object","detection","on","images",".","The","API","expects","a","TFLite","model","with","mandatory","TFLite","Model","Metadata",".","Input","tensor",":","(","kTfLiteUInt8\/kTfLiteFloat32",")","-","image","input","of","size","`","[","batch","x","height","x","width","x","channels","]","`",".","-","batch","inference","is","not","supported","(","`","batch","`","is","required","to","be","1",")",".","-","only","RGB","inputs","are","supported","(","`","channels","`","is","required","to","be","3",")",".","-","if","type","is","kTfLiteFloat32",",","NormalizationOptions","are","required","to","be","attached","to","the","metadata","for","input","normalization",".","Output","tensors","must","be","the","4","outputs","of","a","`","DetectionPostProcess","`","op",",","i.e",":","(","kTfLiteFloat32",")","-","locations","tensor","of","size","`","[","num_results","x","4","]","`",",","the","inner","array","representing","bounding","boxes","in","the","form","[","top",",","left",",","right",",","bottom","]",".","-","BoundingBoxProperties","are","required","to","be","attached","to","the","metadata","and","must","specify","type=BOUNDARIES","and","coordinate_type=RATIO",".","(","kTfLiteFloat32",")","-","classes","tensor","of","size","`","[","num_results","]","`",",","each","value","representing","the","integer","index","of","a","class",".","-","optional","(","but","recommended",")","label","map","(","s",")","can","be","attached","as","AssociatedFile-s","with","type","TENSOR_VALUE_LABELS",",","containing","one","label","per","line",".","The","first","such","AssociatedFile","(","if","any",")","is","used","to","fill","the","`","class_name","`","field","of","the","results",".","The","`","display_name","`","field","is","filled","from","the","AssociatedFile","(","if","any",")","whose","locale","matches","the","`","display_names_locale","`","field","of","the","`","ObjectDetectorOptions","`","used","at","creation","time","(","``","en","''","by","default",",","i.e",".","English",")",".","If","none","of","these","are","available",",","only","the","`","index","`","field","of","the","results","will","be","filled",".","(","kTfLiteFloat32",")","-","scores","tensor","of","size","`","[","num_results","]","`",",","each","value","representing","the","score","of","the","detected","object",".","-","optional","score","calibration","can","be","attached","using","ScoreCalibrationOptions","and","an","AssociatedFile","with","type","TENSOR_AXIS_SCORE_CALIBRATION",".","See","metadata_schema.fbs","[","1","]","for","more","details",".","(","kTfLiteFloat32",")","-","integer","num_results","as","a","tensor","of","size","`","[","1","]","`","An","example","of","such","model","can","be","found","at",":","https",":","\/\/tfhub.dev\/google\/lite-model\/object_detection\/mobile_object_localizer_v1\/1\/metadata\/1","[","1","]",":","https",":","\/\/github.com\/google\/mediapipe\/blob\/6cdc6443b6a7ed662744e2a2ce2d58d9c83e6d6f\/mediapipe\/tasks\/metadata\/metadata_schema.fbs","#","L456"]
docstr: Creates the `ObjectDetector` object from object detector options.
  
  Args:
    options: Options for the object detector task.
  
  Returns:
    `ObjectDetector` object that's created from `options`.
  
  Raises:
    ValueError: If failed to create `ObjectDetector` object from
      `ObjectDetectorOptions` such as missing the model.
    RuntimeError: If other types of error occurred.
docstr_tok: ["Creates","the","`","ObjectDetector","`","object","from","object","detector","options",".","Args",":","options",":","Options","for","the","object","detector","task",".","Returns",":","`","ObjectDetector","`","object","that","'s","created","from","`","options","`",".","Raises",":","ValueError",":","If","failed","to","create","`","ObjectDetector","`","object","from","`","ObjectDetectorOptions","`","such","as","missing","the","model",".","RuntimeError",":","If","other","types","of","error","occurred","."]
code: def create_from_options(
      cls, options: ObjectDetectorOptions
  ) -> "ObjectDetector":
      """Creates the `ObjectDetector` object from object detector options.
  
      Args:
        options: Options for the object detector task.
  
      Returns:
        `ObjectDetector` object that's created from `options`.
  
      Raises:
        ValueError: If failed to create `ObjectDetector` object from
          `ObjectDetectorOptions` such as missing the model.
        RuntimeError: If other types of error occurred.
      """
  
      def packets_callback(
          output_packets: Mapping[str, packet_module.Packet]
      ):
          if output_packets[_IMAGE_OUT_STREAM_NAME].is_empty():
              return
          image = packet_getter.get_image(
              output_packets[_IMAGE_OUT_STREAM_NAME]
          )
          if output_packets[_DETECTIONS_OUT_STREAM_NAME].is_empty():
              empty_packet = output_packets[_DETECTIONS_OUT_STREAM_NAME]
              options.result_callback(
                  ObjectDetectorResult([]),
                  image,
                  empty_packet.timestamp.value
                  // _MICRO_SECONDS_PER_MILLISECOND,
              )
              return
          detection_proto_list = packet_getter.get_proto_list(
              output_packets[_DETECTIONS_OUT_STREAM_NAME]
          )
          detection_result = ObjectDetectorResult(
              [
                  detections_module.Detection.create_from_pb2(result)
                  for result in detection_proto_list
              ]
          )
          timestamp = output_packets[_IMAGE_OUT_STREAM_NAME].timestamp
          options.result_callback(detection_result, image, timestamp)
  
      task_info = _TaskInfo(
          task_graph=_TASK_GRAPH_NAME,
          input_streams=[
              ":".join([_IMAGE_TAG, _IMAGE_IN_STREAM_NAME]),
              ":".join([_NORM_RECT_TAG, _NORM_RECT_STREAM_NAME]),
          ],
          output_streams=[
              ":".join([_DETECTIONS_TAG, _DETECTIONS_OUT_STREAM_NAME]),
              ":".join([_IMAGE_TAG, _IMAGE_OUT_STREAM_NAME]),
          ],
          task_options=options,
      )
      return cls(
          task_info.generate_graph_config(
              enable_flow_limiting=options.running_mode
              == _RunningMode.LIVE_STREAM
          ),
          options.running_mode,
          packets_callback if options.result_callback else None,
      )
  
imports: import dataclasses
  from typing import Callable, List, Mapping, Optional
  from mediapipe.python import packet_creator
  from mediapipe.python import packet_getter
  from mediapipe.python._framework_bindings import image
  from mediapipe.python._framework_bindings import packet
  from mediapipe.tasks.cc.vision.object_detector.proto import object_detector_options_pb2
  from mediapipe.tasks.python.components.containers import detections
  from mediapipe.tasks.python.components.containers import rect
  from mediapipe.tasks.python.core import base_options
  from mediapipe.tasks.python.core import task_info
  from mediapipe.tasks.python.core.optional_dependencies import doc_controls
  from mediapipe.tasks.python.vision.core import base_vision_task_api
  from mediapipe.tasks.python.vision.core import image_processing_options
  from mediapipe.tasks.python.vision.core import vision_task_running_mode
label_desc: Use image node_id 2 for calling the ObjectDetector obj's underlying member method code with example usage: obj.create_from_options(cls, options) and returns: cls