Hello World!(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 proto에 정의됩니다.

    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 콘텐츠를 비주얼라이저에 삽입합니다. 자세한 내용은 여기에서 비주얼라이저에 관한 도움말을 확인하세요.

        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. 그런 다음 이 예시에서는 10개의 패킷을 만듭니다. 각 패킷에는 와!" 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>();
    }