Hello World! di C++

  1. Pastikan Anda memiliki versi Framework MediaPipe 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 di bagian 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), dan 2 PassThroughCalculator yang terhubung secara berurutan.

    grafik hello_world

  4. Sebelum menjalankan grafik, objek OutputStreamPoller terhubung ke aliran output guna mengambil output grafik nanti, dan grafik menjalankan 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 tersebut kemudian membuat 10 paket (setiap paket berisi {i>string<i} “Hello” Dunia!" dengan nilai Stempel waktu mulai dari 0, 1, ... 9) menggunakan Fungsi MakePacket, menambahkan setiap paket ke dalam grafik melalui in aliran input, dan terakhir menutup aliran data input untuk menyelesaikan proses menjalankan 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 tersebut kemudian mengambil ke-10 paket dari {i>output stream<i}, mendapatkan konten string dari setiap paket dan mencetaknya ke log output.

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