Mercurial > hg > nsaunier > traffic-intelligence
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) |
