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'''