How to run pose estimation/alphapose with video instead of cam?

So I don’t have access to a webcam, is it possible to pass a video through pose estimation instead? Is there any examples lying around?

Please try this code.

import time

import cv2

import mxnet as mx

import gluoncv

from gluoncv.model_zoo import get_model

from gluoncv.data.transforms.pose import detector_to_alpha_pose, heatmap_to_coord

from gluoncv.utils.viz import cv_plot_image, cv_plot_keypoints

from gluoncv import utils

url = 'https://github.com/bryanyzhu/tiny-ucf101/raw/master/v_Basketball_g01_c01.avi'

video_fname = utils.download(url)

ctx = mx.cpu()

detector = get_model('ssd_512_mobilenet1.0_coco', pretrained=True, ctx=ctx)

detector.reset_class(classes=['person'], reuse_weights={'person':'person'})

detector.hybridize()

estimator = get_model('alpha_pose_resnet101_v1b_coco', pretrained=True, ctx=ctx)

estimator.hybridize()

cap = cv2.VideoCapture(video_fname)

fps = cap.get(cv2.CAP_PROP_FPS)

start = time.time()

while(True):

    end = time.time()

    sec = end-start

    cap.set(cv2.CAP_PROP_POS_FRAMES, round(fps * sec))

    ret, frame = cap.read()

    

    if(ret):

        frame = mx.nd.array(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)).astype('uint8')

        x, frame = gluoncv.data.transforms.presets.ssd.transform_test(frame, short=240)

        x = x.as_in_context(ctx)

        class_IDs, scores, bounding_boxs = detector(x)

        pose_input, upscale_bbox = detector_to_alpha_pose(frame, class_IDs, scores, bounding_boxs)

    

        if upscale_bbox is not None:

            predicted_heatmap = estimator(pose_input.as_in_context(ctx))

            pred_coords, confidence = heatmap_to_coord(predicted_heatmap, upscale_bbox)

            img = cv_plot_keypoints(frame, pred_coords, confidence, class_IDs, bounding_boxs, scores,

                                    box_thresh=0.5, keypoint_thresh=0.2)

            cv_plot_image(img)

        else:

            cv_plot_image(frame)

    else:

        break

    

    if cv2.waitKey(1) == 27:

        break

cap.release()

cv2.destroyAllWindows()