Hello World! di C++

  1. Pastikan Anda memiliki versi MediaPipe Framework yang berfungsi. Lihat petunjuk penginstalan.

  2. Untuk menjalankan contoh 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. Contoh hello world menggunakan grafik MediaPipe sederhana dalam fungsi PrintHelloWorld(), yang ditentukan dalam proto 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"
        }
      )");
    

    Anda dapat memvisualisasikan grafik ini menggunakan MediaPipe Visualizer dengan menempelkan konten CalculatorGraphConfig di bawah ke visualizer. Lihat di sini untuk mendapatkan bantuan terkait visualizer.

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

    Grafik ini terdiri dari 1 aliran input grafik (in) dan 1 aliran output grafik (out), serta 2 PassThroughCalculator yang terhubung secara serial.

    grafik hello_world

  4. Sebelum menjalankan grafik, objek OutputStreamPoller terhubung ke aliran output agar nantinya dapat mengambil output grafik, dan operasi grafik dimulai dengan 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. Contoh ini kemudian membuat 10 paket (setiap paket berisi string "Hello World!" dengan nilai Stempel waktu mulai dari 0, 1, ... 9) menggunakan fungsi MakePacket, menambahkan setiap paket ke dalam grafik melalui stream input in, dan akhirnya menutup aliran input untuk menyelesaikan proses grafik.

    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. Melalui objek OutputStreamPoller, contoh ini kemudian mengambil ke-10 paket dari aliran output, mendapatkan konten string dari setiap paket, dan mencetaknya ke log output.

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