class_docstr: Class that performs image classification on images.
  
  The API expects a TFLite model with optional, but strongly recommended,
  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.
  At least one output tensor with:
    (kTfLiteUInt8/kTfLiteFloat32)
    - `N `classes and either 2 or 4 dimensions, i.e. `[1 x N]` or
      `[1 x 1 x 1 x N]`
    - optional (but recommended) label map(s) as AssociatedFiles with type
      TENSOR_AXIS_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
      `ImageClassifierOptions` 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.
    - 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.
  
  An example of such model can be found at:
  https://tfhub.dev/bohemian-visual-recognition-alliance/lite-model/models/mushroom-identification_v1/1
  
  [1]:
  https://github.com/google/mediapipe/blob/6cdc6443b6a7ed662744e2a2ce2d58d9c83e6d6f/mediapipe/tasks/metadata/metadata_schema.fbs#L456
class_docstr_tok: ["Class","that","performs","image","classification","on","images",".","The","API","expects","a","TFLite","model","with","optional",",","but","strongly","recommended",",","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",".","At","least","one","output","tensor","with",":","(","kTfLiteUInt8\/kTfLiteFloat32",")","-","`","N","`","classes","and","either","2","or","4","dimensions",",","i.e",".","`","[","1","x","N","]","`","or","`","[","1","x","1","x","1","x","N","]","`","-","optional","(","but","recommended",")","label","map","(","s",")","as","AssociatedFiles","with","type","TENSOR_AXIS_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","`","ImageClassifierOptions","`","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",".","-","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",".","An","example","of","such","model","can","be","found","at",":","https",":","\/\/tfhub.dev\/bohemian-visual-recognition-alliance\/lite-model\/models\/mushroom-identification_v1\/1","[","1","]",":","https",":","\/\/github.com\/google\/mediapipe\/blob\/6cdc6443b6a7ed662744e2a2ce2d58d9c83e6d6f\/mediapipe\/tasks\/metadata\/metadata_schema.fbs","#","L456"]
docstr: Creates the `ImageClassifier` object from image classifier options.
  
  Args:
    options: Options for the image classifier task.
  
  Returns:
    `ImageClassifier` object that's created from `options`.
  
  Raises:
    ValueError: If failed to create `ImageClassifier` object from
      `ImageClassifierOptions` such as missing the model.
    RuntimeError: If other types of error occurred.
docstr_tok: ["Creates","the","`","ImageClassifier","`","object","from","image","classifier","options",".","Args",":","options",":","Options","for","the","image","classifier","task",".","Returns",":","`","ImageClassifier","`","object","that","'s","created","from","`","options","`",".","Raises",":","ValueError",":","If","failed","to","create","`","ImageClassifier","`","object","from","`","ImageClassifierOptions","`","such","as","missing","the","model",".","RuntimeError",":","If","other","types","of","error","occurred","."]
code: def create_from_options(
      cls, options: ImageClassifierOptions
  ) -> "ImageClassifier":
      """Creates the `ImageClassifier` object from image classifier options.
  
      Args:
        options: Options for the image classifier task.
  
      Returns:
        `ImageClassifier` object that's created from `options`.
  
      Raises:
        ValueError: If failed to create `ImageClassifier` object from
          `ImageClassifierOptions` such as missing the model.
        RuntimeError: If other types of error occurred.
      """
  
      def packets_callback(output_packets: Mapping[str, packet.Packet]):
          if output_packets[_IMAGE_OUT_STREAM_NAME].is_empty():
              return
  
          classification_result_proto = (
              classifications_pb2.ClassificationResult()
          )
          classification_result_proto.CopyFrom(
              packet_getter.get_proto(
                  output_packets[_CLASSIFICATIONS_STREAM_NAME]
              )
          )
          image = packet_getter.get_image(
              output_packets[_IMAGE_OUT_STREAM_NAME]
          )
          timestamp = output_packets[_IMAGE_OUT_STREAM_NAME].timestamp
          options.result_callback(
              ImageClassifierResult.create_from_pb2(
                  classification_result_proto
              ),
              image,
              timestamp.value // _MICRO_SECONDS_PER_MILLISECOND,
          )
  
      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(
                  [_CLASSIFICATIONS_TAG, _CLASSIFICATIONS_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, Mapping, Optional, List
  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.components.containers.proto import classifications_pb2
  from mediapipe.tasks.cc.components.processors.proto import classifier_options_pb2
  from mediapipe.tasks.cc.vision.image_classifier.proto import image_classifier_graph_options_pb2
  from mediapipe.tasks.python.components.containers import classification_result
  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 ImageClassifier obj's underlying member method code with example usage: obj.create_from_options(cls, options) and returns: cls