Spaces:
Runtime error
Runtime error
import gradio as gr | |
from ultralytics import YOLO | |
from ultralytics.solutions import ai_gym | |
import cv2 | |
import tempfile | |
import os | |
# Initialize YOLO model | |
model = YOLO("yolov8n-pose.pt") | |
# Initialize AIGym object | |
gym_object = ai_gym.AIGym() | |
def count_workouts(input_video): | |
# Temporary file to store output video | |
output_path = tempfile.NamedTemporaryFile(suffix='.avi').name | |
# Open input video | |
cap = cv2.VideoCapture(input_video.name) | |
assert cap.isOpened(), "Error reading video file" | |
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)) | |
# Initialize video writer for output video | |
video_writer = cv2.VideoWriter(output_path, | |
cv2.VideoWriter_fourcc(*'mp4v'), | |
fps, | |
(w, h)) | |
frame_count = 0 | |
while cap.isOpened(): | |
success, im0 = cap.read() | |
if not success: | |
print("Video frame is empty or video processing has been successfully completed.") | |
break | |
frame_count += 1 | |
results = model.track(im0, verbose=False) # Tracking recommended | |
im0 = gym_object.start_counting(im0, results, frame_count) | |
video_writer.write(im0) | |
cap.release() | |
video_writer.release() | |
cv2.destroyAllWindows() | |
return output_path | |
# Gradio Interface | |
inputs = gr.inputs.Video(label="Upload a video") | |
outputs = gr.outputs.Video(label="Output Video") | |
gr.Interface(count_workouts, inputs, outputs, title="Workout Counter", | |
description="Upload a video and get a video with workout counting annotations.").launch() | |
# from ultralytics import YOLO | |
# from ultralytics.solutions import ai_gym | |
# import cv2 | |
# model = YOLO("yolov8n-pose.pt") | |
# cap = cv2.VideoCapture("pullups.mp4") | |
# assert cap.isOpened(), "Error reading video file" | |
# w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)) | |
# video_writer = cv2.VideoWriter("output_video.avi", | |
# cv2.VideoWriter_fourcc(*'mp4v'), | |
# fps, | |
# (w, h)) | |
# gym_object = ai_gym.AIGym() # init AI GYM module | |
# gym_object.set_args(line_thickness=2, | |
# view_img=False, # Set view_img to False to prevent displaying the video in real-time | |
# pose_type="pushup", | |
# kpts_to_check=[6, 8, 10]) | |
# frame_count = 0 | |
# while cap.isOpened(): | |
# success, im0 = cap.read() | |
# if not success: | |
# print("Video frame is empty or video processing has been successfully completed.") | |
# break | |
# frame_count += 1 | |
# results = model.track(im0, verbose=False) # Tracking recommended | |
# #results = model.predict(im0) # Prediction also supported | |
# im0 = gym_object.start_counting(im0, results, frame_count) | |
# video_writer.write(im0) | |
# cap.release() | |
# video_writer.release() | |
# cv2.destroyAllWindows() | |