-
-
Notifications
You must be signed in to change notification settings - Fork 48.7k
Feature/detection #12055
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature/detection #12055
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
import cv2 | ||
import mediapipe as mp | ||
import time | ||
|
||
def resize_image(img, max_width=1000, max_height=800): | ||
"""Resizes the image while maintaining aspect ratio.""" | ||
height, width, _ = img.shape | ||
scale = min(max_width / width, max_height / height) | ||
return cv2.resize(img, None, fx=scale, fy=scale) | ||
|
||
def draw_face_detections(img, detections): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please provide return type hint for the function: Please provide type hint for the parameter: Please provide type hint for the parameter: |
||
"""Draws bounding boxes around detected faces.""" | ||
if detections: | ||
for detection in detections: | ||
# Extract bounding box information | ||
bbox = detection.location_data.relative_bounding_box | ||
ih, iw, _ = img.shape | ||
box = ( | ||
int(bbox.xmin * iw), int(bbox.ymin * ih), | ||
int(bbox.width * iw), int(bbox.height * ih) | ||
) | ||
# Draw the bounding box | ||
cv2.rectangle(img, box, (17, 219, 13), 2) | ||
|
||
def main(video_path): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please provide return type hint for the function: Please provide type hint for the parameter: |
||
# Initialize video capture | ||
cap = cv2.VideoCapture(video_path) | ||
if not cap.isOpened(): | ||
print("Error: Unable to open video file") | ||
return | ||
|
||
# Mediapipe Face Detection setup | ||
mp_face_detection = mp.solutions.face_detection | ||
mp_draw = mp.solutions.drawing_utils | ||
face_detection = mp_face_detection.FaceDetection(0.75) | ||
|
||
prev_time = 0 # Previous time for FPS calculation | ||
|
||
while True: | ||
success, img = cap.read() | ||
if not success: | ||
print("Error: Can't read the video frame.") | ||
break | ||
|
||
# Resize image for better performance | ||
img = resize_image(img) | ||
|
||
# Convert image to RGB for face detection | ||
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | ||
result = face_detection.process(img_rgb) | ||
|
||
# Draw face detections | ||
draw_face_detections(img, result.detections) | ||
|
||
# FPS calculation | ||
current_time = time.time() | ||
fps = 1 / (current_time - prev_time) | ||
prev_time = current_time | ||
|
||
# Display FPS on the video | ||
cv2.putText(img, f"FPS: {int(fps)}", (20, 70), cv2.FONT_HERSHEY_PLAIN, 3, (0, 255, 0), 2) | ||
|
||
# Show the output image | ||
cv2.imshow("Face Detection", img) | ||
|
||
# Break the loop on 'q' key press | ||
if cv2.waitKey(10) & 0xFF == ord('q'): | ||
break | ||
|
||
# Release video capture and destroy all windows | ||
cap.release() | ||
cv2.destroyAllWindows() | ||
|
||
if __name__ == "__main__": | ||
video_path = 'path/to/your/video.mp4' # Update with the actual video path | ||
main(video_path) |
Uh oh!
There was an error while loading. Please reload this page.