-
Notifications
You must be signed in to change notification settings - Fork 0
/
createMegaBlocks.py
53 lines (38 loc) · 1.81 KB
/
createMegaBlocks.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import sys
from pyspark.mllib.clustering import KMeans, KMeansModel
import cv2
import numpy as np
import math
import itertools
def createMegaBlocks(motionInfoOfFrames,noOfRows,noOfCols):
n = 2
megaBlockMotInfVal = np.zeros(((noOfRows/n),(noOfCols/n),len(motionInfoOfFrames),8))
frameCounter = 0
for frame in motionInfoOfFrames:
for index,val in np.ndenumerate(frame[...,0]):
temp = [list(megaBlockMotInfVal[index[0]/n][index[1]/n][frameCounter]),list(frame[index[0]][index[1]])]
megaBlockMotInfVal[index[0]/n][index[1]/n][frameCounter] = np.array(map(sum, zip(*temp)))
frameCounter += 1
print(((noOfRows/n),(noOfCols/n),len(motionInfoOfFrames)))
return megaBlockMotInfVal
def kmeans(megaBlockMotInfVal):
cluster_n = 5
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
flags = cv2.KMEANS_RANDOM_CENTERS
codewords = np.zeros((len(megaBlockMotInfVal),len(megaBlockMotInfVal[0]),cluster_n,8))
for row in range(len(megaBlockMotInfVal)):
for col in range(len(megaBlockMotInfVal[row])):
ret, labels, cw = cv2.kmeans(np.float32(megaBlockMotInfVal[row][col]), cluster_n, criteria,10,flags)
codewords[row][col] = cw
return(codewords)
def kmeans_map_reduce(megaBlockMotInfVal, sc):
cluster_n = 5
codewords = np.zeros((len(megaBlockMotInfVal),len(megaBlockMotInfVal[0]),cluster_n,8))
for row in range(len(megaBlockMotInfVal)):
for col in range(len(megaBlockMotInfVal[row])):
rdd = sc.parallelize(megaBlockMotInfVal[row][col])
cw = KMeans.train(rdd, cluster_n, maxIterations=10, initializationMode="random")
cluster = cw.clusterCenters
val = np.asarray(cluster)
codewords[row][col] = val
return codewords