comparison trafficintelligence/processing.py @ 1044:75a6ad604cc5

work on motion patterns
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Thu, 05 Jul 2018 17:06:40 -0400
parents c6cf75a2ed08
children 25db2383e7ae
comparison
equal deleted inserted replaced
1043:b735895c8815 1044:75a6ad604cc5
1 #! /usr/bin/env python 1 #! /usr/bin/env python
2 '''Algorithms to process trajectories and moving objects''' 2 '''Algorithms to process trajectories and moving objects'''
3 3
4 import numpy as np 4 import numpy as np
5 5
6 from trafficintelligence import moving 6 from trafficintelligence import ml
7 7
8 def extractSpeeds(objects, zone): 8 def extractSpeeds(objects, zone):
9 speeds = {} 9 speeds = {}
10 objectsNotInZone = [] 10 objectsNotInZone = []
11 import matplotlib.nxutils as nx 11 import matplotlib.nxutils as nx
15 objspeeds = [o.getVelocityAt(i).norm2() for i in range(int(o.length()-1)) if inPolygon[i]] 15 objspeeds = [o.getVelocityAt(i).norm2() for i in range(int(o.length()-1)) if inPolygon[i]]
16 speeds[o.num] = np.mean(objspeeds) # km/h 16 speeds[o.num] = np.mean(objspeeds) # km/h
17 else: 17 else:
18 objectsNotInZone.append(o) 18 objectsNotInZone.append(o)
19 return speeds, objectsNotInZone 19 return speeds, objectsNotInZone
20
21 def learnAssignMotionPatterns(learn, assign, objects, similarities, minSimilarity, similarityFunc, minClusterSize = 0, optimizeCentroid = False, randomInitialization = False, removePrototypesAfterAssignment = False, initialPrototypes = []):
22 '''Learns motion patterns
23
24 During assignments, if using minClusterSize > 0, prototypes can change (be removed)
25 The argument removePrototypesAfterAssignment indicates whether the prototypes are removed or not'''
26 if len(initialPrototypes) > 0:
27 initialPrototypeIndices = list(range(len(initialPrototypes)))
28 trajectories = [p.getMovingObject().getPositions().asArray().T for p in initialPrototypes]
29 else:
30 initialPrototypeIndices = None
31 trajectories = []
32 trajectories.extend([o.getPositions().asArray().T for o in objects])
33
34 if learn:
35 prototypeIndices = ml.prototypeCluster(trajectories, similarities, minSimilarity, similarityFunc, optimizeCentroid, randomInitialization, initialPrototypeIndices)
36 else:
37 prototypeIndices = initialPrototypeIndices
38
39 if assign:
40 assignedPrototypeIndices, labels = ml.assignToPrototypeClusters(trajectories, prototypeIndices, similarities, minSimilarity, similarityFunc, minClusterSize)
41 if minClusterSize > 0 and removePrototypesAfterAssignment: # use prototypeIndices anyway
42 prototypeIndices = assignedPrototypeIndices
43 else:
44 labels = None
45
46 return prototypeIndices, labels
47