Skip to content

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

Closed
wants to merge 3 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions web_programming/face_detection.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import cv2
import mediapipe as mp
import time


def resize_image(img, max_width=1000, max_height=800):

Check failure on line 6 in web_programming/face_detection.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (I001)

web_programming/face_detection.py:1:1: I001 Import block is un-sorted or un-formatted
"""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):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: draw_face_detections. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: img

Please provide type hint for the parameter: detections

"""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):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please provide return type hint for the function: main. If the function does not return a value, please provide the type hint as: def function() -> None:

Please provide type hint for the parameter: video_path

# 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

Check failure on line 39 in web_programming/face_detection.py

View workflow job for this annotation

GitHub Actions / ruff

Ruff (F841)

web_programming/face_detection.py:39:5: F841 Local variable `mp_draw` is assigned to but never used
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)
Loading