Spaces:
Configuration error
Configuration error
| import cv2 | |
| def video_reader(file_path, targetFPS=9, targetWidth=None, to_rgb=True, prompt=None): | |
| cap = cv2.VideoCapture(file_path) | |
| sourceFPS = int(cap.get(cv2.CAP_PROP_FPS)) | |
| if sourceFPS < targetFPS: | |
| raise ValueError("sourceFPS < targetFPS: {} < {}".format(sourceFPS, targetFPS)) | |
| fpsDiv = 3 # sourceFPS // targetFPS | |
| print("sourceFPS: {}, targetFPS: {}, fpsDiv: {}".format(sourceFPS, targetFPS, fpsDiv)) | |
| frameCount = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) | |
| frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
| frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
| print("frameCount: {}, frameWidth: {}, fpsDiv: {}".format(frameCount, frameWidth, frameHeight)) | |
| if targetWidth: | |
| targetHeight = int(targetWidth * frameHeight / frameWidth) | |
| fc = 0 | |
| ret = True | |
| while fc < frameCount and ret: | |
| ret, img = cap.read() | |
| if fc % fpsDiv == 0: | |
| if targetWidth: | |
| img = cv2.resize(img, (targetWidth, targetHeight), interpolation=cv2.INTER_AREA) | |
| if to_rgb: | |
| img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
| yield img | |
| fc += 1 | |
| cap.release() | |