Project import generated by Copybara.
GitOrigin-RevId: ba1d851bc868c2f8037a6fa96ee90e4b8ab9bd40
This commit is contained in:
		
							parent
							
								
									48bcbb115f
								
							
						
					
					
						commit
						37287925b0
					
				|  | @ -74,10 +74,6 @@ class PreviousLoopbackCalculator : public CalculatorBase { | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   ::mediapipe::Status Process(CalculatorContext* cc) final { |   ::mediapipe::Status Process(CalculatorContext* cc) final { | ||||||
|     Packet& main_packet = cc->Inputs().Get(main_id_).Value(); |  | ||||||
|     if (!main_packet.IsEmpty()) { |  | ||||||
|       main_ts_.push_back(main_packet.Timestamp()); |  | ||||||
|     } |  | ||||||
|     Packet& loopback_packet = cc->Inputs().Get(loop_id_).Value(); |     Packet& loopback_packet = cc->Inputs().Get(loop_id_).Value(); | ||||||
|     if (!loopback_packet.IsEmpty()) { |     if (!loopback_packet.IsEmpty()) { | ||||||
|       loopback_packets_.push_back(loopback_packet); |       loopback_packets_.push_back(loopback_packet); | ||||||
|  | @ -87,6 +83,23 @@ class PreviousLoopbackCalculator : public CalculatorBase { | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     Packet& main_packet = cc->Inputs().Get(main_id_).Value(); | ||||||
|  |     if (!main_packet.IsEmpty()) { | ||||||
|  |       main_ts_.push_back(main_packet.Timestamp()); | ||||||
|  | 
 | ||||||
|  |       // In case of an empty "LOOP" input, truncate timestamp is set to the
 | ||||||
|  |       // lowest possible timestamp for a successive non-empty "LOOP" input. This
 | ||||||
|  |       // truncates main_ts_ as soon as possible, and produces the highest legal
 | ||||||
|  |       // output timestamp bound.
 | ||||||
|  |       if (loopback_packet.IsEmpty() && | ||||||
|  |           loopback_packet.Timestamp() != Timestamp::Unstarted()) { | ||||||
|  |         while (!main_ts_.empty() && | ||||||
|  |                main_ts_.front() <= loopback_packet.Timestamp() + 1) { | ||||||
|  |           main_ts_.pop_front(); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     while (!main_ts_.empty() && !loopback_packets_.empty()) { |     while (!main_ts_.empty() && !loopback_packets_.empty()) { | ||||||
|       Timestamp main_timestamp = main_ts_.front(); |       Timestamp main_timestamp = main_ts_.front(); | ||||||
|       main_ts_.pop_front(); |       main_ts_.pop_front(); | ||||||
|  |  | ||||||
|  | @ -198,5 +198,64 @@ TEST(PreviousLoopbackCalculator, ClosesCorrectly) { | ||||||
|   MP_EXPECT_OK(graph_.WaitUntilDone()); |   MP_EXPECT_OK(graph_.WaitUntilDone()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // Demonstrates that downstream calculators won't be blocked by
 | ||||||
|  | // always-empty-LOOP-stream.
 | ||||||
|  | TEST(PreviousLoopbackCalculator, EmptyLoopForever) { | ||||||
|  |   std::vector<Packet> outputs; | ||||||
|  |   CalculatorGraphConfig graph_config_ = | ||||||
|  |       ParseTextProtoOrDie<CalculatorGraphConfig>(R"( | ||||||
|  |         input_stream: 'in' | ||||||
|  |         node { | ||||||
|  |           calculator: 'PreviousLoopbackCalculator' | ||||||
|  |           input_stream: 'MAIN:in' | ||||||
|  |           input_stream: 'LOOP:previous' | ||||||
|  |           input_stream_info: { tag_index: 'LOOP' back_edge: true } | ||||||
|  |           output_stream: 'PREV_LOOP:previous' | ||||||
|  |         } | ||||||
|  |         # This calculator synchronizes its inputs as normal, so it is used | ||||||
|  |         # to check that both "in" and "previous" are ready. | ||||||
|  |         node { | ||||||
|  |           calculator: 'PassThroughCalculator' | ||||||
|  |           input_stream: 'in' | ||||||
|  |           input_stream: 'previous' | ||||||
|  |           output_stream: 'out' | ||||||
|  |           output_stream: 'previous2' | ||||||
|  |         } | ||||||
|  |         node { | ||||||
|  |           calculator: 'PacketOnCloseCalculator' | ||||||
|  |           input_stream: 'out' | ||||||
|  |           output_stream: 'close_out' | ||||||
|  |         } | ||||||
|  |       )"); | ||||||
|  |   tool::AddVectorSink("close_out", &graph_config_, &outputs); | ||||||
|  | 
 | ||||||
|  |   CalculatorGraph graph_; | ||||||
|  |   MP_ASSERT_OK(graph_.Initialize(graph_config_, {})); | ||||||
|  |   MP_ASSERT_OK(graph_.StartRun({})); | ||||||
|  | 
 | ||||||
|  |   auto send_packet = [&graph_](const std::string& input_name, int n) { | ||||||
|  |     MP_EXPECT_OK(graph_.AddPacketToInputStream( | ||||||
|  |         input_name, MakePacket<int>(n).At(Timestamp(n)))); | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   send_packet("in", 0); | ||||||
|  |   MP_EXPECT_OK(graph_.WaitUntilIdle()); | ||||||
|  |   EXPECT_EQ(TimestampValues(outputs), (std::vector<int64>{0})); | ||||||
|  | 
 | ||||||
|  |   for (int main_ts = 1; main_ts < 50; ++main_ts) { | ||||||
|  |     send_packet("in", main_ts); | ||||||
|  |     MP_EXPECT_OK(graph_.WaitUntilIdle()); | ||||||
|  |     std::vector<int64> ts_values = TimestampValues(outputs); | ||||||
|  |     EXPECT_EQ(ts_values.size(), main_ts); | ||||||
|  |     for (int j = 0; j < main_ts; ++j) { | ||||||
|  |       CHECK_EQ(ts_values[j], j); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   MP_EXPECT_OK(graph_.CloseAllInputStreams()); | ||||||
|  |   MP_EXPECT_OK(graph_.WaitUntilIdle()); | ||||||
|  |   MP_EXPECT_OK(graph_.WaitUntilDone()); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| }  // anonymous namespace
 | }  // anonymous namespace
 | ||||||
| }  // namespace mediapipe
 | }  // namespace mediapipe
 | ||||||
|  |  | ||||||
|  | @ -164,13 +164,13 @@ Below are code samples on how to run MediaPipe on Google Coral Dev Board. | ||||||
| 
 | 
 | ||||||
| ### Object Detection on Coral | ### Object Detection on Coral | ||||||
| 
 | 
 | ||||||
| [Object Detection on Coral with Webcam](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/README.md) | [Object Detection on Coral with Webcam](./object_detection_coral_devboard.md) | ||||||
| shows how to run quantized object detection TFlite model accelerated with | shows how to run quantized object detection TFlite model accelerated with | ||||||
| EdgeTPU on | EdgeTPU on | ||||||
| [Google Coral Dev Board](https://coral.withgoogle.com/products/dev-board). | [Google Coral Dev Board](https://coral.withgoogle.com/products/dev-board). | ||||||
| 
 | 
 | ||||||
| ### Face Detection on Coral | ### Face Detection on Coral | ||||||
| 
 | 
 | ||||||
| [Face Detection on Coral with Webcam](https://github.com/google/mediapipe/tree/master/mediapipe/examples/coral/README.md) | [Face Detection on Coral with Webcam](./face_detection_coral_devboard.md) shows | ||||||
| shows how to use quantized face detection TFlite model accelerated with EdgeTPU | how to use quantized face detection TFlite model accelerated with EdgeTPU on | ||||||
| on [Google Coral Dev Board](https://coral.withgoogle.com/products/dev-board). | [Google Coral Dev Board](https://coral.withgoogle.com/products/dev-board). | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								mediapipe/docs/face_detection_coral_devboard.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mediapipe/docs/face_detection_coral_devboard.md
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | ## Face Detection on Coral with Webcam | ||||||
|  | 
 | ||||||
|  | MediaPipe is able to run cross platform across device types like desktop, mobile | ||||||
|  | and edge devices. Here is an example of running MediaPipe | ||||||
|  | [face detection pipeline](./face_detection_desktop.md) on edge device like | ||||||
|  | [Google Coral dev board](https://coral.withgoogle.com/products/dev-board) with | ||||||
|  | [Edge TPU](https://cloud.google.com/edge-tpu/). This MediaPipe Coral face | ||||||
|  | detection pipeline is running [coral specific quantized version](https://github.com/google/mediapipe/blob/master/mediapipe/examples/coral/models/face-detector-quantized_edgetpu.tflite) | ||||||
|  | of the [MediaPipe face detection TFLite model](https://github.com/google/mediapipe/blob/master/mediapipe/models/face_detection_front.tflite) | ||||||
|  | accelerated on Edge TPU. | ||||||
|  | 
 | ||||||
|  | ### Cross compilation of MediaPipe Coral binaries in Docker | ||||||
|  | 
 | ||||||
|  | We recommend building the MediaPipe binaries not on the edge device due to | ||||||
|  | limited compute resulting in long build times. Instead, we will build MediaPipe | ||||||
|  | binaries using Docker containers on a more powerful host machine. For step by | ||||||
|  | step details of cross compiling and running MediaPipe binaries on Coral dev | ||||||
|  | board, please refer to [README.md in MediaPipe Coral example folder](https://github.com/google/mediapipe/blob/master/mediapipe/examples/coral/README.md). | ||||||
|  | 
 | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								mediapipe/docs/images/face_detection_demo_coral.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mediapipe/docs/images/face_detection_demo_coral.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.8 MiB | 
							
								
								
									
										
											BIN
										
									
								
								mediapipe/docs/images/multi_hand_tracking_android_gpu_small.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mediapipe/docs/images/multi_hand_tracking_android_gpu_small.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.0 MiB | 
							
								
								
									
										
											BIN
										
									
								
								mediapipe/docs/images/object_detection_demo_coral.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mediapipe/docs/images/object_detection_demo_coral.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.6 MiB | 
							
								
								
									
										20
									
								
								mediapipe/docs/object_detection_coral_devboard.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								mediapipe/docs/object_detection_coral_devboard.md
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | ||||||
|  | ## Object Detection on Coral with Webcam | ||||||
|  | 
 | ||||||
|  | MediaPipe is able to run cross platform across device types like desktop, mobile | ||||||
|  | and edge devices. Here is an example of running MediaPipe | ||||||
|  | [object detection pipeline](./object_detection_desktop.md) on edge device like | ||||||
|  | [Google Coral dev board](https://coral.withgoogle.com/products/dev-board) with | ||||||
|  | [Edge TPU](https://cloud.google.com/edge-tpu/). This MediaPipe Coral object | ||||||
|  | detection pipeline is running [coral specific quantized version](https://github.com/google/mediapipe/blob/master/mediapipe/examples/coral/models/object-detector-quantized_edgetpu.tflite) | ||||||
|  | of the [MediaPipe object detection TFLite model](https://github.com/google/mediapipe/blob/master/mediapipe/models/object_detection_front.tflite) | ||||||
|  | accelerated on Edge TPU. | ||||||
|  | 
 | ||||||
|  | ### Cross compilation of MediaPipe Coral binaries in Docker | ||||||
|  | 
 | ||||||
|  | We recommend building the MediaPipe binaries not on the edge device due to | ||||||
|  | limited compute resulting in long build times. Instead, we will build MediaPipe | ||||||
|  | binaries using Docker containers on a more powerful host machine. For step by | ||||||
|  | step details of cross compiling and running MediaPipe binaries on Coral dev | ||||||
|  | board, please refer to [README.md in MediaPipe Coral example folder](https://github.com/google/mediapipe/blob/master/mediapipe/examples/coral/README.md). | ||||||
|  | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user