Mercurial Hosting > traffic-intelligence
changeset 861:f9c9457b60c2
modification of storage of intrinsic camera and distortion parameters
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 04 Nov 2016 11:47:42 -0400 |
parents | 07c5eab11eba |
children | 2d6249fe905a |
files | python/metadata.py python/storage.py |
diffstat | 2 files changed, 34 insertions(+), 55 deletions(-) [+] |
line wrap: on
line diff
--- a/python/metadata.py Sat Oct 29 16:34:05 2016 -0400 +++ b/python/metadata.py Fri Nov 04 11:47:42 2016 -0400 @@ -4,7 +4,7 @@ from os import path from math import floor -from numpy import zeros +from numpy import zeros, loadtxt, array from sqlalchemy import orm, create_engine, Column, Integer, Float, DateTime, String, ForeignKey, Boolean, Interval from sqlalchemy.orm import relationship, backref, sessionmaker @@ -80,79 +80,48 @@ resY = Column(Integer) frameRate = Column(Float) frameRateTimeUnit = Column(String, default = 's') - 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) + intrinsicCameraMatrixStr = Column(String) + distortionCoefficientsStr = Column(String) undistortedImageMultiplication = Column(Float) - def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): + def __init__(self, name, resX, resY, frameRate, frameRateTimeUnit = 's', trackingConfigurationFilename = None, intrinsicCameraFilename = None, intrinsicCameraMatrix = None, distortionCoefficients = None, undistortedImageMultiplication = None): self.name = name self.resX = resX self.resY = resY self.frameRate = frameRate self.frameRateTimeUnit = frameRateTimeUnit - + self.intrinsicCameraMatrix = None # should be np.array + self.distortionCoefficients = None # list + if trackingConfigurationFilename is not None: from storage import ProcessParameters params = ProcessParameters(trackingConfigurationFilename) self.intrinsicCameraMatrix = params.intrinsicCameraMatrix self.distortionCoefficients = params.distortionCoefficients self.undistortedImageMultiplication = params.undistortedImageMultiplication + elif intrinsicCameraFilename is not None: + self.intrinsicCameraMatrix = loadtxt(intrinsicCameraFilename) + self.distortionCoefficients = distortionCoefficients + self.undistortedImageMultiplication = undistortedImageMultiplication else: self.intrinsicCameraMatrix = intrinsicCameraMatrix self.distortionCoefficients = distortionCoefficients self.undistortedImageMultiplication = undistortedImageMultiplication - 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.intrinsicCameraMatrix is not None: + self.intrinsicCameraMatrixStr = '{}'.format(self.intrinsicCameraMatrix.tolist()) 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] + self.distortionCoefficientsStr = '{}'.format(self.distortionCoefficients) @orm.reconstructor def initOnLoad(self): - 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 + if self.intrinsicCameraMatrixStr is not None: + from ast import literal_eval + self.intrinsicCameraMatrix = array(literal_eval(self.intrinsicCameraMatrixStr)) 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 + if self.distortionCoefficientsStr is not None: + self.distortionCoefficients = literal_eval(self.distortionCoefficientsStr) else: self.distortionCoefficients = None @@ -162,7 +131,15 @@ else: self.map1 = None self.map2 = None - + + @staticmethod + def getCameraType(session, cameraTypeId): + 'Returns the site(s) matching the index or the name' + if str.isdigit(cameraTypeId): + return session.query(CameraType).filter(CameraType.idx == int(cameraTypeId)).all() + else: + return session.query(CameraType).filter(CameraType.name.like('%'+cameraTypeId+'%')).all() + class CameraView(Base): __tablename__ = 'camera_views' idx = Column(Integer, primary_key=True)
--- a/python/storage.py Sat Oct 29 16:34:05 2016 -0400 +++ b/python/storage.py Fri Nov 04 11:47:42 2016 -0400 @@ -437,8 +437,7 @@ def deleteFromSqlite(filename, dataType): 'Deletes (drops) some tables in the filename depending on type of data' - import os - if os.path.isfile(filename): + if path.isfile(filename): connection = sqlite3.connect(filename) if dataType == 'object': dropTables(connection, ['objects', 'objects_features']) @@ -1258,6 +1257,9 @@ config = ConfigParser() config.readfp(FakeSecHead(openCheck(filename))) + # check if path contains directory names + dirname = path.split(filename)[0] + self.sectionHeader = config.sections()[0] # Tracking/display parameters self.videoFilename = config.get(self.sectionHeader, 'video-filename') @@ -1268,8 +1270,8 @@ else: self.homography = None self.intrinsicCameraFilename = config.get(self.sectionHeader, 'intrinsic-camera-filename') - if (path.exists(self.intrinsicCameraFilename)): - self.intrinsicCameraMatrix = loadtxt(self.intrinsicCameraFilename) + if (path.exists(dirname+path.sep+self.intrinsicCameraFilename)): + self.intrinsicCameraMatrix = loadtxt(dirname+path.sep+self.intrinsicCameraFilename) else: self.intrinsicCameraMatrix = None distortionCoefficients = getValuesFromINIFile(filename, 'distortion-coefficients', '=')