Hello World! in C++

  1. Ensure you have a working version of MediaPipe Framework. See installation instructions .

  2. To run the hello world example:

     $  
    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. The hello world example uses a simple MediaPipe graph in the PrintHelloWorld() function, defined in a 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" 
     } 
      
     ) 
     " 
     ); 
     
    

    You can visualize this graph using MediaPipe Visualizer by pasting the CalculatorGraphConfig content below into the visualizer. See here for help on the 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" 
      
     } 
     
    

    This graph consists of 1 graph input stream ( in ) and 1 graph output stream ( out ), and 2 PassThroughCalculator s connected serially.

    hello_world graph

  4. Before running the graph, an OutputStreamPoller object is connected to the output stream in order to later retrieve the graph output, and a graph run is started with 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. The example then creates 10 packets (each packet contains a string "Hello World!" with Timestamp values ranging from 0, 1, ... 9) using the MakePacket function, adds each packet into the graph through the in input stream, and finally closes the input stream to finish the graph run.

      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. Through the OutputStreamPoller object the example then retrieves all 10 packets from the output stream, gets the string content out of each packet and prints it to the output log.

      mediapipe 
     :: 
     Packet 
      
     packet 
     ; 
     while 
      
     ( 
     poller 
     . 
     Next 
     ( 
    & packet 
     )) 
      
     { 
      
     LOG 
     ( 
     INFO 
     ) 
     << 
     packet 
     . 
     Get<string> 
     (); 
     } 
     
    
Design a Mobile Site
View Site in Mobile | Classic
Share by: