Download load_camera_params.py from lml2008/YOLO-3D: direct link, hf CLI and curl.
- Browser
- Download file 3.97 kB
-
https://huggingface.co/spaces/lml2008/YOLO-3D/resolve/main/load_camera_params.py
- Command line
-
hf download hf://spaces/lml2008/YOLO-3D/load_camera_params.py
-
curl -L -o load_camera_params.py https://huggingface.co/spaces/lml2008/YOLO-3D/resolve/main/load_camera_params.py
3.97 kB
| #!/usr/bin/env python3 | |
| import os | |
| import json | |
| import numpy as np | |
| from pathlib import Path | |
| def load_camera_params(params_file): | |
| """ | |
| Load camera parameters from a JSON file. | |
| Args: | |
| params_file (str): Path to the JSON file containing camera parameters | |
| Returns: | |
| dict: Dictionary containing camera parameters | |
| """ | |
| if not os.path.exists(params_file): | |
| print(f"Warning: Camera parameters file {params_file} not found. Using default parameters.") | |
| return None | |
| try: | |
| with open(params_file, 'r') as f: | |
| params = json.load(f) | |
| # Convert lists to numpy arrays | |
| params['camera_matrix'] = np.array(params['camera_matrix']) | |
| params['dist_coeffs'] = np.array(params['dist_coeffs']) | |
| params['projection_matrix'] = np.array(params['projection_matrix']) | |
| print(f"Loaded camera parameters from {params_file}") | |
| print(f"Camera matrix:\n{params['camera_matrix']}") | |
| print(f"Projection matrix:\n{params['projection_matrix']}") | |
| return params | |
| except Exception as e: | |
| print(f"Error loading camera parameters: {e}") | |
| return None | |
| def create_projection_matrix(camera_matrix, R=None, t=None): | |
| """ | |
| Create a projection matrix from camera intrinsic and extrinsic parameters. | |
| Args: | |
| camera_matrix (numpy.ndarray): Camera intrinsic matrix (3x3) | |
| R (numpy.ndarray): Rotation matrix (3x3) | |
| t (numpy.ndarray): Translation vector (3x1) | |
| Returns: | |
| numpy.ndarray: Projection matrix (3x4) | |
| """ | |
| if R is None: | |
| R = np.eye(3) | |
| if t is None: | |
| t = np.zeros((3, 1)) | |
| # Combine rotation and translation | |
| RT = np.hstack((R, t)) | |
| # Create projection matrix | |
| projection_matrix = camera_matrix @ RT | |
| return projection_matrix | |
| def apply_camera_params_to_estimator(bbox3d_estimator, params): | |
| """ | |
| Apply camera parameters to a 3D bounding box estimator. | |
| Args: | |
| bbox3d_estimator: BBox3DEstimator instance | |
| params (dict): Dictionary containing camera parameters | |
| Returns: | |
| bbox3d_estimator: Updated BBox3DEstimator instance | |
| """ | |
| if params is None: | |
| print("Warning: No camera parameters provided. Using default parameters.") | |
| return bbox3d_estimator | |
| # Update camera matrix | |
| if 'camera_matrix' in params: | |
| bbox3d_estimator.K = params['camera_matrix'] | |
| # Update projection matrix | |
| if 'projection_matrix' in params: | |
| bbox3d_estimator.P = params['projection_matrix'] | |
| print("Applied camera parameters to 3D bounding box estimator") | |
| return bbox3d_estimator | |
| def main(): | |
| """Example usage of the camera parameter functions.""" | |
| # Configuration variables (modify these as needed) | |
| # =============================================== | |
| # Input file | |
| params_file = "camera_params.json" # Path to camera parameters JSON file | |
| # Camera position (for example purposes) | |
| camera_height = 1.65 # Camera height above ground in meters | |
| # =============================================== | |
| # Load camera parameters | |
| params = load_camera_params(params_file) | |
| if params: | |
| print("\nCamera Parameters:") | |
| print(f"Image dimensions: {params['image_width']}x{params['image_height']}") | |
| print(f"Reprojection error: {params['reprojection_error']}") | |
| # Example of creating a projection matrix with different extrinsic parameters | |
| print(f"\nExample: Creating a projection matrix with camera raised {camera_height}m above ground") | |
| R = np.eye(3) | |
| t = np.array([[0], [camera_height], [0]]) # Camera above ground | |
| projection_matrix = create_projection_matrix(params['camera_matrix'], R, t) | |
| print(f"New projection matrix:\n{projection_matrix}") | |
| if __name__ == "__main__": | |
| main() |