سلام دنیا! در C++

  1. مطمئن شوید که یک نسخه فعال از MediaPipe Framework دارید. دستورالعمل نصب را ببینید.

  2. برای اجرای مثال 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. مثال hello world از یک نمودار MediaPipe ساده در تابع PrintHelloWorld() استفاده می کند که در پروتو 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"
        }
      )");
    

    می توانید با چسباندن محتوای CalculatorGraphConfig زیر در ویژوالایزر، این نمودار را با استفاده از MediaPipe 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"
        }
    

    این نمودار شامل 1 جریان ورودی گراف ( in ) و 1 جریان خروجی گراف ( out ) و 2 PassThroughCalculator است که به صورت سریال متصل شده اند.

    نمودار hello_world

  4. قبل از اجرای نمودار، یک شی OutputStreamPoller به جریان خروجی متصل می شود تا بعداً خروجی نمودار را بازیابی کند، و اجرای گراف با 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. سپس این مثال با استفاده از تابع MakePacket 10 بسته را ایجاد می کند (هر بسته حاوی یک رشته "Hello World!" با مقادیر Timestamp از 0، 1، ... 9 است)، هر بسته را از طریق جریان in به نمودار اضافه می کند، و در نهایت جریان ورودی را می بندد تا اجرای نمودار تمام شود.

    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. از طریق شی OutputStreamPoller ، نمونه تمام 10 بسته را از جریان خروجی بازیابی می کند، محتوای رشته را از هر بسته خارج می کند و آن را در گزارش خروجی چاپ می کند.

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