Mercurial Hosting > traffic-intelligence
changeset 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 | 28526917a583 |
children | f6d5da619307 |
files | python/metadata.py scripts/play-synced-videos.py |
diffstat | 1 files changed, 73 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/python/metadata.py Mon Jun 27 16:19:34 2016 -0400 +++ b/python/metadata.py Tue Jun 28 15:55:32 2016 -0400 @@ -67,46 +67,82 @@ resY = Column(Integer) frameRate = Column(Float) frameRateTimeUnit = Column(String, default = 's') - undistort = Column(Boolean) - intrinsicCameraMatrixStr = Column(String) - distortionCoefficientsStr = Column(String) + intrinsicCameraMatrix00 = Column(Float) + intrinsicCameraMatrix01 = Column(Float) + intrinsicCameraMatrix02 = Column(Float) + intrinsicCameraMatrix10 = Column(Float) + intrinsicCameraMatrix11 = Column(Float) + intrinsicCameraMatrix12 = Column(Float) + intrinsicCameraMatrix20 = Column(Float) + intrinsicCameraMatrix21 = Column(Float) + intrinsicCameraMatrix22 = Column(Float) + distortionCoefficients0 = Column(Float) + distortionCoefficients1 = Column(Float) + distortionCoefficients2 = Column(Float) + distortionCoefficients3 = Column(Float) + distortionCoefficients4 = Column(Float) undistortedImageMultiplication = Column(Float) - def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, undistort = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): + def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): self.name = name self.resX = resX self.resY = resY self.frameRate = frameRate self.frameRateTimeUnit = frameRateTimeUnit - self.undistort = False if trackingConfigurationFilename is not None: from storage import ProcessParameters params = ProcessParameters(trackingConfigurationFilename) - if params.undistort: - self.undistort = params.undistort - self.intrinsicCameraMatrix = params.intrinsicCameraMatrix - self.distortionCoefficients = params.distortionCoefficients - self.undistortedImageMultiplication = params.undistortedImageMultiplication - elif undistort is not None: - self.undistort = undistort + self.intrinsicCameraMatrix = params.intrinsicCameraMatrix + self.distortionCoefficients = params.distortionCoefficients + self.undistortedImageMultiplication = params.undistortedImageMultiplication + else: self.intrinsicCameraMatrix = intrinsicCameraMatrix self.distortionCoefficients = distortionCoefficients self.undistortedImageMultiplication = undistortedImageMultiplication - - # populate the db - if hasattr(self, 'intrinsicCameraMatrix') and self.intrinsicCameraMatrix is not None\ - and hasattr(self, 'distortionCoefficients') and self.distortionCoefficients is not None: - self.intrinsicCameraMatrixStr = ' '.join('{}'.format(x) for x in self.intrinsicCameraMatrix.flatten('C')) - self.distortionCoefficientsStr = ' '.join('{}'.format(x)for x in self.distortionCoefficients) + + if self.intrinsicCameraMatrix is not None and self.intrinsicCameraMatrix.size == 9: + self.intrinsicCameraMatrix00 = self.intrinsicCameraMatrix[0,0] + self.intrinsicCameraMatrix01 = self.intrinsicCameraMatrix[0,1] + self.intrinsicCameraMatrix02 = self.intrinsicCameraMatrix[0,2] + self.intrinsicCameraMatrix10 = self.intrinsicCameraMatrix[1,0] + self.intrinsicCameraMatrix11 = self.intrinsicCameraMatrix[1,1] + self.intrinsicCameraMatrix12 = self.intrinsicCameraMatrix[1,2] + self.intrinsicCameraMatrix20 = self.intrinsicCameraMatrix[2,0] + self.intrinsicCameraMatrix21 = self.intrinsicCameraMatrix[2,1] + self.intrinsicCameraMatrix22 = self.intrinsicCameraMatrix[2,2] + if self.distortionCoefficients is not None and len(self.distortionCoefficients) == 5: + self.distortionCoefficients0 = self.distortionCoefficients[0] + self.distortionCoefficients1 = self.distortionCoefficients[1] + self.distortionCoefficients2 = self.distortionCoefficients[2] + self.distortionCoefficients3 = self.distortionCoefficients[3] + self.distortionCoefficients4 = self.distortionCoefficients[4] @orm.reconstructor def initOnLoad(self): - from numpy import array - if len(self.intrinsicCameraMatrixStr) > 0: - self.intrinsicCameraMatrix = array([float(x) for x in self.intrinsicCameraMatrixStr.split(" ")]).reshape(3,3) - if len(self.distortionCoefficientsStr) > 0: - self.distortionCoefficients = [float(x) for x in self.distortionCoefficientsStr.split(" ")] + from numpy import zeros + if self.intrinsicCameraMatrix00 is not None: + self.intrinsicCameraMatrix = zeros((3,3)) + self.intrinsicCameraMatrix[0,0] = self.intrinsicCameraMatrix00 + self.intrinsicCameraMatrix[0,1] = self.intrinsicCameraMatrix01 + self.intrinsicCameraMatrix[0,2] = self.intrinsicCameraMatrix02 + self.intrinsicCameraMatrix[1,0] = self.intrinsicCameraMatrix10 + self.intrinsicCameraMatrix[1,1] = self.intrinsicCameraMatrix11 + self.intrinsicCameraMatrix[1,2] = self.intrinsicCameraMatrix12 + self.intrinsicCameraMatrix[2,0] = self.intrinsicCameraMatrix20 + self.intrinsicCameraMatrix[2,1] = self.intrinsicCameraMatrix21 + self.intrinsicCameraMatrix[2,2] = self.intrinsicCameraMatrix22 + else: + self.intrinsicCameraMatrix = None + if self.distortionCoefficients0 is not None: + self.distortionCoefficients = [0]*5 + self.distortionCoefficients[0] = self.distortionCoefficients0 + self.distortionCoefficients[1] = self.distortionCoefficients1 + self.distortionCoefficients[2] = self.distortionCoefficients2 + self.distortionCoefficients[3] = self.distortionCoefficients3 + self.distortionCoefficients[4] = self.distortionCoefficients4 + else: + self.distortionCoefficients = None class CameraView(Base): __tablename__ = 'camera_views' @@ -115,18 +151,19 @@ homographyFilename = Column(String) # path to homograph filename, relative to the site name siteIdx = Column(Integer, ForeignKey('sites.idx')) cameraTypeIdx = Column(Integer, ForeignKey('camera_types.idx')) - homographyDistanceUnit = Column(String, default = 'm') # make sure it is default in the database trackingConfigurationFilename = Column(String) # path to configuration .cfg file, relative to site name - + maskFilename = Column(String) # path to mask file, relative to site name + site = relationship("Site", backref=backref('sites', order_by = idx)) cameraType = relationship('CameraType', backref=backref('camera_views', order_by = idx)) - def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename): + def __init__(self, description, homographyFilename, site, cameraType, trackingConfigurationFilename, maskFilename): self.description = description self.homographyFilename = homographyFilename self.site = site self.cameraType = cameraType self.trackingConfigurationFilename = trackingConfigurationFilename + self.maskFilename = maskFilename def getHomographyFilename(self, relativeToSiteFilename = True): if relativeToSiteFilename: @@ -140,9 +177,18 @@ else: return self.trackingConfigurationFilename + def getMaskFilename(self, relativeToSiteFilename = True): + if relativeToSiteFilename: + return self.site.getFilename()+path.sep+self.maskFilename + else: + return self.maskFilename + def getTrackingParameters(self): - return ProcessParameters(getTrackingConfigurationFilename()) + return ProcessParameters(self.getTrackingConfigurationFilename()) + def getHomographyDistanceUnit(self): + return self.site.worldDistanceUnit + class Alignment(Base): __tablename__ = 'alignments' idx = Column(Integer, primary_key=True)