Project import generated by Copybara.

GitOrigin-RevId: 831b7eb6038549a3a5047e7a113d6a11956e2de9
This commit is contained in:
MediaPipe Team 2019-12-06 16:14:36 -08:00 committed by jqtang
parent 7d470a1335
commit 86b3283b2f

View File

@ -1,176 +0,0 @@
# MediaPipe graph that performs LSTM based object detection on desktop with
# TensorFlow Lite on CPU.
# max_queue_size limits the number of packets enqueued on any input stream
# by throttling inputs to the graph. This makes the graph only process one
# frame per time.
max_queue_size: 1
# Decodes an input video file into images and a video header.
node {
calculator: "OpenCvVideoDecoderCalculator"
input_side_packet: "INPUT_FILE_PATH:input_video_path"
output_stream: "VIDEO:input_video"
output_stream: "VIDEO_PRESTREAM:input_video_header"
}
# Transforms the input image on CPU to a 256x256 image. To scale the image, by
# default it uses the STRETCH scale mode that maps the entire input image to the
# entire transformed image. As a result, image aspect ratio may be changed and
# objects in the image may be deformed (stretched or squeezed), but the object
# detection model used in this graph is agnostic to that deformation.
node: {
calculator: "ImageTransformationCalculator"
input_stream: "IMAGE:input_video"
output_stream: "IMAGE:transformed_input_video"
node_options: {
[type.googleapis.com/mediapipe.ImageTransformationCalculatorOptions] {
output_width: 256
output_height: 256
}
}
}
# Converts the transformed input image on CPU into an image tensor as a
# TfLiteTensor. The zero_center option is set to true to normalize the
# pixel values to [-1.f, 1.f] as opposed to [0.f, 1.f].
node {
calculator: "TfLiteConverterCalculator"
input_stream: "IMAGE:transformed_input_video"
output_stream: "TENSORS:image_tensor"
node_options: {
[type.googleapis.com/mediapipe.TfLiteConverterCalculatorOptions] {
zero_center: true
use_quantized_tensors: true
}
}
}
# Joins the input image_tensor and previous lstm state tensors into a single
# output vector of tensors.
node {
calculator: "ConcatenateTfLiteTensorVectorCalculator"
input_stream: "image_tensor"
input_stream: "prev_lstm_tensors"
output_stream: "concatenated_tensors"
}
# Runs a TensorFlow Lite model on CPU that takes an image tensor and state
# tensors, then outputs a vector of tensors representing, for instance,
# detection boxes/keypoints and scores.
node {
calculator: "TfLiteInferenceCalculator"
input_stream: "TENSORS:concatenated_tensors"
output_stream: "TENSORS:inference_tensors"
node_options: {
[type.googleapis.com/mediapipe.TfLiteInferenceCalculatorOptions] {
model_path: "mediapipe/models/lstdlite_object_detection.tflite"
}
}
}
# Splits up the output tensors into two streams [detection_boxes,
# detection_classes, detection_scores, num_detections], and [lstm_c, lstm_h].
node {
calculator: "SplitTfLiteTensorVectorCalculator"
input_stream: "inference_tensors"
output_stream: "detection_tensors"
output_stream: "lstm_tensors"
options {
[type.googleapis.com/mediapipe.SplitVectorCalculatorOptions] {
ranges: { begin: 0 end: 4 }
ranges: { begin: 4 end: 6 }
}
}
}
# Waits for the LSTM state output from the TfLite inferencing to feed back in as
# an input tensor for the next frame.
node {
calculator: "PreviousLoopbackCalculator"
input_stream: "MAIN:transformed_input_video"
input_stream: "LOOP:lstm_tensors"
input_stream_info: { tag_index: "LOOP" back_edge: true }
output_stream: "PREV_LOOP:prev_lstm_tensors"
}
# Decodes the detection tensors generated by the TensorFlow Lite model, based on
# the specification in the options, into a vector of detections. Each detection
# describes a detected object.
node {
calculator: "TfLiteTensorsToDetectionsCalculator"
input_stream: "TENSORS:detection_tensors"
output_stream: "DETECTIONS:detections"
node_options: {
[type.googleapis.com/mediapipe.TfLiteTensorsToDetectionsCalculatorOptions] {
num_classes: 7
num_boxes: 40
num_coords: 4
}
}
}
# Performs non-max suppression to remove excessive detections.
node {
calculator: "NonMaxSuppressionCalculator"
input_stream: "detections"
output_stream: "filtered_detections"
node_options: {
[type.googleapis.com/mediapipe.NonMaxSuppressionCalculatorOptions] {
min_suppression_threshold: 0.4
min_score_threshold: 0.2
max_num_detections: 5
overlap_type: INTERSECTION_OVER_UNION
}
}
}
# Maps detection label IDs to the corresponding label text. The label map is
# provided in the label_map_path option.
node {
calculator: "DetectionLabelIdToTextCalculator"
input_stream: "filtered_detections"
output_stream: "output_detections"
node_options: {
[type.googleapis.com/mediapipe.DetectionLabelIdToTextCalculatorOptions] {
label_map_path: "mediapipe/models/lstdlite_object_detection_labelmap.txt"
}
}
}
# Converts the detections to drawing primitives for annotation overlay.
node {
calculator: "DetectionsToRenderDataCalculator"
input_stream: "DETECTIONS:output_detections"
output_stream: "RENDER_DATA:render_data"
node_options: {
[type.googleapis.com/mediapipe.DetectionsToRenderDataCalculatorOptions] {
thickness: 2.0
color { r: 255 g: 255 b: 255 }
}
}
}
# Draws annotations and overlays them on top of the original image coming into
# the graph.
node {
calculator: "AnnotationOverlayCalculator"
input_stream: "INPUT_FRAME:input_video"
input_stream: "render_data"
output_stream: "OUTPUT_FRAME:output_video"
}
# Encodes the annotated images into a video file, adopting properties specified
# in the input video header, e.g., video framerate.
node {
calculator: "OpenCvVideoEncoderCalculator"
input_stream: "VIDEO:output_video"
input_stream: "VIDEO_PRESTREAM:input_video_header"
input_side_packet: "OUTPUT_FILE_PATH:output_video_path"
node_options: {
[type.googleapis.com/mediapipe.OpenCvVideoEncoderCalculatorOptions]: {
codec: "avc1"
video_format: "mp4"
}
}
}