Mercurial > hg > nsaunier > 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 |
