randomshit11's picture
Rename test.py to main.py
afaf3bd verified
raw
history blame
3.03 kB
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()