Hello World! ב-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"
        }
      )");
    

    אפשר להציג את התרשים באמצעות MediaPipe Visualizer: מדביקים את הקוד התוכן של Forecast GraphConfig מופיע למטה בתוך כלי הוויזואליזציה. צפייה כאן אפשר לקבל עזרה לגבי כלי הוויזואליזציה.

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

    התרשים הזה מורכב מסטרימינג אחד של קלט בתרשים (in) ומסטרימינג אחד של פלט בתרשים (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. לאחר מכן הדוגמה יוצרת 10 חבילות (כל חבילה מכילה את המחרוזת "Hello" [שלום] עולם!" עם ערכי חותמות זמן שנעים בין 0, 1, ... 9), באמצעות הפונקציה הפונקציה MakePacket, מוסיפה כל חבילה לתרשים באמצעות 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>();
    }