google-ai-edge / mediapipe

Cross-platform, customizable ML solutions for live and streaming media.
https://ai.google.dev/edge/mediapipe
Apache License 2.0
27.57k stars 5.16k forks source link

Building TfLiteTensorsToClassificationCalculator issue [libprotobuf ERROR external/com_google_protobuf/src/google/protobuf/text_format.cc:335] Error parsing text-format mediapipe.CalculatorGraphConfig: 6:25: Expected "]", found "/". #4792

Closed siperz closed 1 year ago

siperz commented 1 year ago

OS Platform and Distribution

Linux mint

Compiler version

gcc/g++ 10

Programming Language and version

Python

Installed using virtualenv? pip? Conda?(if python)

No response

MediaPipe version

No response

Bazel version

No response

XCode and Tulsi versions (if iOS)

No response

Android SDK and NDK versions (if android)

No response

Android AAR (if android)

None

OpenCV version (if running on desktop)

No response

Describe the problem

I am trying to build a binary file to create a custom solution. However, when attempting to construct the graph, I encounter a specific issue with the node containing the TfLiteTensorsToClassificationCalculator calculator. I have tried building only this node in isolation, but the same error persists. It's worth noting that I have attempted a similar approach with the TfLiteTensorsToDetectionsCalculator node, which is used in the object detection graph, and I have not encountered this issue. Does anyone have any idea what might be causing this problem? I would appreciate any guidance or solutions you can provide.

Complete Logs

I am building my binarypb with bazelisk build -c opt --define MEDIAPIPE_DISABLE_GPU=1     mediapipe/graphs/simon:desktop_binary_graph

This is my graph:

# El input representa el flujo de imagenes que le entraran al video
# el ouput representa la salida que se tendra al final del grafo.
input_stream: "input_video"
output_stream: "output_video"

#El primer nodo se encarga de limitar el flujo de entrada que fluye 
#mas abajo en el grafo, la primera imagen podra pasar sin alteraciones
#pero las imagenes subsiguientes no podran pasar hasta que el nodo que se encarga
#de realizar los calculos (ya sea deteccion o clasificacion) termine de procesar los resultados,
#todas las imagenes que llegan mientras el nodo está esperando son descartadas 
node {
  calculator: "FlowLimiterCalculator"
  input_stream: "input_video"
  input_stream: "FINISHED:detections"
  input_stream_info: {
    tag_index: "FINISHED"
    back_edge: true
  }
  output_stream: "throttled_input_video"
}

# Este nodo se encarga de redimensionar la imagen para ajustarla a como lo requiera
#el modelo, para el modelo de clasificacion se requiere una forma de 224x224, para el redimensionamiento
#por defecto se utiliza el modo "STRETCH", lo que significa que si bien todo el contenido original se conserva
#la imagen se puede llegar a deformar (cambia la relacion de aspecto de la imagen), es necesario asegurarse de que
#el modelo a utilizar no sufra debido a estas deformaciones
node: {
  calculator: "ImageTransformationCalculator"
  input_stream: "IMAGE:throttled_input_video"
  output_stream: "IMAGE:transformed_input_video"
  node_options: {
    [type.googleapis.com/mediapipe.ImageTransformationCalculatorOptions] {
      output_width: 224
      output_height: 224
    }
  }
}

# Este nodo se encarga de transformar la entrada de una imagen a un tensor de tflite
node {
  calculator: "TfLiteConverterCalculator"
  input_stream: "IMAGE:transformed_input_video"
  output_stream: "TENSORS:image_tensor"
}

# Se realizan las inferencias con el modelo establecido, es importante como sera la salida del nodo
#para el modelo de clasificacion sera un vector con puntuaciones
node {
  calculator: "TfLiteInferenceCalculator"
  input_stream: "TENSORS:image_tensor"
  output_stream: "TENSORS:clasiffier_tensors"
  node_options: {
    [type.googleapis.com/mediapipe.TfLiteInferenceCalculatorOptions] {
      model_path: "mediapipe/models/model.tflite"
    }
  }
}
#Se realiza el cambio de tensor a clasificacion
node {
  calculator: "TfLiteTensorsToClassificationCalculator"
  input_stream: "TENSORS:clasiffier_tensors"  # Flujo de entrada de tensores TFLite.
  output_stream: "CLASSIFICATIONS:classifications"  # Flujo de salida de clasificaciones.
  options: {
    [type.googleapis.com/mediapipe.TfLiteTensorsToClassificationCalculatorOptions] {
      num_classes: 2  # Número de clases.
      min_score_threshold: 0.1  # Umbral mínimo de puntuación.
      binary_classification: true  # Indicar que es una clasificación binaria.
    }
  }
}
# Este nodo se encarga de superponer las clasificaciones en la imagen original.
node {
  calculator: "AnnotationOverlayCalculator"
  input_stream: "IMAGE:throttled_input_video"  # La imagen original.
  input_stream: "CLASSIFICATIONS:classifications"  # Las clasificaciones obtenidas.
  output_stream: "output_video"  # La imagen superpuesta con las clasificaciones.
  node_options: {
    [type.googleapis.com/mediapipe.AnnotationOverlayCalculatorOptions] {
      display_position_normalized: { x: 0.1 y: 0.1 }  # Posición donde se mostrarán las clasificaciones.
      display_text_color: { r: 255 g: 255 b: 255 }  # Color del texto.
      font_size: 20.0  # Tamaño de fuente del texto.
      font_name: "Arial"  # Fuente del texto.
      box_color: { r: 255 g: 0 b: 0 }  # Color del cuadro alrededor del texto.
    }
  }
}

I tried to build just the node with the TfLiteTensorsToClassificationCalculator but always appear [libprotobuf ERROR external/com_google_protobuf/src/google/protobuf/text_format.cc:335] Error parsing text-format mediapipe.CalculatorGraphConfig: 6:25: Expected "]", found "/".
schmidt-sebastian commented 1 year ago

@siperz I have not tried this myself, but can you try to use quotes around the caculator name in node_options? We don't do this internally but this might be a requirement for your toolchain.

github-actions[bot] commented 1 year ago

This issue has been marked stale because it has no recent activity since 7 days. It will be closed if no further activity occurs. Thank you.

github-actions[bot] commented 1 year ago

This issue was closed due to lack of activity after being marked stale for past 7 days.

google-ml-butler[bot] commented 1 year ago

Are you satisfied with the resolution of your issue? Yes No