comparison trafficintelligence/storage.py @ 1078:8cc3feb1c1c5

merged
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 20 Jul 2018 16:26:57 -0400
parents 3939ae415be0
children e53c6e87bb3f
comparison
equal deleted inserted replaced
1074:b123fa0e5440 1078:8cc3feb1c1c5
1375 class ProcessParameters(VideoFilenameAddable): 1375 class ProcessParameters(VideoFilenameAddable):
1376 '''Class for all parameters controlling data processing: input, 1376 '''Class for all parameters controlling data processing: input,
1377 method parameters, etc. for tracking and safety 1377 method parameters, etc. for tracking and safety
1378 1378
1379 Note: framerate is already taken into account''' 1379 Note: framerate is already taken into account'''
1380 1380
1381 def loadTrackerConfig(self, filename = None): 1381 def loadConfigFile(self, filename):
1382 from configparser import ConfigParser 1382 from configparser import ConfigParser
1383 1383
1384 config = ConfigParser({ 'acceleration-bound' : '3', 1384 config = ConfigParser({ 'acceleration-bound' : '3',
1385 'min-velocity-cosine' : '0.8', 1385 'min-velocity-cosine' : '0.8',
1386 'ndisplacements' : '3', 1386 'ndisplacements' : '3',
1387 'max-nfeatures' : '1000', 1387 'max-nfeatures' : '1000',
1388 'feature-quality' : '0.0812219538558', 1388 'feature-quality' : '0.0812219538558',
1397 'feature-flag' : '0', 1397 'feature-flag' : '0',
1398 'min-feature-eig-threshold' : '1e-4', 1398 'min-feature-eig-threshold' : '1e-4',
1399 'min-feature-time' : '15', 1399 'min-feature-time' : '15',
1400 'min-feature-displacement' : '0.05', 1400 'min-feature-displacement' : '0.05',
1401 'tracker-reload-time' : '10'}, strict=False) 1401 'tracker-reload-time' : '10'}, strict=False)
1402 if filename is not None:
1403 config.read_file(addSectionHeader(utils.openCheck(filename)))
1404 self.sectionHeader = config.sections()[0]
1405 else:
1406 self.sectionHeader = 'DEFAULT'
1407
1408 #Tracker parameters
1409 self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
1410 self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
1411 self.ndisplacements = config.getint(self.sectionHeader, 'ndisplacements')
1412 self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures')
1413 self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt')
1414 self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality')
1415 self.blockSize = config.getint(self.sectionHeader, 'block-size')
1416 self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector')
1417 self.k = config.getfloat(self.sectionHeader, 'k')
1418 self.winSize = config.getint(self.sectionHeader, 'window-size')
1419 self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level')
1420 self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations')
1421 self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error')
1422 self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag')
1423 self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold')
1424 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1425 self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement')
1426 self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time')
1427
1428 def loadHomographyConfig(self, filename = None):
1429 if filename is None:
1430 self.homographyFilename = None
1431 self.homography = None
1432 else :
1433 from configparser import ConfigParser
1434 config = ConfigParser(strict=False)
1435 config.read_file(addSectionHeader(utils.openCheck(filename)))
1436 parentPath = Path(filename).parent
1437 self.sectionHeader = config.sections()[0]
1438 self.homographyFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'homography-filename'))
1439 if Path(self.homographyFilename).is_file():
1440 self.homography = loadtxt(self.homographyFilename)
1441 else:
1442 self.homography = None
1443
1444 def loadDistortionConfig(self, filename = None):
1445 if filename is None:
1446 self.intrinsicCameraFilename = None
1447 self.intrinsicCameraMatrix = None
1448 self.distortionCoefficients = None
1449 self.undistort = False
1450 self.undistortedImageMultiplication = 1.
1451 else:
1452 from configparser import ConfigParser
1453 config = ConfigParser(strict=False)
1454 config.read_file(addSectionHeader(utils.openCheck(filename)))
1455 parentPath = Path(filename).parent
1456 self.sectionHeader = config.sections()[0]
1457 self.intrinsicCameraFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'intrinsic-camera-filename'))
1458 if Path(self.intrinsicCameraFilename).is_file():
1459 self.intrinsicCameraMatrix = loadtxt(self.intrinsicCameraFilename)
1460 else:
1461 self.intrinsicCameraMatrix = None
1462 distortionCoefficients = getValuesFromINIFile(filename, 'distortion-coefficients', '=')
1463 self.distortionCoefficients = [float(x) for x in distortionCoefficients]
1464 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
1465 self.undistort = config.getboolean(self.sectionHeader, 'undistort')
1466
1467
1468 def loadConfigFile(self, filename):
1469 from configparser import ConfigParser
1470
1471 config = ConfigParser(strict=False)
1472 config.read_file(addSectionHeader(utils.openCheck(filename))) 1402 config.read_file(addSectionHeader(utils.openCheck(filename)))
1473
1474 parentPath = Path(filename).parent 1403 parentPath = Path(filename).parent
1475 self.sectionHeader = config.sections()[0] 1404 self.sectionHeader = config.sections()[0]
1476 # Tracking/display parameters 1405 # Tracking/display parameters
1477 self.videoFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'video-filename')) 1406 self.videoFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'video-filename'))
1478 self.databaseFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'database-filename')) 1407 self.databaseFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'database-filename'))
1490 self.distortionCoefficients = [float(x) for x in distortionCoefficients] 1419 self.distortionCoefficients = [float(x) for x in distortionCoefficients]
1491 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') 1420 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
1492 self.undistort = config.getboolean(self.sectionHeader, 'undistort') 1421 self.undistort = config.getboolean(self.sectionHeader, 'undistort')
1493 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') 1422 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
1494 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') 1423 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
1495
1496 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1497 1424
1498 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename')) 1425 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename'))
1499 1426
1500 # Safety parameters 1427 # Safety parameters
1501 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate 1428 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate
1512 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction') 1439 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction')
1513 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed') 1440 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed')
1514 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance') 1441 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance')
1515 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric') 1442 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric')
1516 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity') 1443 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity')
1444
1445 # Tracking parameters
1446 self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
1447 self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
1448 self.ndisplacements = config.getint(self.sectionHeader, 'ndisplacements')
1449 self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures')
1450 self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt')
1451 self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality')
1452 self.blockSize = config.getint(self.sectionHeader, 'block-size')
1453 self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector')
1454 self.k = config.getfloat(self.sectionHeader, 'k')
1455 self.winSize = config.getint(self.sectionHeader, 'window-size')
1456 self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level')
1457 self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations')
1458 self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error')
1459 self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag')
1460 self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold')
1461 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1462 self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement')
1463 self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time')
1464
1517 1465
1518 def __init__(self, filename = None): 1466 def __init__(self, filename = None):
1519 self.configFilename = filename 1467 self.configFilename = filename
1520 if filename is not None and Path(filename).is_file(): 1468 if filename is not None and Path(filename).is_file():
1521 self.loadConfigFile(filename) 1469 self.loadConfigFile(filename)