File size: 2,023 Bytes
afaf3bd
 
91b37a6
afaf3bd
 
924c3e9
 
 
afaf3bd
 
 
924c3e9
 
 
 
 
 
 
 
40e0d6d
924c3e9
afaf3bd
 
 
 
 
40e0d6d
afaf3bd
 
91b37a6
40e0d6d
 
afaf3bd
 
40e0d6d
afaf3bd
 
924c3e9
afaf3bd
40e0d6d
 
 
 
91b37a6
40e0d6d
924c3e9
 
 
40e0d6d
91b37a6
 
 
 
40e0d6d
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
60
61
62
63
64
import gradio as gr
from ultralytics import YOLO
import ai_gym
import cv2

def process(video_path):
    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="pullup",
                        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=True)  # 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.inputs.Video(label='Input Video')
# outputs = gr.outputs.Video(label='Processed Video')
example_list = ['Examples/PULL-UPS.mp4','Examples/PUSH-UPS.mp4']

# Create the Gradio demo
demo = gr.Interface(fn=process,
                    inputs=gr.Video(label='Input Video'),  
                    outputs=gr.Video(label='Output Video')
                    title=title,
                    description=description,
                    examples=example_list,
                    cache_examples=True,
                    )

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