Nekochu's picture
FE2E depth+normal CPU Space: FP8 dynamic INT8, single denoise
405d2b1
Raw
History Blame Contribute Delete
2.08 kB
""" Get samples from Hypersim dataset
Based on vkitti implementation
"""
import os
import cv2
import numpy as np
from infer.dataset_normal import Sample
def get_sample(base_data_dir, sample_path, info):
# e.g. sample_path = "ai_001_001/rgb_cam_00_fr0000.png"
scene_name = sample_path.split('/')[0]
img_filename = sample_path.split('/')[1]
# Extract frame number from filename like "rgb_cam_00_fr0000.png"
frame_num = img_filename.split('_fr')[1].split('.')[0]
dataset_path = os.path.join(base_data_dir, 'dsine_eval', 'hypersim')
img_path = os.path.join(dataset_path, sample_path)
# Build corresponding normal path
normal_filename = f'depth_plane_cam_00_fr{frame_num}_1024x0768_normal_decoded_normal.png'
normal_path = os.path.join(dataset_path, scene_name, normal_filename)
assert os.path.exists(img_path), f"Image not found: {img_path}"
assert os.path.exists(normal_path), f"Normal not found: {normal_path}"
# read image (H, W, 3)
img = cv2.cvtColor(cv2.imread(img_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
img = img.astype(np.float32) / 255.0
# read normal (H, W, 3)
normal = cv2.cvtColor(cv2.imread(normal_path, cv2.IMREAD_UNCHANGED), cv2.COLOR_BGR2RGB)
normal_mask = np.sum(normal, axis=2, keepdims=True) > 0
normal = (normal.astype(np.float32) / 255.0) * 2.0 - 1.0
# Create default intrinsics since hypersim doesn't provide them
# Using typical values for 1024x768 resolution
H, W = img.shape[:2]
fx = fy = 0.8 * W # Typical focal length assumption
cx = W / 2.0
cy = H / 2.0
intrins = np.array([
[fx, 0, cx],
[0, fy, cy],
[0, 0, 1]
], dtype=np.float32)
# Extract img_name for compatibility
img_name = img_filename.replace('.png', '')
sample = Sample(
img=img,
normal=normal,
normal_mask=normal_mask,
intrins=intrins,
dataset_name='hypersim',
scene_name=scene_name,
img_name=img_name,
info=info
)
return sample