Mercurial Hosting > traffic-intelligence
comparison trafficintelligence/storage.py @ 1055:9e4e80fc5943
Merged in Wendlasida/trafficintelligence (pull request #16)
Default
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Mon, 09 Jul 2018 19:51:42 +0000 |
parents | 9d4a06f49cb8 d13f9bfbf3ff |
children | 093e2b892ede |
comparison
equal
deleted
inserted
replaced
1051:c3c3a90c08f8 | 1055:9e4e80fc5943 |
---|---|
407 for obj in objects: | 407 for obj in objects: |
408 if obj.hasFeatures(): | 408 if obj.hasFeatures(): |
409 for feature in obj.getFeatures(): | 409 for feature in obj.getFeatures(): |
410 featureNum = feature.getNum() | 410 featureNum = feature.getNum() |
411 cursor.execute(objectFeatureQuery, (obj.getNum(), featureNum)) | 411 cursor.execute(objectFeatureQuery, (obj.getNum(), featureNum)) |
412 cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), 1)) | 412 cursor.execute(objectQuery, (obj.getNum(), obj.getUserType(), obj.nObjects if hasattr(obj, 'nObjects') and obj.nObjects is not None else 1)) |
413 # Parse curvilinear position structure | 413 # Parse curvilinear position structure |
414 elif(trajectoryType == 'curvilinear'): | 414 elif(trajectoryType == 'curvilinear'): |
415 createCurvilinearTrajectoryTable(cursor) | 415 createCurvilinearTrajectoryTable(cursor) |
416 curvilinearQuery = "INSERT INTO curvilinear_positions VALUES (?,?,?,?,?)" | 416 curvilinearQuery = "INSERT INTO curvilinear_positions VALUES (?,?,?,?,?)" |
417 for obj in objects: | 417 for obj in objects: |
1362 class ProcessParameters(VideoFilenameAddable): | 1362 class ProcessParameters(VideoFilenameAddable): |
1363 '''Class for all parameters controlling data processing: input, | 1363 '''Class for all parameters controlling data processing: input, |
1364 method parameters, etc. for tracking and safety | 1364 method parameters, etc. for tracking and safety |
1365 | 1365 |
1366 Note: framerate is already taken into account''' | 1366 Note: framerate is already taken into account''' |
1367 | |
1368 def loadTrackerConfig(self, filename = None): | |
1369 from configparser import ConfigParser | |
1370 | |
1371 config = ConfigParser({ 'acceleration-bound' : '3', | |
1372 'min-velocity-cosine' : '0.8', | |
1373 'ndisplacements' : '3', | |
1374 'max-nfeatures' : '1000', | |
1375 'feature-quality' : '0.0812219538558', | |
1376 'min-feature-distanceklt' : '3.54964337411', | |
1377 'block-size' : '7', | |
1378 'use-harris-detector' : '0', | |
1379 'k' : '0.04', | |
1380 'window-size' : '6', | |
1381 'pyramid-level' : '5', | |
1382 'min-tracking-error' : '0.183328975142', | |
1383 'max-number-iterations' : '20', | |
1384 'feature-flag' : '0', | |
1385 'min-feature-eig-threshold' : '1e-4', | |
1386 'min-feature-time' : '15', | |
1387 'min-feature-displacement' : '0.05', | |
1388 'tracker-reload-time' : '10'}, strict=False) | |
1389 if filename is not None: | |
1390 config.read_file(addSectionHeader(utils.openCheck(filename))) | |
1391 self.sectionHeader = config.sections()[0] | |
1392 else: | |
1393 self.sectionHeader = 'DEFAULT' | |
1394 | |
1395 | |
1396 #Tracker parameters | |
1397 self.accelerationBound = config.getint(self.sectionHeader, 'acceleration-bound') | |
1398 self.minVelocityCosine = config.getfloat(self.sectionHeader, 'min-velocity-cosine') | |
1399 self.ndisplacements = config.getint(self.sectionHeader, 'ndisplacements') | |
1400 self.maxNFeatures = config.getint(self.sectionHeader, 'max-nfeatures') | |
1401 self.minFeatureDistanceKLT = config.getfloat(self.sectionHeader, 'min-feature-distanceklt') | |
1402 self.featureQuality = config.getfloat(self.sectionHeader, 'feature-quality') | |
1403 self.blockSize = config.getint(self.sectionHeader, 'block-size') | |
1404 self.useHarrisDetector = config.getboolean(self.sectionHeader, 'use-harris-detector') | |
1405 self.k = config.getfloat(self.sectionHeader, 'k') | |
1406 self.winSize = config.getint(self.sectionHeader, 'window-size') | |
1407 self.pyramidLevel = config.getint(self.sectionHeader, 'pyramid-level') | |
1408 self.maxNumberTrackingIterations = config.getint(self.sectionHeader, 'max-number-iterations') | |
1409 self.minTrackingError = config.getfloat(self.sectionHeader, 'min-tracking-error') | |
1410 self.featureFlags = config.getboolean(self.sectionHeader, 'feature-flag') | |
1411 self.minFeatureEigThreshold = config.getfloat(self.sectionHeader, 'min-feature-eig-threshold') | |
1412 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time') | |
1413 self.minFeatureDisplacement = config.getfloat(self.sectionHeader, 'min-feature-displacement') | |
1414 self.updateTimer = config.getint(self.sectionHeader, 'tracker-reload-time') | |
1415 | |
1416 def loadHomographyConfig(self, filename = None): | |
1417 | |
1418 if filename is None: | |
1419 self.homographyFilename = None | |
1420 self.homography = None | |
1421 else : | |
1422 from configparser import ConfigParser | |
1423 config = ConfigParser(strict=False) | |
1424 config.read_file(addSectionHeader(utils.openCheck(filename))) | |
1425 parentPath = Path(filename).parent | |
1426 self.sectionHeader = config.sections()[0] | |
1427 self.homographyFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'homography-filename')) | |
1428 if Path(self.homographyFilename).exists(): | |
1429 self.homography = loadtxt(self.homographyFilename) | |
1430 else: | |
1431 self.homography = None | |
1432 | |
1433 def loadDistortionConfig(self, filename = None): | |
1434 if filename is None: | |
1435 self.intrinsicCameraFilename = None | |
1436 self.intrinsicCameraMatrix = None | |
1437 self.distortionCoefficients = None | |
1438 self.undistort = False | |
1439 self.undistortedImageMultiplication = 1. | |
1440 else: | |
1441 from configparser import ConfigParser | |
1442 config = ConfigParser(strict=False) | |
1443 config.read_file(addSectionHeader(utils.openCheck(filename))) | |
1444 parentPath = Path(filename).parent | |
1445 self.sectionHeader = config.sections()[0] | |
1446 self.intrinsicCameraFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'intrinsic-camera-filename')) | |
1447 if Path(self.intrinsicCameraFilename).exists(): | |
1448 self.intrinsicCameraMatrix = loadtxt(self.intrinsicCameraFilename) | |
1449 else: | |
1450 self.intrinsicCameraMatrix = None | |
1451 distortionCoefficients = getValuesFromINIFile(filename, 'distortion-coefficients', '=') | |
1452 self.distortionCoefficients = [float(x) for x in distortionCoefficients] | |
1453 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') | |
1454 self.undistort = config.getboolean(self.sectionHeader, 'undistort') | |
1455 | |
1367 | 1456 |
1368 def loadConfigFile(self, filename): | 1457 def loadConfigFile(self, filename): |
1369 from configparser import ConfigParser | 1458 from configparser import ConfigParser |
1370 | 1459 |
1371 config = ConfigParser(strict=False) | 1460 config = ConfigParser(strict=False) |
1391 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') | 1480 self.undistortedImageMultiplication = config.getfloat(self.sectionHeader, 'undistorted-size-multiplication') |
1392 self.undistort = config.getboolean(self.sectionHeader, 'undistort') | 1481 self.undistort = config.getboolean(self.sectionHeader, 'undistort') |
1393 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') | 1482 self.firstFrameNum = config.getint(self.sectionHeader, 'frame1') |
1394 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') | 1483 self.videoFrameRate = config.getfloat(self.sectionHeader, 'video-fps') |
1395 | 1484 |
1396 self.minFeatureTime = config.getfloat(self.sectionHeader, 'min-feature-time') | 1485 self.minFeatureTime = config.getint(self.sectionHeader, 'min-feature-time') |
1397 | 1486 |
1398 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename')) | 1487 self.classifierFilename = utils.getRelativeFilename(parentPath, config.get(self.sectionHeader, 'classifier-filename')) |
1399 | 1488 |
1400 # Safety parameters | 1489 # Safety parameters |
1401 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate | 1490 self.maxPredictedSpeed = config.getfloat(self.sectionHeader, 'max-predicted-speed')/3.6/self.videoFrameRate |
1412 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction') | 1501 self.useFeaturesForPrediction = config.getboolean(self.sectionHeader, 'use-features-prediction') |
1413 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed') | 1502 self.constantSpeedPrototypePrediction = config.getboolean(self.sectionHeader, 'constant-speed') |
1414 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance') | 1503 self.maxLcssDistance = config.getfloat(self.sectionHeader, 'max-lcss-distance') |
1415 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric') | 1504 self.lcssMetric = config.get(self.sectionHeader, 'lcss-metric') |
1416 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity') | 1505 self.minLcssSimilarity = config.getfloat(self.sectionHeader, 'min-lcss-similarity') |
1506 | |
1507 self.configFilename = filename | |
1417 | 1508 |
1418 def __init__(self, filename = None): | 1509 def __init__(self, filename = None): |
1419 if filename is not None and Path(filename).exists(): | 1510 if filename is not None and Path(filename).exists(): |
1420 self.loadConfigFile(filename) | 1511 self.loadConfigFile(filename) |
1421 else: | 1512 else: |
1422 print('Configuration filename {} could not be loaded.'.format(filename)) | 1513 print('Configuration filename {} could not be loaded.'.format(filename)) |
1514 self.configFilename = filename | |
1423 | 1515 |
1424 def processVideoArguments(args): | 1516 def processVideoArguments(args): |
1425 '''Loads information from configuration file | 1517 '''Loads information from configuration file |
1426 then checks what was passed on the command line | 1518 then checks what was passed on the command line |
1427 for override (eg video filename and database filename''' | 1519 for override (eg video filename and database filename''' |