RZHD
unknown
python
2 years ago
2.6 kB
9
Indexable
import cv2
# Load pre-trained model for detecting people
person_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')
# Load pre-trained model for detecting phones
phone_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_mobilephone.xml')
# Variables for tracking phone usage time
phone_in_use = False
phone_use_start = 0
phone_use_end = 0
# Video capturing object
cap = cv2.VideoCapture('path_to_video_file.mp4')
while True:
# Read each frame from the video
ret, frame = cap.read()
if ret:
# Convert frame to grayscale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Detect people in the frame
people = person_cascade.detectMultiScale(gray, 1.1, 4)
# Iterate over each detected person's bounding box
for (x, y, w, h) in people:
# Draw bounding box around the person
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Get ROI (Region of Interest) for phone detection within person's bounding box
roi_gray = gray[y:y+h, x:x+w]
# Detect phones within ROI
phones = phone_cascade.detectMultiScale(roi_gray)
# Check if any phones are detected within person's bounding box
if len(phones) > 0:
# Phone is in use
if not phone_in_use:
# Start tracking phone usage time
phone_use_start = cv2.getTickCount()
phone_in_use = True
else:
# Phone usage ended
if phone_in_use:
# Calculate phone usage time in seconds
phone_use_end = cv2.getTickCount()
phone_usage_time = (phone_use_end - phone_use_start) / cv2.getTickFrequency()
# Check if phone usage time is greater than or equal to 3 seconds
if phone_usage_time >= 3:
# Person was using the phone for more than 3 seconds
print("Phone usage detected for {:.2f} seconds".format(phone_usage_time))
phone_in_use = False
# Display the resulting frame
cv2.imshow('Video', frame)
# Exit if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release the capture and close windows
cap.release()
cv2.destroyAllWindows()
Editor is loading...