Source code for data.movie.frames
from data.abstract import Dataset
from data.utils.headlines import MOVIE_HEADLINE
from data.utils import rescale_sum, rescale_mean
import os
import glob
import pickle
import numpy as np
import pandas as pd
from tqdm import tqdm
from types import SimpleNamespace
[docs]
class Frames(Dataset):
_unit_second = 1/29.97002997002997
[docs]
def __init__(self): super().__init__()
def __repr__(self): return MOVIE_HEADLINE
def _load(self):
# location of the pacakage + bin/movie/frames
path = os.path.join(os.path.dirname(__file__), "../bin/movie/frames")
files = sorted(glob.glob(f"{path}/_part*.npy"))
return np.concatenate([ np.load(fname) for fname in tqdm(files) ], axis=0)
@property
def cuts(self) -> SimpleNamespace:
camera_cuts = np.load(os.path.join(os.path.dirname(__file__), "../bin/movie/camera_cuts.npy"))
scene_cuts = np.load(os.path.join(os.path.dirname(__file__), "../bin/movie/scene_cuts.npy"))
return SimpleNamespace(camera=Dataset.from_array(camera_cuts, 0.3), scene=Dataset.from_array(scene_cuts, 0.3))
@property
def objects(self) -> SimpleNamespace:
return SimpleNamespace(people_count=People())
@property
def measures(self) -> SimpleNamespace:
df = pd.read_parquet(os.path.join(os.path.dirname(__file__), "../bin/movie/measures.parquet"))
# l1, l2, ssim, wasserstein, correlation, cosine
return SimpleNamespace(
l1 = Dataset.from_array(df.l1.values, self._unit_second, rescalar=rescale_sum),
l2 = Dataset.from_array(df.l2.values, self._unit_second, rescalar=rescale_sum),
cosine = Dataset.from_array(df.cosine.values, self._unit_second, rescalar=rescale_sum),
ssim = Dataset.from_array(df.ssim.values, self._unit_second, rescalar=rescale_sum),
wasserstein = Dataset.from_array(df.wasserstein.values, self._unit_second, rescalar=rescale_sum),
correlation = Dataset.from_array(df.correlation.values, self._unit_second, rescalar=rescale_sum),
)
class People(Dataset):
_unit_second = 1/30 # People data is sampled at 30 Hz
def __init__(self): super().__init__()
def _load(self) -> np.ndarray:
# with open('bin/movie/short_faceannots.pkl', 'rb') as f:
path = os.path.join(os.path.dirname(__file__), "../bin/movie/short_faceannots.pkl")
with open(path, 'rb') as f:
short_faceannots = pickle.load(f)
d = {"frame": [],"people": [],}
for key, item in short_faceannots.items():
d['frame'].append(int(key.split('_')[1]))
d['people'].append(len(item.keys()))
df = pd.DataFrame(d)
df["time_s"] = df["frame"] / 25.0
df["frame30"] = np.floor(df["time_s"] * 29.97002997002997).astype(int)
raw_people = np.zeros((14351))
raw_people[df.frame30.values] = df.people.values
return raw_people