-
Notifications
You must be signed in to change notification settings - Fork 5
/
HOG.py
85 lines (67 loc) · 2.26 KB
/
HOG.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import cv2
import numpy
import numpy as np
import Image
import os
from matplotlib import pyplot as plt
bin_n = 16 # Number of bins
def hog(img):
gx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
gy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
mag, ang = cv2.cartToPolar(gx, gy)
bins = np.int32(bin_n*ang/(2*np.pi)) # quantizing binvalues in (0...16)
bin_cells = bins[:10,:10], bins[10:,:10], bins[:10,10:], bins[10:,10:]
mag_cells = mag[:10,:10], mag[10:,:10], mag[:10,10:], mag[10:,10:]
hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]
hist = np.hstack(hists) # hist is a 64 bit vector
return hist
print "OpenCV version : {0}".format(cv2.__version__)
svm_params = dict( kernel_type = cv2.SVM_LINEAR,
svm_type = cv2.SVM_C_SVC,
C=2.67, gamma=5.383 )
path1='d:\\Emmanu\\project-data\\training-set\\1\\'
path2='d:\\Emmanu\\project-data\\training-set\\2\\'
path3='d:\\Emmanu\\project-data\\training-set\\3\\'
training_set = []
training_labels=[]
training_set1 = []
training_labels1=[]
listing1 = os.listdir(path1)
listing2=os.listdir(path2)
listing3=os.listdir(path3)
for file in listing1:
img = cv2.imread(path1 + file)
h=hog(img)
training_set.append(h)
training_labels.append(1)
for file in listing2:
img = cv2.imread(path2 + file)
h=hog(img)
training_set.append(h)
training_labels.append(2)
for file in listing3:
img = cv2.imread(path3 + file)
h=hog(img)
training_set.append(h)
training_labels.append(2)
###### SVM training ########################
trainData=np.float32(training_set)
responses=np.float32(training_labels)
svm = cv2.SVM()
svm.train(trainData,responses, params=svm_params)
svm.save('hog_svm_data1.dat')
for file in listing2:
img = cv2.imread(path2 + file)
h=hog(img)
training_set1.append(h)
training_labels1.append(2)
for file in listing3:
img = cv2.imread(path3 + file)
h=hog(img)
training_set1.append(h)
training_labels1.append(3)
trainData=np.float32(training_set1)
responses=np.float32(training_labels1)
svm1 = cv2.SVM()
svm1.train(trainData,responses, params=svm_params)
svm1.save('hog_svm_data2.dat')