Download simulation/data.py from mohammed-aljafry/my-interfuser-model: direct link, hf CLI and curl.
- Browser
- Download file 3.54 kB
-
https://huggingface.co/mohammed-aljafry/my-interfuser-model/resolve/main/simulation/data.py
- Command line
-
hf download hf://mohammed-aljafry/my-interfuser-model/simulation/data.py
-
curl -L -o data.py https://huggingface.co/mohammed-aljafry/my-interfuser-model/resolve/main/simulation/data.py
3.54 kB
| # ========================================================= | |
| # الملف 3: simulation/data.py | |
| # ========================================================= | |
| import torch | |
| from torch.utils.data import Dataset | |
| import cv2 | |
| import json | |
| from pathlib import Path | |
| from torchvision import transforms | |
| import os | |
| class LMDriveDataset(Dataset): | |
| def __init__(self, data_dir, transform=None, lidar_transform=None): | |
| self.data_dir = Path(data_dir) | |
| self.transform = transform or self.get_default_transform() | |
| self.lidar_transform = lidar_transform or self.get_default_lidar_transform() | |
| self.samples = [] | |
| measurement_dir = self.data_dir / "measurements" | |
| image_dir = self.data_dir / "rgb_full" | |
| if not measurement_dir.exists() or not image_dir.exists(): | |
| print(f"Warning: Data directory {data_dir} not found or incomplete.") | |
| return | |
| measurement_files = sorted(measurement_dir.glob("*.json")) | |
| for measurement_path in measurement_files: | |
| frame_id = int(measurement_path.stem) | |
| image_path = image_dir / f"{frame_id:04d}.jpg" | |
| if not image_path.exists(): continue | |
| with open(measurement_path, "r") as f: measurements_data = json.load(f) | |
| self.samples.append({"image_path": str(image_path),"measurement_path": str(measurement_path),"frame_id": frame_id,"measurements": measurements_data}) | |
| def __len__(self): return len(self.samples) | |
| def __getitem__(self, idx): | |
| sample = self.samples[idx]; full_image = cv2.imread(sample["image_path"]) | |
| if full_image is None: raise ValueError(f"Failed to load image: {sample['image_path']}") | |
| full_image = cv2.cvtColor(full_image, cv2.COLOR_BGR2RGB) | |
| front_image = full_image[:600, :800]; left_image = full_image[600:1200, :800] | |
| right_image = full_image[1200:1800, :800]; center_image = full_image[1800:2400, :800] | |
| front_tensor=self.transform(front_image);left_tensor=self.transform(left_image);right_tensor=self.transform(right_image);center_tensor=self.transform(center_image) | |
| lidar_path = str(self.data_dir / "lidar" / f"{sample['frame_id']:04d}.png") | |
| if os.path.exists(lidar_path): | |
| lidar = cv2.imread(lidar_path) | |
| if len(lidar.shape) == 2: lidar = cv2.cvtColor(lidar, cv2.COLOR_GRAY2BGR) | |
| lidar = cv2.cvtColor(lidar, cv2.COLOR_BGR2RGB) | |
| else: lidar = np.zeros((112, 112, 3), dtype=np.uint8) | |
| lidar_tensor = self.lidar_transform(lidar) | |
| m = sample["measurements"] | |
| target_point = torch.tensor([m.get("x_command", 0.0), m.get("y_command", 0.0)], dtype=torch.float32) | |
| measurements = torch.tensor([m.get("x",0.0),m.get("y",0.0),m.get("theta",0.0),m.get("speed",0.0),m.get("steer",0.0),m.get("throttle",0.0),int(m.get("brake",False)),m.get("command",0),int(m.get("is_junction",False)),int(m.get("should_brake",0))], dtype=torch.float32) | |
| return {"rgb":front_tensor,"rgb_left":left_tensor,"rgb_right":right_tensor,"rgb_center":center_tensor,"lidar":lidar_tensor,"measurements":measurements,"target_point":target_point} | |
| def get_default_transform(self): | |
| return transforms.Compose([transforms.ToPILImage(),transforms.Resize((224,224)),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])]) | |
| def get_default_lidar_transform(self): | |
| return transforms.Compose([transforms.ToPILImage(),transforms.Resize((112,112)),transforms.ToTensor(),transforms.Normalize(mean=[0.5],std=[0.5])]) | |