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