179 lines
4.6 KiB
Plaintext
179 lines
4.6 KiB
Plaintext
input_side_packet: "input_sequence_example_path"
|
|
input_side_packet: "input_video_path"
|
|
input_side_packet: "output_video_path"
|
|
input_side_packet: "segment_size"
|
|
input_side_packet: "overlap"
|
|
|
|
node {
|
|
calculator: "LocalFileContentsCalculator"
|
|
input_side_packet: "FILE_PATH:input_sequence_example_path"
|
|
output_side_packet: "CONTENTS:input_sequence_example"
|
|
}
|
|
|
|
node {
|
|
calculator: "StringToSequenceExampleCalculator"
|
|
input_side_packet: "STRING:input_sequence_example"
|
|
output_side_packet: "SEQUENCE_EXAMPLE:parsed_sequence_example"
|
|
}
|
|
|
|
node {
|
|
calculator: "UnpackMediaSequenceCalculator"
|
|
input_side_packet: "SEQUENCE_EXAMPLE:parsed_sequence_example"
|
|
output_stream: "FLOAT_FEATURE_RGB:rgb_feature_vector"
|
|
output_stream: "FLOAT_FEATURE_AUDIO:audio_feature_vector"
|
|
}
|
|
|
|
node {
|
|
calculator: "ConcatenateFloatVectorCalculator"
|
|
input_stream: "rgb_feature_vector"
|
|
input_stream: "audio_feature_vector"
|
|
output_stream: "feature_vector"
|
|
}
|
|
|
|
node {
|
|
calculator: "VectorFloatToTensorCalculator"
|
|
input_stream: "feature_vector"
|
|
output_stream: "feature_tensor"
|
|
}
|
|
|
|
node {
|
|
calculator: "StringToInt32Calculator"
|
|
input_side_packet: "segment_size"
|
|
output_side_packet: "segment_size_int"
|
|
}
|
|
|
|
node {
|
|
calculator: "StringToInt32Calculator"
|
|
input_side_packet: "overlap"
|
|
output_side_packet: "overlap_int"
|
|
}
|
|
|
|
node {
|
|
calculator: "LappedTensorBufferCalculator"
|
|
input_stream: "feature_tensor"
|
|
output_stream: "lapped_feature_tensor"
|
|
input_side_packet: "BUFFER_SIZE:segment_size_int"
|
|
input_side_packet: "OVERLAP:overlap_int"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.LappedTensorBufferCalculatorOptions] {
|
|
add_batch_dim_to_tensors: true
|
|
}
|
|
}
|
|
}
|
|
|
|
node {
|
|
calculator: "SidePacketToStreamCalculator"
|
|
input_side_packet: "segment_size_int"
|
|
output_stream: "AT_ZERO:segment_size_int_stream"
|
|
}
|
|
|
|
node {
|
|
calculator: "VectorIntToTensorCalculator"
|
|
input_stream: "SINGLE_INT:segment_size_int_stream"
|
|
output_stream: "TENSOR_OUT:segment_size_tensor"
|
|
}
|
|
|
|
node {
|
|
calculator: "PacketClonerCalculator"
|
|
input_stream: "segment_size_tensor"
|
|
input_stream: "lapped_feature_tensor"
|
|
output_stream: "synced_segment_size_tensor"
|
|
}
|
|
|
|
node {
|
|
calculator: "TensorFlowSessionFromSavedModelCalculator"
|
|
output_side_packet: "SESSION:session"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.TensorFlowSessionFromSavedModelCalculatorOptions]: {
|
|
saved_model_path: "/tmp/mediapipe/saved_model"
|
|
}
|
|
}
|
|
}
|
|
|
|
node: {
|
|
calculator: "TensorFlowInferenceCalculator"
|
|
input_side_packet: "SESSION:session"
|
|
input_stream: "NUM_FRAMES:synced_segment_size_tensor"
|
|
input_stream: "RGB_AND_AUDIO:lapped_feature_tensor"
|
|
output_stream: "PREDICTIONS:prediction_tensor"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.TensorFlowInferenceCalculatorOptions]: {
|
|
batch_size: 32
|
|
}
|
|
}
|
|
}
|
|
|
|
node {
|
|
calculator: "TensorToVectorFloatCalculator"
|
|
input_stream: "prediction_tensor"
|
|
output_stream: "prediction_vector"
|
|
}
|
|
|
|
node {
|
|
calculator: "TopKScoresCalculator"
|
|
input_stream: "SCORES:prediction_vector"
|
|
output_stream: "TOP_K_INDEXES:top_k_indexes"
|
|
output_stream: "TOP_K_SCORES:top_k_scores"
|
|
output_stream: "TOP_K_LABELS:top_k_labels"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.TopKScoresCalculatorOptions]: {
|
|
top_k: 3
|
|
label_map_path: "mediapipe/graphs/youtube8m/label_map.txt"
|
|
}
|
|
}
|
|
}
|
|
|
|
node {
|
|
calculator: "OpenCvVideoDecoderCalculator"
|
|
input_side_packet: "INPUT_FILE_PATH:input_video_path"
|
|
output_stream: "VIDEO:input_video"
|
|
output_stream: "VIDEO_PRESTREAM:input_video_header"
|
|
}
|
|
|
|
node {
|
|
calculator: "LabelsToRenderDataCalculator"
|
|
input_stream: "LABELS:top_k_labels"
|
|
input_stream: "SCORES:top_k_scores"
|
|
input_stream: "VIDEO_PRESTREAM:input_video_header"
|
|
output_stream: "RENDER_DATA:render_data"
|
|
node_options: {
|
|
[type.googleapis.com/mediapipe.LabelsToRenderDataCalculatorOptions]: {
|
|
color { r: 255 g: 0 b: 0 }
|
|
color { r: 0 g: 255 b: 0 }
|
|
color { r: 0 g: 0 b: 255 }
|
|
thickness: 2.0
|
|
font_height_px: 20
|
|
max_num_labels: 3
|
|
location: TOP_LEFT
|
|
}
|
|
}
|
|
}
|
|
|
|
node {
|
|
calculator: "PacketClonerCalculator"
|
|
input_stream: "render_data"
|
|
input_stream: "input_video"
|
|
output_stream: "synchronized_render_data"
|
|
}
|
|
|
|
node {
|
|
calculator: "AnnotationOverlayCalculator"
|
|
input_stream: "IMAGE:input_video"
|
|
input_stream: "synchronized_render_data"
|
|
output_stream: "IMAGE:output_video"
|
|
}
|
|
|
|
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"
|
|
}
|
|
}
|
|
}
|
|
|