Project import generated by Copybara.
GitOrigin-RevId: d8caa66de45839696f5bd0786ad3bfbcb9cff632
This commit is contained in:
@@ -63,14 +63,13 @@ mediapipe_simple_subgraph(
|
||||
":face_landmark_landmarks_to_roi",
|
||||
"//mediapipe/calculators/core:begin_loop_calculator",
|
||||
"//mediapipe/calculators/core:clip_vector_size_calculator",
|
||||
"//mediapipe/calculators/core:constant_side_packet_calculator",
|
||||
"//mediapipe/calculators/core:end_loop_calculator",
|
||||
"//mediapipe/calculators/core:gate_calculator",
|
||||
"//mediapipe/calculators/core:merge_calculator",
|
||||
"//mediapipe/calculators/core:previous_loopback_calculator",
|
||||
"//mediapipe/calculators/image:image_properties_calculator",
|
||||
"//mediapipe/calculators/util:association_norm_rect_calculator",
|
||||
"//mediapipe/calculators/util:collection_has_min_size_calculator",
|
||||
"//mediapipe/calculators/util:logic_calculator",
|
||||
"//mediapipe/modules/face_detection:face_detection_front_cpu",
|
||||
],
|
||||
)
|
||||
@@ -85,14 +84,13 @@ mediapipe_simple_subgraph(
|
||||
":face_landmark_landmarks_to_roi",
|
||||
"//mediapipe/calculators/core:begin_loop_calculator",
|
||||
"//mediapipe/calculators/core:clip_vector_size_calculator",
|
||||
"//mediapipe/calculators/core:constant_side_packet_calculator",
|
||||
"//mediapipe/calculators/core:end_loop_calculator",
|
||||
"//mediapipe/calculators/core:gate_calculator",
|
||||
"//mediapipe/calculators/core:merge_calculator",
|
||||
"//mediapipe/calculators/core:previous_loopback_calculator",
|
||||
"//mediapipe/calculators/image:image_properties_calculator",
|
||||
"//mediapipe/calculators/util:association_norm_rect_calculator",
|
||||
"//mediapipe/calculators/util:collection_has_min_size_calculator",
|
||||
"//mediapipe/calculators/util:logic_calculator",
|
||||
"//mediapipe/modules/face_detection:face_detection_front_gpu",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -26,7 +26,6 @@ node {
|
||||
rotation_vector_start_keypoint_index: 0 # Left eye.
|
||||
rotation_vector_end_keypoint_index: 1 # Right eye.
|
||||
rotation_vector_target_angle_degrees: 0
|
||||
output_zero_rect_for_empty_detections: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Regular → Executable
BIN
Binary file not shown.
@@ -81,6 +81,11 @@ node {
|
||||
calculator: "TensorsToFloatsCalculator"
|
||||
input_stream: "TENSORS:face_flag_tensor"
|
||||
output_stream: "FLOAT:face_presence_score"
|
||||
options {
|
||||
[mediapipe.TensorsToFloatsCalculatorOptions.ext] {
|
||||
activation: SIGMOID
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Applies a threshold to the confidence score to determine whether a face is
|
||||
@@ -91,7 +96,7 @@ node {
|
||||
output_stream: "FLAG:face_presence"
|
||||
options: {
|
||||
[mediapipe.ThresholdingCalculatorOptions.ext] {
|
||||
threshold: 0.1
|
||||
threshold: 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,10 +26,6 @@ input_stream: "IMAGE:image"
|
||||
# Max number of faces to detect/track. (int)
|
||||
input_side_packet: "NUM_FACES:num_faces"
|
||||
|
||||
# Whether face detection can be skipped when face regions can already be
|
||||
# approximated from face landmarks on the previous frame.
|
||||
input_side_packet: "CAN_SKIP_DETECTION:can_skip_detection"
|
||||
|
||||
# Collection of detected/predicted faces, each represented as a list of 468 face
|
||||
# landmarks. (std::vector<NormalizedLandmarkList>)
|
||||
# NOTE: there will not be an output packet in the LANDMARKS stream for this
|
||||
@@ -48,32 +44,41 @@ output_stream: "ROIS_FROM_LANDMARKS:face_rects_from_landmarks"
|
||||
# (std::vector<NormalizedRect>)
|
||||
output_stream: "ROIS_FROM_DETECTIONS:face_rects_from_detections"
|
||||
|
||||
# Defines whether landmarks on the previous image should be used to help
|
||||
# localize landmarks on the current image.
|
||||
node {
|
||||
name: "ConstantSidePacketCalculator"
|
||||
calculator: "ConstantSidePacketCalculator"
|
||||
output_side_packet: "PACKET:use_prev_landmarks"
|
||||
options: {
|
||||
[mediapipe.ConstantSidePacketCalculatorOptions.ext]: {
|
||||
packet { bool_value: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_side_packet: "ALLOW:use_prev_landmarks"
|
||||
input_stream: "prev_face_rects_from_landmarks"
|
||||
output_stream: "gated_prev_face_rects_from_landmarks"
|
||||
}
|
||||
|
||||
# Determines if an input vector of NormalizedRect has a size greater than or
|
||||
# equal to the provided num_faces.
|
||||
node {
|
||||
calculator: "NormalizedRectVectorHasMinSizeCalculator"
|
||||
input_stream: "ITERABLE:prev_face_rects_from_landmarks"
|
||||
input_stream: "ITERABLE:gated_prev_face_rects_from_landmarks"
|
||||
input_side_packet: "num_faces"
|
||||
output_stream: "prev_has_enough_faces"
|
||||
}
|
||||
|
||||
# Drops the incoming image if FaceLandmarkCpu was able to identify face presence
|
||||
# in the previous image and skipping face detection is enabled. Otherwise,
|
||||
# passes the incoming image through to trigger a new round of face detection
|
||||
# in FaceDetectionFrontCpu.
|
||||
node {
|
||||
calculator: "LogicCalculator"
|
||||
options: {
|
||||
[mediapipe.LogicCalculatorOptions.ext] { op: AND }
|
||||
}
|
||||
input_side_packet: "can_skip_detection"
|
||||
input_stream: "prev_has_enough_faces"
|
||||
output_stream: "skip_detection"
|
||||
}
|
||||
# Drops the incoming image if enough faces have already been identified from the
|
||||
# previous image. Otherwise, passes the incoming image through to trigger a new
|
||||
# round of face detection.
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_stream: "image"
|
||||
input_stream: "DISALLOW:skip_detection"
|
||||
input_stream: "DISALLOW:prev_has_enough_faces"
|
||||
output_stream: "gated_image"
|
||||
options: {
|
||||
[mediapipe.GateCalculatorOptions.ext] {
|
||||
@@ -81,12 +86,6 @@ node {
|
||||
}
|
||||
}
|
||||
}
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_stream: "prev_face_rects_from_landmarks"
|
||||
input_stream: "ALLOW:skip_detection"
|
||||
output_stream: "gated_prev_face_rects_from_landmarks"
|
||||
}
|
||||
|
||||
# Detects faces.
|
||||
node {
|
||||
@@ -149,8 +148,8 @@ node {
|
||||
# overlapping regions based on the specified min_similarity_threshold.
|
||||
node {
|
||||
calculator: "AssociationNormRectCalculator"
|
||||
input_stream: "gated_prev_face_rects_from_landmarks"
|
||||
input_stream: "face_rects_from_detections"
|
||||
input_stream: "gated_prev_face_rects_from_landmarks"
|
||||
output_stream: "face_rects"
|
||||
options: {
|
||||
[mediapipe.AssociationCalculatorOptions.ext] {
|
||||
|
||||
@@ -26,10 +26,6 @@ input_stream: "IMAGE:image"
|
||||
# Max number of faces to detect/track. (int)
|
||||
input_side_packet: "NUM_FACES:num_faces"
|
||||
|
||||
# Whether face detection can be skipped when face regions can already be
|
||||
# approximated from face landmarks on the previous frame.
|
||||
input_side_packet: "CAN_SKIP_DETECTION:can_skip_detection"
|
||||
|
||||
# Collection of detected/predicted faces, each represented as a list of 468 face
|
||||
# landmarks. (std::vector<NormalizedLandmarkList>)
|
||||
# NOTE: there will not be an output packet in the LANDMARKS stream for this
|
||||
@@ -48,32 +44,41 @@ output_stream: "ROIS_FROM_LANDMARKS:face_rects_from_landmarks"
|
||||
# (std::vector<NormalizedRect>)
|
||||
output_stream: "ROIS_FROM_DETECTIONS:face_rects_from_detections"
|
||||
|
||||
# Defines whether landmarks on the previous image should be used to help
|
||||
# localize landmarks on the current image.
|
||||
node {
|
||||
name: "ConstantSidePacketCalculator"
|
||||
calculator: "ConstantSidePacketCalculator"
|
||||
output_side_packet: "PACKET:use_prev_landmarks"
|
||||
options: {
|
||||
[mediapipe.ConstantSidePacketCalculatorOptions.ext]: {
|
||||
packet { bool_value: true }
|
||||
}
|
||||
}
|
||||
}
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_side_packet: "ALLOW:use_prev_landmarks"
|
||||
input_stream: "prev_face_rects_from_landmarks"
|
||||
output_stream: "gated_prev_face_rects_from_landmarks"
|
||||
}
|
||||
|
||||
# Determines if an input vector of NormalizedRect has a size greater than or
|
||||
# equal to the provided num_faces.
|
||||
node {
|
||||
calculator: "NormalizedRectVectorHasMinSizeCalculator"
|
||||
input_stream: "ITERABLE:prev_face_rects_from_landmarks"
|
||||
input_stream: "ITERABLE:gated_prev_face_rects_from_landmarks"
|
||||
input_side_packet: "num_faces"
|
||||
output_stream: "prev_has_enough_faces"
|
||||
}
|
||||
|
||||
# Drops the incoming image if FaceLandmarkGpu was able to identify face presence
|
||||
# in the previous image and skipping face detection is enabled. Otherwise,
|
||||
# passes the incoming image through to trigger a new round of face detection
|
||||
# in FaceDetectionFrontGpu.
|
||||
node {
|
||||
calculator: "LogicCalculator"
|
||||
options: {
|
||||
[mediapipe.LogicCalculatorOptions.ext] { op: AND }
|
||||
}
|
||||
input_side_packet: "can_skip_detection"
|
||||
input_stream: "prev_has_enough_faces"
|
||||
output_stream: "skip_detection"
|
||||
}
|
||||
# Drops the incoming image if enough faces have already been identified from the
|
||||
# previous image. Otherwise, passes the incoming image through to trigger a new
|
||||
# round of face detection.
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_stream: "image"
|
||||
input_stream: "DISALLOW:skip_detection"
|
||||
input_stream: "DISALLOW:prev_has_enough_faces"
|
||||
output_stream: "gated_image"
|
||||
options: {
|
||||
[mediapipe.GateCalculatorOptions.ext] {
|
||||
@@ -81,12 +86,6 @@ node {
|
||||
}
|
||||
}
|
||||
}
|
||||
node {
|
||||
calculator: "GateCalculator"
|
||||
input_stream: "prev_face_rects_from_landmarks"
|
||||
input_stream: "ALLOW:skip_detection"
|
||||
output_stream: "gated_prev_face_rects_from_landmarks"
|
||||
}
|
||||
|
||||
# Detects faces.
|
||||
node {
|
||||
@@ -149,8 +148,8 @@ node {
|
||||
# overlapping regions based on the specified min_similarity_threshold.
|
||||
node {
|
||||
calculator: "AssociationNormRectCalculator"
|
||||
input_stream: "gated_prev_face_rects_from_landmarks"
|
||||
input_stream: "face_rects_from_detections"
|
||||
input_stream: "gated_prev_face_rects_from_landmarks"
|
||||
output_stream: "face_rects"
|
||||
options: {
|
||||
[mediapipe.AssociationCalculatorOptions.ext] {
|
||||
|
||||
@@ -81,6 +81,11 @@ node {
|
||||
calculator: "TensorsToFloatsCalculator"
|
||||
input_stream: "TENSORS:face_flag_tensor"
|
||||
output_stream: "FLOAT:face_presence_score"
|
||||
options {
|
||||
[mediapipe.TensorsToFloatsCalculatorOptions.ext] {
|
||||
activation: SIGMOID
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Applies a threshold to the confidence score to determine whether a face is
|
||||
@@ -91,7 +96,7 @@ node {
|
||||
output_stream: "FLAG:face_presence"
|
||||
options: {
|
||||
[mediapipe.ThresholdingCalculatorOptions.ext] {
|
||||
threshold: 0.1
|
||||
threshold: 0.5
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user