Spaces:
Sleeping
Sleeping
import torch | |
import numpy as np | |
def predict_z_location_single_row_lstm(row, ZlocE, scaler): | |
""" | |
Preprocess bounding box coordinates, depth information, and class type | |
to predict Z-location using the LSTM model for a single row. | |
Parameters: | |
- row: A single row of DataFrame with bounding box coordinates, depth info, and class type. | |
- ZlocE: Pre-loaded LSTM model for Z-location prediction. | |
- scaler: Scaler for normalizing input data. | |
Returns: | |
- z_loc_prediction: Predicted Z-location for the given row. | |
""" | |
# One-hot encoding of class type | |
class_type = row['class'] | |
if class_type == 'bicycle': | |
class_tensor = torch.tensor([[0, 1, 0, 0, 0, 0]], dtype=torch.float32) | |
elif class_type == 'car': | |
class_tensor = torch.tensor([[0, 0, 1, 0, 0, 0]], dtype=torch.float32) | |
elif class_type == 'person': | |
class_tensor = torch.tensor([[0, 0, 0, 1, 0, 0]], dtype=torch.float32) | |
elif class_type == 'train': | |
class_tensor = torch.tensor([[0, 0, 0, 0, 1, 0]], dtype=torch.float32) | |
elif class_type == 'truck': | |
class_tensor = torch.tensor([[0, 0, 0, 0, 0, 1]], dtype=torch.float32) | |
else: | |
class_tensor = torch.tensor([[1, 0, 0, 0, 0, 0]], dtype=torch.float32) | |
# Prepare input data (bounding box + depth info) | |
input_data = np.array([row[['xmin', 'ymin', 'xmax', 'ymax', 'width', 'height', 'depth_mean', 'depth_median', | |
'depth_mean_trim']].values], dtype=np.float32) | |
input_data = torch.from_numpy(input_data) | |
# Concatenate class information | |
input_data = torch.cat([input_data, class_tensor], dim=-1) | |
# Scale the input data | |
scaled_input = torch.tensor(scaler.transform(input_data), dtype=torch.float32).unsqueeze(0).unsqueeze(0) | |
# Use the LSTM model to predict the Z-location | |
z_loc_prediction = ZlocE.predict(scaled_input).detach().numpy()[0] | |
return z_loc_prediction | |