Mercurial Hosting > traffic-intelligence
comparison python/metadata.py @ 825:6e4357e9116d
corrected and changed matrix to individual columns
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Tue, 28 Jun 2016 15:55:32 -0400 |
parents | 26daf35180ad |
children | 14e4ad7c7420 |
comparison
equal
deleted
inserted
replaced
824:28526917a583 | 825:6e4357e9116d |
---|---|
65 name = Column(String) | 65 name = Column(String) |
66 resX = Column(Integer) | 66 resX = Column(Integer) |
67 resY = Column(Integer) | 67 resY = Column(Integer) |
68 frameRate = Column(Float) | 68 frameRate = Column(Float) |
69 frameRateTimeUnit = Column(String, default = 's') | 69 frameRateTimeUnit = Column(String, default = 's') |
70 undistort = Column(Boolean) | 70 intrinsicCameraMatrix00 = Column(Float) |
71 intrinsicCameraMatrixStr = Column(String) | 71 intrinsicCameraMatrix01 = Column(Float) |
72 distortionCoefficientsStr = Column(String) | 72 intrinsicCameraMatrix02 = Column(Float) |
73 intrinsicCameraMatrix10 = Column(Float) | |
74 intrinsicCameraMatrix11 = Column(Float) | |
75 intrinsicCameraMatrix12 = Column(Float) | |
76 intrinsicCameraMatrix20 = Column(Float) | |
77 intrinsicCameraMatrix21 = Column(Float) | |
78 intrinsicCameraMatrix22 = Column(Float) | |
79 distortionCoefficients0 = Column(Float) | |
80 distortionCoefficients1 = Column(Float) | |
81 distortionCoefficients2 = Column(Float) | |
82 distortionCoefficients3 = Column(Float) | |
83 distortionCoefficients4 = Column(Float) | |
73 undistortedImageMultiplication = Column(Float) | 84 undistortedImageMultiplication = Column(Float) |
74 | 85 |
75 def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, undistort = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): | 86 def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): |
76 self.name = name | 87 self.name = name |
77 self.resX = resX | 88 self.resX = resX |
78 self.resY = resY | 89 self.resY = resY |
79 self.frameRate = frameRate | 90 self.frameRate = frameRate |
80 self.frameRateTimeUnit = frameRateTimeUnit | 91 self.frameRateTimeUnit = frameRateTimeUnit |
81 self.undistort = False | |
82 | 92 |
83 if trackingConfigurationFilename is not None: | 93 if trackingConfigurationFilename is not None: |
84 from storage import ProcessParameters | 94 from storage import ProcessParameters |
85 params = ProcessParameters(trackingConfigurationFilename) | 95 params = ProcessParameters(trackingConfigurationFilename) |
86 if params.undistort: | 96 self.intrinsicCameraMatrix = params.intrinsicCameraMatrix |
87 self.undistort = params.undistort | 97 self.distortionCoefficients = params.distortionCoefficients |
88 self.intrinsicCameraMatrix = params.intrinsicCameraMatrix | 98 self.undistortedImageMultiplication = params.undistortedImageMultiplication |
89 self.distortionCoefficients = params.distortionCoefficients | 99 else: |
90 self.undistortedImageMultiplication = params.undistortedImageMultiplication | |
91 elif undistort is not None: | |
92 self.undistort = undistort | |
93 self.intrinsicCameraMatrix = intrinsicCameraMatrix | 100 self.intrinsicCameraMatrix = intrinsicCameraMatrix |
94 self.distortionCoefficients = distortionCoefficients | 101 self.distortionCoefficients = distortionCoefficients |
95 self.undistortedImageMultiplication = undistortedImageMultiplication | 102 self.undistortedImageMultiplication = undistortedImageMultiplication |
96 | 103 |
97 # populate the db | 104 if self.intrinsicCameraMatrix is not None and self.intrinsicCameraMatrix.size == 9: |
98 if hasattr(self, 'intrinsicCameraMatrix') and self.intrinsicCameraMatrix is not None\ | 105 self.intrinsicCameraMatrix00 = self.intrinsicCameraMatrix[0,0] |
99 and hasattr(self, 'distortionCoefficients') and self.distortionCoefficients is not None: | 106 self.intrinsicCameraMatrix01 = self.intrinsicCameraMatrix[0,1] |
100 self.intrinsicCameraMatrixStr = ' '.join('{}'.format(x) for x in self.intrinsicCameraMatrix.flatten('C')) | 107 self.intrinsicCameraMatrix02 = self.intrinsicCameraMatrix[0,2] |
101 self.distortionCoefficientsStr = ' '.join('{}'.format(x)for x in self.distortionCoefficients) | 108 self.intrinsicCameraMatrix10 = self.intrinsicCameraMatrix[1,0] |
109 self.intrinsicCameraMatrix11 = self.intrinsicCameraMatrix[1,1] | |
110 self.intrinsicCameraMatrix12 = self.intrinsicCameraMatrix[1,2] | |
111 self.intrinsicCameraMatrix20 = self.intrinsicCameraMatrix[2,0] | |
112 self.intrinsicCameraMatrix21 = self.intrinsicCameraMatrix[2,1] | |
113 self.intrinsicCameraMatrix22 = self.intrinsicCameraMatrix[2,2] | |
114 if self.distortionCoefficients is not None and len(self.distortionCoefficients) == 5: | |
115 self.distortionCoefficients0 = self.distortionCoefficients[0] | |
116 self.distortionCoefficients1 = self.distortionCoefficients[1] | |
117 self.distortionCoefficients2 = self.distortionCoefficients[2] | |
118 self.distortionCoefficients3 = self.distortionCoefficients[3] | |
119 self.distortionCoefficients4 = self.distortionCoefficients[4] | |
102 | 120 |
103 @orm.reconstructor | 121 @orm.reconstructor |
104 def initOnLoad(self): | 122 def initOnLoad(self): |
105 from numpy import array | 123 from numpy import zeros |
106 if len(self.intrinsicCameraMatrixStr) > 0: | 124 if self.intrinsicCameraMatrix00 is not None: |
107 self.intrinsicCameraMatrix = array([float(x) for x in self.intrinsicCameraMatrixStr.split(" ")]).reshape(3,3) | 125 self.intrinsicCameraMatrix = zeros((3,3)) |
108 if len(self.distortionCoefficientsStr) > 0: | 126 self.intrinsicCameraMatrix[0,0] = self.intrinsicCameraMatrix00 |
109 self.distortionCoefficients = [float(x) for x in self.distortionCoefficientsStr.split(" ")] | 127 self.intrinsicCameraMatrix[0,1] = self.intrinsicCameraMatrix01 |
128 self.intrinsicCameraMatrix[0,2] = self.intrinsicCameraMatrix02 | |
129 self.intrinsicCameraMatrix[1,0] = self.intrinsicCameraMatrix10 | |
130 self.intrinsicCameraMatrix[1,1] = self.intrinsicCameraMatrix11 | |
131 self.intrinsicCameraMatrix[1,2] = self.intrinsicCameraMatrix12 | |
132 self.intrinsicCameraMatrix[2,0] = self.intrinsicCameraMatrix20 | |
133 self.intrinsicCameraMatrix[2,1] = self.intrinsicCameraMatrix21 | |
134 self.intrinsicCameraMatrix[2,2] = self.intrinsicCameraMatrix22 | |
135 else: | |
136 self.intrinsicCameraMatrix = None | |
137 if self.distortionCoefficients0 is not None: | |
138 self.distortionCoefficients = [0]*5 | |
139 self.distortionCoefficients[0] = self.distortionCoefficients0 | |
140 self.distortionCoefficients[1] = self.distortionCoefficients1 | |
141 self.distortionCoefficients[2] = self.distortionCoefficients2 | |
142 self.distortionCoefficients[3] = self.distortionCoefficients3 | |
143 self.distortionCoefficients[4] = self.distortionCoefficients4 | |
144 else: | |
145 self.distortionCoefficients = None | |
110 | 146 |
111 class CameraView(Base): | 147 class CameraView(Base): |
112 __tablename__ = 'camera_views' | 148 __tablename__ = 'camera_views' |
113 idx = Column(Integer, primary_key=True) | 149 idx = Column(Integer, primary_key=True) |
114 description = Column(String) | 150 description = Column(String) |
115 homographyFilename = Column(String) # path to homograph filename, relative to the site name | 151 homographyFilename = Column(String) # path to homograph filename, relative to the site name |
116 siteIdx = Column(Integer, ForeignKey('sites.idx')) | 152 siteIdx = Column(Integer, ForeignKey('sites.idx')) |
117 cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx')) | 153 cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx')) |
118 homographyDistanceUnit = Column(String, default = 'm') # make sure it is default in the database | |
119 trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name | 154 trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name |
120 | 155 maskFilename = Column(String) # path to mask file, relative to site name |
156 | |
121 site = relationship("Site", backref=backref('sites', order_by = idx)) | 157 site = relationship("Site", backref=backref('sites', order_by = idx)) |
122 cameraType = relationship('CameraType', backref=backref('camera_views', order_by = idx)) | 158 cameraType = relationship('CameraType', backref=backref('camera_views', order_by = idx)) |
123 | 159 |
124 def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename): | 160 def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename, maskFilename): |
125 self.description = description | 161 self.description = description |
126 self.homographyFilename = homographyFilename | 162 self.homographyFilename = homographyFilename |
127 self.site = site | 163 self.site = site |
128 self.cameraType = cameraType | 164 self.cameraType = cameraType |
129 self.trackingConfigurationFilename = trackingConfigurationFilename | 165 self.trackingConfigurationFilename = trackingConfigurationFilename |
166 self.maskFilename = maskFilename | |
130 | 167 |
131 def getHomographyFilename(self, relativeToSiteFilename = True): | 168 def getHomographyFilename(self, relativeToSiteFilename = True): |
132 if relativeToSiteFilename: | 169 if relativeToSiteFilename: |
133 return self.site.getFilename()+path.sep+self.homographyFilename | 170 return self.site.getFilename()+path.sep+self.homographyFilename |
134 else: | 171 else: |
138 if relativeToSiteFilename: | 175 if relativeToSiteFilename: |
139 return self.site.getFilename()+path.sep+self.trackingConfigurationFilename | 176 return self.site.getFilename()+path.sep+self.trackingConfigurationFilename |
140 else: | 177 else: |
141 return self.trackingConfigurationFilename | 178 return self.trackingConfigurationFilename |
142 | 179 |
180 def getMaskFilename(self, relativeToSiteFilename = True): | |
181 if relativeToSiteFilename: | |
182 return self.site.getFilename()+path.sep+self.maskFilename | |
183 else: | |
184 return self.maskFilename | |
185 | |
143 def getTrackingParameters(self): | 186 def getTrackingParameters(self): |
144 return ProcessParameters(getTrackingConfigurationFilename()) | 187 return ProcessParameters(self.getTrackingConfigurationFilename()) |
145 | 188 |
189 def getHomographyDistanceUnit(self): | |
190 return self.site.worldDistanceUnit | |
191 | |
146 class Alignment(Base): | 192 class Alignment(Base): |
147 __tablename__ = 'alignments' | 193 __tablename__ = 'alignments' |
148 idx = Column(Integer, primary_key=True) | 194 idx = Column(Integer, primary_key=True) |
149 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx')) | 195 cameraViewIdx = Column(Integer, ForeignKey('camera_views.idx')) |
150 | 196 |