สวัสดีทุกคน! ใน C++

  1. ตรวจสอบว่าคุณมีเฟรมเวิร์ก MediaPipe เวอร์ชันที่ใช้งานได้ โปรดดู วิธีการติดตั้ง

  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 โดยการวาง เนื้อหา CalculatorGraphConfig ด้านล่างลงใน 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) และ PassThroughCalculator 2 เครื่องเชื่อมต่อแบบต่อเนื่อง

    กราฟ 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>();
    }