Spaces:
Running
on
Zero
Running
on
Zero
File size: 1,585 Bytes
84d7244 |
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 |
import os
import cv2
import time
import shutil
import logging
import uuid
import torch
import numpy as np
import atexit
from concurrent.futures import ThreadPoolExecutor
from typing import Union
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
thread_pool_executor = ThreadPoolExecutor(max_workers=2)
def delete_later(path: Union[str, os.PathLike], delay: int = 600):
def _delete():
try:
if os.path.isfile(path):
os.remove(path)
elif os.path.isdir(path):
shutil.rmtree(path)
except Exception as e:
logger.warning(f"Failed to delete {path}: {e}")
def _wait_and_delete():
time.sleep(delay)
_delete()
thread_pool_executor.submit(_wait_and_delete)
atexit.register(_delete)
def create_user_temp_dir():
session_id = str(uuid.uuid4())[:8]
temp_dir = os.path.join("temp_local", f"session_{session_id}")
os.makedirs(temp_dir, exist_ok=True)
delete_later(temp_dir, delay=600)
return temp_dir
def load_video_to_tensor(video_path: str) -> torch.Tensor:
cap = cv2.VideoCapture(video_path)
frames = []
while True:
ret, frame = cap.read()
if not ret:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
frames.append(frame)
cap.release()
frames = np.array(frames)
video_tensor = torch.tensor(frames)
video_tensor = video_tensor.permute(0, 3, 1, 2).float() / 255.0
video_tensor = video_tensor.unsqueeze(0).permute(0, 2, 1, 3, 4)
return video_tensor |