File size: 2,048 Bytes
afaf3bd
 
91b37a6
afaf3bd
 
c255ae4
924c3e9
 
afaf3bd
 
 
924c3e9
 
 
 
 
 
 
 
c255ae4
924c3e9
afaf3bd
 
 
 
 
40e0d6d
afaf3bd
 
170fd84
 
 
afaf3bd
 
170fd84
afaf3bd
 
924c3e9
afaf3bd
40e0d6d
 
c255ae4
 
 
40e0d6d
01e9f78
924c3e9
 
c255ae4
 
91b37a6
01e9f78
 
324f7e3
170fd84
afaf3bd
924c3e9
40e0d6d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import gradio as gr
from ultralytics import YOLO
import ai_gym
import cv2

def process(video_path, pose_type):
    model = YOLO("yolov8n-pose.pt")
    cap = cv2.VideoCapture(video_path)
    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.mp4",
                                   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=pose_type,
                        kpts_to_check=[6, 8, 10])

    frame_count = 0
    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("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_video.mp4"

title = "Push-up Counter"
description = "This app counts the number of push-ups in a video."
inputs = [gr.Video(label='Input Video'),  
          gr.Radio(["pullups", "pushups", "absworkout"], label="Pose Type")]
outputs = gr.Video(label='Output Video')

# example_list = [['Examples/PULL-UPS.mp4'],['Examples/PUSH-UPS.mp4']]
# Create the Gradio demo
demo = gr.Interface(fn=process,
                    inputs=inputs,
                    outputs=outputs,
                    title=title,
                    description=description
                    # examples=example_list
                    # cache_examples=True
                   )

# Launch the demo!
demo.launch(show_api=True)