Përshëndetje Botë! në C++

  1. Sigurohuni që keni një version funksional të MediaPipe Framework. Shihni udhëzimet e instalimit .

  2. Për të drejtuar shembullin 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. Shembulli hello world përdor një grafik të thjeshtë MediaPipe në funksionin PrintHelloWorld() , të përcaktuar në protokollin 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"
        }
      )");
    

    Ju mund ta vizualizoni këtë grafik duke përdorur MediaPipe Visualizer duke ngjitur përmbajtjen CalculatorGraphConfig më poshtë në vizualizues. Shihni këtu për ndihmë në vizualizuesin.

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

    Ky grafik përbëhet nga 1 rrymë hyrëse grafiku ( in ) dhe 1 rrjedhë dalëse grafiku ( out ) dhe 2 PassThroughCalculator të lidhur në mënyrë serike.

    grafiku hello_world

  4. Përpara ekzekutimit të grafikut, një objekt OutputStreamPoller lidhet me rrymën dalëse në mënyrë që të marrë më vonë daljen e grafikut dhe fillon ekzekutimi i grafikut me 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. Më pas, shembulli krijon 10 pako (çdo paketë përmban një varg "Hello World!" me vlera të vulës kohore që variojnë nga 0, 1, ... 9) duke përdorur funksionin MakePacket , shton secilën pako në grafik përmes rrjedhës in dhe në fund mbyll rrjedhën hyrëse për të përfunduar ekzekutimin e grafikut.

    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. Nëpërmjet objektit OutputStreamPoller shembulli më pas merr të gjitha 10 paketat nga rrjedha e daljes, merr përmbajtjen e vargut nga çdo paketë dhe e printon atë në regjistrin e daljes.

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