comparison trafficintelligence/storage.py @ 1075:67144f26609e

Updates crop
author Wendlasida
date Wed, 11 Jul 2018 15:01:37 -0400
parents d13f9bfbf3ff
children 3939ae415be0
comparison
equal deleted inserted replaced
1054:d13f9bfbf3ff 1075:67144f26609e
1355 class ProcessParameters(VideoFilenameAddable): 1355 class ProcessParameters(VideoFilenameAddable):
1356 '''Class for all parameters controlling data processing: input, 1356 '''Class for all parameters controlling data processing: input,
1357 method parameters, etc. for tracking and safety 1357 method parameters, etc. for tracking and safety
1358 1358
1359 Note: framerate is already taken into account''' 1359 Note: framerate is already taken into account'''
1360 1360
1361 def loadTrackerConfig(self, filename = None): 1361 def loadConfigFile(self, filename):
1362 from configparser import ConfigParser 1362 from configparser import ConfigParser
1363 1363
1364 config = ConfigParser({ 'acceleration-bound' : '3', 1364 config = ConfigParser({ 'acceleration-bound' : '3',
1365 'min-velocity-cosine' : '0.8', 1365 'min-velocity-cosine' : '0.8',
1366 'ndisplacements' : '3', 1366 'ndisplacements' : '3',
1367 'max-nfeatures' : '1000', 1367 'max-nfeatures' : '1000',
1368 'feature-quality' : '0.0812219538558', 1368 'feature-quality' : '0.0812219538558',
1377 'feature-flag' : '0', 1377 'feature-flag' : '0',
1378 'min-feature-eig-threshold' : '1e-4', 1378 'min-feature-eig-threshold' : '1e-4',
1379 'min-feature-time' : '15', 1379 'min-feature-time' : '15',
1380 'min-feature-displacement' : '0.05', 1380 'min-feature-displacement' : '0.05',
1381 'tracker-reload-time' : '10'}, strict=False) 1381 'tracker-reload-time' : '10'}, strict=False)
1382 if filename is not None:
1383 config.read_file(addSectionHeader(utils.openCheck(filename)))
1384 self.sectionHeader = config.sections()[0]
1385 else:
1386 self.sectionHeader = 'DEFAULT'
1387
1388
1389 #Tracker parameters
1390 self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
1391 self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
1392 self.ndisplacements = config.getint(self.sectionHeader, 'ndisplacements')
1393 self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures')
1394 self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt')
1395 self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality')
1396 self.blockSize = config.getint(self.sectionHeader, 'block-size')
1397 self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector')
1398 self.k = config.getfloat(self.sectionHeader, 'k')
1399 self.winSize = config.getint(self.sectionHeader, 'window-size')
1400 self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level')
1401 self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations')
1402 self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error')
1403 self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag')
1404 self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold')
1405 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1406 self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement')
1407 self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time')
1408
1409 def loadHomographyConfig(self, filename = None):
1410
1411 if filename is None:
1412 self.homographyFilename = None
1413 self.homography = None
1414 else :
1415 from configparser import ConfigParser
1416 config = ConfigParser(strict=False)
1417 config.read_file(addSectionHeader(utils.openCheck(filename)))
1418 parentPath = Path(filename).parent
1419 self.sectionHeader = config.sections()[0]
1420 self.homographyFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'homography-filename'))
1421 if Path(self.homographyFilename).exists():
1422 self.homography = loadtxt(self.homographyFilename)
1423 else:
1424 self.homography = None
1425
1426 def loadDistortionConfig(self, filename = None):
1427 if filename is None:
1428 self.intrinsicCameraFilename = None
1429 self.intrinsicCameraMatrix = None
1430 self.distortionCoefficients = None
1431 self.undistort = False
1432 self.undistortedImageMultiplication = 1.
1433 else:
1434 from configparser import ConfigParser
1435 config = ConfigParser(strict=False)
1436 config.read_file(addSectionHeader(utils.openCheck(filename)))
1437 parentPath = Path(filename).parent
1438 self.sectionHeader = config.sections()[0]
1439 self.intrinsicCameraFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'intrinsic-camera-filename'))
1440 if Path(self.intrinsicCameraFilename).exists():
1441 self.intrinsicCameraMatrix = loadtxt(self.intrinsicCameraFilename)
1442 else:
1443 self.intrinsicCameraMatrix = None
1444 distortionCoefficients = getValuesFromINIFile(filename, 'distortion-coefficients', '=')
1445 self.distortionCoefficients = [float(x) for x in distortionCoefficients]
1446 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
1447 self.undistort = config.getboolean(self.sectionHeader, 'undistort')
1448
1449
1450 def loadConfigFile(self, filename):
1451 from configparser import ConfigParser
1452
1453 config = ConfigParser(strict=False)
1454 config.read_file(addSectionHeader(utils.openCheck(filename))) 1382 config.read_file(addSectionHeader(utils.openCheck(filename)))
1455
1456 parentPath = Path(filename).parent 1383 parentPath = Path(filename).parent
1457 self.sectionHeader = config.sections()[0] 1384 self.sectionHeader = config.sections()[0]
1458 # Tracking/display parameters 1385 # Tracking/display parameters
1459 self.videoFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'video-filename')) 1386 self.videoFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'video-filename'))
1460 self.databaseFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'database-filename')) 1387 self.databaseFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'database-filename'))
1472 self.distortionCoefficients = [float(x) for x in distortionCoefficients] 1399 self.distortionCoefficients = [float(x) for x in distortionCoefficients]
1473 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') 1400 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication')
1474 self.undistort = config.getboolean(self.sectionHeader, 'undistort') 1401 self.undistort = config.getboolean(self.sectionHeader, 'undistort')
1475 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') 1402 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1')
1476 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') 1403 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps')
1477
1478 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1479 1404
1480 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename')) 1405 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename'))
1481 1406
1482 # Safety parameters 1407 # Safety parameters
1483 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate 1408 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate
1495 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed') 1420 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed')
1496 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance') 1421 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance')
1497 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric') 1422 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric')
1498 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity') 1423 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity')
1499 1424
1500 self.configFilename = filename 1425 # Tracking parameters
1426 self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound')
1427 self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine')
1428 self.ndisplacements = config.getint(self.sectionHeader, 'ndisplacements')
1429 self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures')
1430 self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt')
1431 self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality')
1432 self.blockSize = config.getint(self.sectionHeader, 'block-size')
1433 self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector')
1434 self.k = config.getfloat(self.sectionHeader, 'k')
1435 self.winSize = config.getint(self.sectionHeader, 'window-size')
1436 self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level')
1437 self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations')
1438 self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error')
1439 self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag')
1440 self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold')
1441 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time')
1442 self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement')
1443 self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time')
1444
1501 1445
1502 def __init__(self, filename = None): 1446 def __init__(self, filename = None):
1503 if filename is not None and Path(filename).exists(): 1447 if filename is not None and Path(filename).exists():
1504 self.loadConfigFile(filename) 1448 self.loadConfigFile(filename)
1505 else: 1449 else: