77
88from .annotation import Point3D , is_local_path
99from .constants import (
10+ CAMERA_MODEL_KEY ,
1011 CAMERA_PARAMS_KEY ,
1112 CX_KEY ,
1213 CY_KEY ,
1314 FX_KEY ,
1415 FY_KEY ,
1516 HEADING_KEY ,
1617 IMAGE_URL_KEY ,
18+ K1_KEY ,
19+ K2_KEY ,
20+ K3_KEY ,
21+ K4_KEY ,
1722 METADATA_KEY ,
1823 ORIGINAL_IMAGE_URL_KEY ,
24+ P1_KEY ,
25+ P2_KEY ,
1926 POINTCLOUD_URL_KEY ,
2027 POSITION_KEY ,
2128 REFERENCE_ID_KEY ,
2936)
3037
3138
39+ class CameraModels (Enum ):
40+ BROWN_CONRADY = "brown_conrady"
41+ FISHEYE = "fisheye"
42+
43+ def __contains__ (self , item ):
44+ try :
45+ self (item )
46+ except ValueError :
47+ return False
48+ return True
49+
50+
3251@dataclass
3352class Quaternion :
3453 """Quaternion objects are used to represent rotation.
@@ -92,6 +111,20 @@ class CameraParams:
92111 fy : float
93112 cx : float
94113 cy : float
114+ camera_model : str
115+ k1 : float
116+ k2 : float
117+ k3 : float
118+ k4 : float
119+ p1 : float
120+ p2 : float
121+
122+ def __post_init__ (self ):
123+ if self .camera_model is not None :
124+ if self .camera_model not in CameraModels :
125+ raise ValueError (
126+ f'Invalid Camera Model, the supported options are "{ CameraModels .BROWN_CONRADY } " and "{ CameraModels .FISHEYE } "'
127+ )
95128
96129 @classmethod
97130 def from_json (cls , payload : Dict [str , Any ]):
@@ -103,18 +136,40 @@ def from_json(cls, payload: Dict[str, Any]):
103136 payload [FY_KEY ],
104137 payload [CX_KEY ],
105138 payload [CY_KEY ],
139+ payload .get (K1_KEY , None ),
140+ payload .get (K2_KEY , None ),
141+ payload .get (K3_KEY , None ),
142+ payload .get (K4_KEY , None ),
143+ payload .get (P1_KEY , None ),
144+ payload .get (P2_KEY , None ),
145+ payload .get (CAMERA_MODEL_KEY , None ),
106146 )
107147
108148 def to_payload (self ) -> dict :
109149 """Serializes camera params object to schematized JSON dict."""
110- return {
150+ payload = {
111151 POSITION_KEY : self .position .to_payload (),
112152 HEADING_KEY : self .heading .to_payload (),
113153 FX_KEY : self .fx ,
114154 FY_KEY : self .fy ,
115155 CX_KEY : self .cx ,
116156 CY_KEY : self .cy ,
117157 }
158+ if self .k1 :
159+ payload [K1_KEY ] = self .k1
160+ if self .k2 :
161+ payload [K2_KEY ] = self .k2
162+ if self .k3 :
163+ payload [K3_KEY ] = self .k3
164+ if self .k4 :
165+ payload [K4_KEY ] = self .k4
166+ if self .p1 :
167+ payload [P1_KEY ] = self .p1
168+ if self .p2 :
169+ payload [P2_KEY ] = self .p2
170+ if self .camera_model :
171+ payload [CAMERA_MODEL_KEY ] = self .camera_model
172+ return payload
118173
119174
120175class DatasetItemType (Enum ):
0 commit comments