Reputation: 61
I want to use mediapipe facedetection module to crop face Images from original images and videos, to build a dataset for emotion recognition.
is there a way of getting the bounding boxes from mediapipe faceDetection solution?
cap = cv2.VideoCapture(0)
with mp_face_detection.FaceDetection(
model_selection=0, min_detection_confidence=0.5) as face_detection:
while cap.isOpened():
success, image = cap.read()
if not success:
print("Ignoring empty camera frame.")
continue
image.flags.writeable = False
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = face_detection.process(image)
# Draw the face detection annotations on the image.
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
if results.detections:
for detection in results.detections:
mp_drawing.draw_detection(image, detection)
##
'''
#### here i want to grab the bounding box for the detected faces in order to crop the face image
'''
##
cv2.imshow('MediaPipe Face Detection', cv2.flip(image, 1))
if cv2.waitKey(5) & 0xFF == 27:
break
cap.release()
thank you
Upvotes: 5
Views: 3469
Reputation: 1000
In order to figure out format you can follow two ways:
Check out for what "Detection" is: https://github.com/google/mediapipe/blob/master/mediapipe/framework/formats/detection.proto
We need location_data
. It should have format
field, which should be BOUNDING_BOX
, or RELATIVE_BOUNDING_BOX
(but in fact only RELATIVE_BOUNDING_BOX
).
drawing_utils
contents:Just check for draw_detection
method. You need line with cv2.rectangle
call
results = face_detection.process(image)
# Draw the face detection annotations on the image.
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
if results.detections:
for detection in results.detections:
draw_detection(image, detection)
##
'''
#### here i want to grab the bounding box for the detected faces in order to crop the face image
'''
##
location_data = detection.location_data
if location_data.format == LocationData.RELATIVE_BOUNDING_BOX:
bb = location_data.relative_bounding_box
bb_box = [
bb.xmin, bb.ymin,
bb.width, bb.height,
]
print(f"RBBox: {bb_box}")
Upvotes: 4