Fix limit_files

pull/1567/head
Piero Toffanin 2023-01-19 15:28:42 -05:00
rodzic 9932742920
commit 64b687a3a6
1 zmienionych plików z 15 dodań i 17 usunięć

Wyświetl plik

@ -7,6 +7,7 @@ import cv2
import os import os
import collections import collections
from PIL import Image from PIL import Image
import numpy as np
import piexif import piexif
from opendm import log from opendm import log
from opendm.video.srtparser import SrtFileParser from opendm.video.srtparser import SrtFileParser
@ -154,8 +155,8 @@ class Video2Dataset:
if resolution < w or resolution < h: if resolution < w or resolution < h:
m = max(w, h) m = max(w, h)
factor = resolution / m factor = resolution / m
frame_bw = cv2.resize(frame_bw, (int(ceil(w * factor)), int(ceil(h * factor)))) frame_bw = cv2.resize(frame_bw, (int(ceil(w * factor)), int(ceil(h * factor))), interpolation=cv2.INTER_NEAREST)
if (self.blur_checker is not None): if (self.blur_checker is not None):
blur_score, is_blurry = self.blur_checker.IsBlur(frame_bw, self.frame_index) blur_score, is_blurry = self.blur_checker.IsBlur(frame_bw, self.frame_index)
res["blur_score"] = blur_score res["blur_score"] = blur_score
@ -201,7 +202,7 @@ class Video2Dataset:
if max_dim < w or max_dim < h: if max_dim < w or max_dim < h:
m = max(w, h) m = max(w, h)
factor = max_dim / m factor = max_dim / m
frame = cv2.resize(frame, (int(ceil(w * factor)), int(ceil(h * factor)))) frame = cv2.resize(frame, (int(ceil(w * factor)), int(ceil(h * factor))), interpolation=cv2.INTER_AREA)
path = os.path.join(self.parameters.output, path = os.path.join(self.parameters.output,
"{}_{}_{}.{}".format(video_info.basename, self.global_idx, self.frame_index, self.parameters.frame_format)) "{}_{}_{}.{}".format(video_info.basename, self.global_idx, self.frame_index, self.parameters.frame_format))
@ -289,24 +290,21 @@ def float_to_rational(f):
return (f.numerator, f.denominator) return (f.numerator, f.denominator)
def limit_files(paths, limit): def limit_files(paths, limit):
if len(paths) <= limit:
cnt = len(paths)
num_to_delete = cnt - limit
if num_to_delete <= 0:
return paths return paths
skip = floor(num_to_delete / limit) if num_to_delete > cnt else ceil(cnt / num_to_delete)
to_keep = [] to_keep = []
all_idxes = np.arange(0, len(paths))
keep_idxes = np.linspace(0, len(paths) - 1, limit, dtype=int)
remove_idxes = set(all_idxes) - set(keep_idxes)
for i in range(len(paths)): p = np.array(paths)
if i % skip == 0: to_keep = list(p[keep_idxes])
os.remove(paths[i])
else:
to_keep.append(paths[i])
return limit_files(to_keep, limit) for idx in remove_idxes:
os.remove(paths[idx])
return to_keep
def to_deg(value, loc): def to_deg(value, loc):
"""convert decimal coordinates into degrees, munutes and seconds tuple """convert decimal coordinates into degrees, munutes and seconds tuple