comparison scripts/classify-objects.py @ 686:cdee6a3a47b4 dev

allowing alternate database and filename for classify-objects
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 09 Jun 2015 17:29:03 +0200
parents 94b291a5f933
children de278c5e65f6
comparison
equal deleted inserted replaced
685:94b291a5f933 686:cdee6a3a47b4
10 10
11 # TODO add mode detection live 11 # TODO add mode detection live
12 12
13 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene') 13 parser = argparse.ArgumentParser(description='The program processes indicators for all pairs of road users in the scene')
14 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file', required = True) 14 parser.add_argument('--cfg', dest = 'configFilename', help = 'name of the configuration file', required = True)
15 parser.add_argument('-d', dest = 'databaseFilename', help = 'name of the Sqlite database file (overrides the configuration file)')
16 parser.add_argument('-i', dest = 'videoFilename', help = 'name of the video file (overrides the configuration file)')
15 parser.add_argument('-n', dest = 'nObjects', help = 'number of objects to classify', type = int, default = None) 17 parser.add_argument('-n', dest = 'nObjects', help = 'number of objects to classify', type = int, default = None)
16 parser.add_argument('--plot-speed-distributions', dest = 'plotSpeedDistribution', help = 'simply plots the distributions used for each user type', action = 'store_true') 18 parser.add_argument('--plot-speed-distributions', dest = 'plotSpeedDistribution', help = 'simply plots the distributions used for each user type', action = 'store_true')
17 parser.add_argument('--max-speed-distribution-plot', dest = 'maxSpeedDistributionPlot', help = 'if plotting the user distributions, the maximum speed to display', type = float, default = 50.) 19 parser.add_argument('--max-speed-distribution-plot', dest = 'maxSpeedDistributionPlot', help = 'if plotting the user distributions, the maximum speed to display', type = float, default = 50.)
18 #parser.add_argument('-u', dest = 'undistort', help = 'undistort the video (because features have been extracted that way)', action = 'store_true')
19 #parser.add_argument('-f', dest = 'firstFrameNum', help = 'number of first frame number to display', type = int)
20 #parser.add_argument('--last-frame', dest = 'lastFrameNum', help = 'number of last frame number to save (for image saving, no display is made)', type = int)
21 # parser.add_argument('--min-speed-equiprobable', dest = 'minSpeedEquiprobable', help = 'speed value below which all classes are equiprobable (distributions give odd values there) (km/h)', type = float, default = 3.33)
22 # parser.add_argument('--speed-aggregation', dest = 'speedAggregationMethod', help = 'method to aggregate road user speed', type = str, choices = ['median', 'mean', 'quantile'], default = 'median')
23 # parser.add_argument('--speed-aggregation-quantile', dest = 'speedAggregationQuantile', help = 'quantile for the speed aggregation, if quantile is chosen', type = int, default = 50)
24 20
25 args = parser.parse_args() 21 args = parser.parse_args()
26 params = storage.ProcessParameters(args.configFilename) 22 params = storage.ProcessParameters(args.configFilename)
23
24 if args.videoFilename is not None:
25 videoFilename = args.videoFilename
26 else:
27 videoFilename = params.videoFilename
28 if args.databaseFilename is not None:
29 databaseFilename = args.databaseFilename
30 else:
31 databaseFilename = params.databaseFilename
27 32
28 params.convertToFrames(3.6) 33 params.convertToFrames(3.6)
29 if params.homography is not None: 34 if params.homography is not None:
30 invHomography = np.linalg.inv(params.homography) 35 invHomography = np.linalg.inv(params.homography)
31 36
59 plt.legend() 64 plt.legend()
60 plt.title('Probability Density Function') 65 plt.title('Probability Density Function')
61 plt.show() 66 plt.show()
62 sys.exit() 67 sys.exit()
63 68
64 objects = storage.loadTrajectoriesFromSqlite(params.databaseFilename, 'object', args.nObjects, withFeatures = True) 69 objects = storage.loadTrajectoriesFromSqlite(databaseFilename, 'object', args.nObjects, withFeatures = True)
65 #features = storage.loadTrajectoriesFromSqlite(params.databaseFilename, 'feature') 70 #features = storage.loadTrajectoriesFromSqlite(databaseFilename, 'feature')
66 intervals = [] 71 intervals = []
67 for obj in objects: 72 for obj in objects:
68 #obj.setFeatures(features) 73 #obj.setFeatures(features)
69 intervals.append(obj.getTimeInterval()) 74 intervals.append(obj.getTimeInterval())
70 timeInterval = moving.unionIntervals(intervals) 75 timeInterval = moving.unionIntervals(intervals)
71 76
72 capture = cv2.VideoCapture(params.videoFilename) 77 capture = cv2.VideoCapture(videoFilename)
73 width = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH)) 78 width = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
74 height = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT)) 79 height = int(capture.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
75 80
76 pastObjects = [] 81 pastObjects = []
77 if params.undistort: # setup undistortion 82 if params.undistort: # setup undistortion
106 111
107 for obj in objects: 112 for obj in objects:
108 obj.classifyUserTypeHoGSVM(minSpeedEquiprobable = params.minSpeedEquiprobable, speedProbabilities = speedProbabilities) 113 obj.classifyUserTypeHoGSVM(minSpeedEquiprobable = params.minSpeedEquiprobable, speedProbabilities = speedProbabilities)
109 pastObjects.append(obj) 114 pastObjects.append(obj)
110 print('Saving user types') 115 print('Saving user types')
111 storage.setRoadUserTypes(params.databaseFilename, pastObjects) 116 storage.setRoadUserTypes(databaseFilename, pastObjects)