Hello World! in C++

  1. Assicurati di avere una versione funzionante del framework MediaPipe. Consulta istruzioni di installazione.

  2. Per eseguire l'esempio hello world:

    $ git clone https://github.com/google/mediapipe.git
    $ cd mediapipe
    
    $ export GLOG_logtostderr=1
    # Need bazel flag 'MEDIAPIPE_DISABLE_GPU=1' as desktop GPU is not supported currently.
    $ bazel run --define MEDIAPIPE_DISABLE_GPU=1 \
        mediapipe/examples/desktop/hello_world:hello_world
    
    # It should print 10 rows of Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    # Hello World!
    
  3. L'esempio hello world utilizza un semplice grafico MediaPipe nella Funzione PrintHelloWorld(), definita in un protocollo CalculatorGraphConfig.

    absl::Status PrintHelloWorld() {
      // Configures a simple graph, which concatenates 2 PassThroughCalculators.
      CalculatorGraphConfig config = ParseTextProtoOrDie<CalculatorGraphConfig>(R"(
        input_stream: "in"
        output_stream: "out"
        node {
          calculator: "PassThroughCalculator"
          input_stream: "in"
          output_stream: "out1"
        }
        node {
          calculator: "PassThroughCalculator"
          input_stream: "out1"
          output_stream: "out"
        }
      )");
    

    Puoi visualizzare questo grafico utilizzando Visualizzatore di MediaPipe incollando il i contenuti di CalculatorGraphConfig riportati di seguito nel visualizzatore. Consulta qui per ricevere assistenza sul visualizzatore.

        input_stream: "in"
        output_stream: "out"
        node {
          calculator: "PassThroughCalculator"
          input_stream: "in"
          output_stream: "out1"
        }
        node {
          calculator: "PassThroughCalculator"
          input_stream: "out1"
          output_stream: "out"
        }
    

    Questo grafico è composto da 1 stream di input del grafico (in) e 1 stream di output del grafico (out) e 2 PassThroughCalculator connessi in serie.

    Grafico hello_world

  4. Prima di eseguire il grafico, un oggetto OutputStreamPoller è collegato al flusso di output per recuperare in seguito l'output del grafico e l'esecuzione del inizia con StartRun.

    CalculatorGraph graph;
    MP_RETURN_IF_ERROR(graph.Initialize(config));
    MP_ASSIGN_OR_RETURN(OutputStreamPoller poller,
                        graph.AddOutputStreamPoller("out"));
    MP_RETURN_IF_ERROR(graph.StartRun({}));
    
  5. L'esempio quindi crea 10 pacchetti (ogni pacchetto contiene una stringa "Hello") Mondo!" con valori Timestamp che vanno da 0, 1, ... 9) utilizzando MakePacket, aggiunge ciascun pacchetto nel grafico attraverso la funzione in flusso di input e infine chiude il flusso di input per terminare l'esecuzione del grafico.

    for (int i = 0; i < 10; ++i) {
      MP_RETURN_IF_ERROR(graph.AddPacketToInputStream("in",
                         MakePacket<std::string>("Hello World!").At(Timestamp(i))));
    }
    MP_RETURN_IF_ERROR(graph.CloseInputStream("in"));
    
  6. Tramite l'oggetto OutputStreamPoller, l'esempio recupera quindi tutte e 10 pacchetti dal flusso di output, ottiene il contenuto di stringa da ogni e la stampa nel log di output.

    mediapipe::Packet packet;
    while (poller.Next(&packet)) {
      LOG(INFO) << packet.Get<string>();
    }