Spaces:
Running
on
Zero
Running
on
Zero
# filter zero123 generated views from objaverse, filter out invalid images that are pure white | |
import os | |
import glob | |
import numpy as np | |
from tqdm import tqdm | |
import matplotlib.pyplot as plt | |
import shutil | |
import argparse | |
def filter_zero123_views(path): | |
invalid_ids = [] | |
objects = os.listdir(path) | |
for obj in tqdm(objects): | |
views = glob.glob(os.path.join(path, obj, '*.png')) | |
# check if the number of views is 12 | |
if len(views) != 12: | |
invalid_ids.append(obj) | |
print(obj, 'empty') | |
continue | |
# read image and check if it is pure white | |
invalid = 0 | |
for view in views: | |
img = plt.imread(view) | |
if np.all(img[:, :, -1] == 0.): | |
invalid += 1 | |
if invalid >= 3: | |
invalid_ids.append(obj) | |
print(obj, 'invalid') | |
return invalid_ids | |
def move_invalid_views(path, invalid_ids, invalid_path): | |
for obj_id in tqdm(invalid_ids): | |
# if exist, remove | |
if os.path.exists(os.path.join(path, obj_id)): | |
# move folder to invalid folder | |
shutil.move(os.path.join(path, obj_id), os.path.join(invalid_path, obj_id)) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser(description="Filter & Move Zero-1-to-3 Objaverse Rendering Data.") | |
parser.add_argument( | |
"--path", | |
type=str, | |
default="/data/objaverse/views_release", | |
required=True, | |
help="Path to Zero-1-to-3 Objaverse views_release Rendering Data.", | |
) | |
args = parser.parse_args() | |
path = args.path | |
# # filter invalid views | |
# invalid_ids = filter_zero123_views(path) | |
# # save invalid ids | |
# np.save('invalid_ids.npy', invalid_ids) | |
# # print(invalid_ids) | |
# print("Total invalid len ", len(invalid_ids)) | |
# move invalid views | |
invalid_ids = np.load('all_invalid.npy') | |
invalid_path = os.path.join(path, '../invalid') | |
os.makedirs(invalid_path, exist_ok=True) | |
move_invalid_views(path, invalid_ids, invalid_path) |